mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 20:53:03 +02:00
xfs: use inode_init_always_gfp with __GFP_NOFAIL in xfs_inode_alloc
Just like the inode allocation itself, allocation of the security data
inside of inode_init_always(_gfp) must not fail here as we can be inside
an already dirty transaction context. Note that we do not have to pass
GFP_NOFS explicitly as we are already in a nofs context when in a
transaction, as seen by the call to alloc_inode_sb.
Also update the comment about this a bit to be more clear.
Fixes: bf904248a2 ("[XFS] Combine the XFS and Linux inodes")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
750a361bfc
commit
4e07cd78e1
|
|
@ -82,24 +82,20 @@ static inline xa_mark_t ici_tag_to_mark(unsigned int tag)
|
|||
|
||||
/*
|
||||
* Allocate and initialise an xfs_inode.
|
||||
*
|
||||
* This can happen in context of already dirtied transactions, so the memory
|
||||
* allocations must not fail.
|
||||
*/
|
||||
struct xfs_inode *
|
||||
xfs_inode_alloc(
|
||||
struct xfs_mount *mp,
|
||||
xfs_ino_t ino)
|
||||
{
|
||||
gfp_t gfp = GFP_KERNEL | __GFP_NOFAIL;
|
||||
struct xfs_inode *ip;
|
||||
|
||||
/*
|
||||
* XXX: If this didn't occur in transactions, we could drop GFP_NOFAIL
|
||||
* and return NULL here on ENOMEM.
|
||||
*/
|
||||
ip = alloc_inode_sb(mp->m_super, xfs_inode_cache, GFP_KERNEL | __GFP_NOFAIL);
|
||||
|
||||
if (inode_init_always(mp->m_super, VFS_I(ip))) {
|
||||
kmem_cache_free(xfs_inode_cache, ip);
|
||||
return NULL;
|
||||
}
|
||||
ip = alloc_inode_sb(mp->m_super, xfs_inode_cache, gfp);
|
||||
inode_init_always_gfp(mp->m_super, VFS_I(ip), gfp);
|
||||
|
||||
VFS_I(ip)->i_ino = ino;
|
||||
/* VFS doesn't initialise i_mode! */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user