> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c > index 5daef654956cb..8c3fe7ef56e27 100644 > --- a/fs/xfs/xfs_icache.c > +++ b/fs/xfs/xfs_icache.c > @@ -35,15 +35,20 @@ xfs_inode_alloc( > xfs_ino_t ino) > { > struct xfs_inode *ip; > + gfp_t gfp_mask = GFP_KERNEL; > > /* > - * if this didn't occur in transactions, we could use > - * KM_MAYFAIL and return NULL here on ENOMEM. Set the > - * code up to do this anyway. > + * If this is inside a transaction, we can not fail here, > + * otherwise we can return NULL on ENOMEM. > */ > - ip = kmem_zone_alloc(xfs_inode_zone, 0); > + > + if (current->flags & PF_MEMALLOC_NOFS) > + gfp_mask |= __GFP_NOFAIL; I'm a little worried about this change in beavior here. Can we just keep the unconditional __GFP_NOFAIL and if we really care do the change separately after the series? At that point it should probably use the re-added PF_FSTRANS flag as well.