Commit 0b3a76e9 authored by Dave Chinner's avatar Dave Chinner Committed by Chandan Babu R
Browse files

xfs: use GFP_KERNEL in pure transaction contexts



When running in a transaction context, memory allocations are scoped
to GFP_NOFS. Hence we don't need to use GFP_NOFS contexts in pure
transaction context allocations - GFP_KERNEL will automatically get
converted to GFP_NOFS as appropriate.

Go through the code and convert all the obvious GFP_NOFS allocations
in transaction context to use GFP_KERNEL. This further reduces the
explicit use of GFP_NOFS in XFS.

Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
parent 94a69db2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -891,7 +891,8 @@ xfs_attr_defer_add(

	struct xfs_attr_intent	*new;

	new = kmem_cache_zalloc(xfs_attr_intent_cache, GFP_NOFS | __GFP_NOFAIL);
	new = kmem_cache_zalloc(xfs_attr_intent_cache,
			GFP_KERNEL | __GFP_NOFAIL);
	new->xattri_op_flags = op_flags;
	new->xattri_da_args = args;

+1 −1
Original line number Diff line number Diff line
@@ -6098,7 +6098,7 @@ __xfs_bmap_add(
			bmap->br_blockcount,
			bmap->br_state);

	bi = kmem_cache_alloc(xfs_bmap_intent_cache, GFP_NOFS | __GFP_NOFAIL);
	bi = kmem_cache_alloc(xfs_bmap_intent_cache, GFP_KERNEL | __GFP_NOFAIL);
	INIT_LIST_HEAD(&bi->bi_list);
	bi->bi_type = type;
	bi->bi_owner = ip;
+3 −3
Original line number Diff line number Diff line
@@ -825,7 +825,7 @@ xfs_defer_alloc(
	struct xfs_defer_pending	*dfp;

	dfp = kmem_cache_zalloc(xfs_defer_pending_cache,
			GFP_NOFS | __GFP_NOFAIL);
			GFP_KERNEL | __GFP_NOFAIL);
	dfp->dfp_ops = ops;
	INIT_LIST_HEAD(&dfp->dfp_work);
	list_add_tail(&dfp->dfp_list, &tp->t_dfops);
@@ -888,7 +888,7 @@ xfs_defer_start_recovery(
	struct xfs_defer_pending	*dfp;

	dfp = kmem_cache_zalloc(xfs_defer_pending_cache,
			GFP_NOFS | __GFP_NOFAIL);
			GFP_KERNEL | __GFP_NOFAIL);
	dfp->dfp_ops = ops;
	dfp->dfp_intent = lip;
	INIT_LIST_HEAD(&dfp->dfp_work);
@@ -979,7 +979,7 @@ xfs_defer_ops_capture(
		return ERR_PTR(error);

	/* Create an object to capture the defer ops. */
	dfc = kzalloc(sizeof(*dfc), GFP_NOFS | __GFP_NOFAIL);
	dfc = kzalloc(sizeof(*dfc), GFP_KERNEL | __GFP_NOFAIL);
	INIT_LIST_HEAD(&dfc->dfc_list);
	INIT_LIST_HEAD(&dfc->dfc_dfops);

+4 −4
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ xfs_dir_init(
	if (error)
		return error;

	args = kzalloc(sizeof(*args), GFP_NOFS | __GFP_NOFAIL);
	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
	if (!args)
		return -ENOMEM;

@@ -273,7 +273,7 @@ xfs_dir_createname(
		XFS_STATS_INC(dp->i_mount, xs_dir_create);
	}

	args = kzalloc(sizeof(*args), GFP_NOFS | __GFP_NOFAIL);
	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
	if (!args)
		return -ENOMEM;

@@ -435,7 +435,7 @@ xfs_dir_removename(
	ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
	XFS_STATS_INC(dp->i_mount, xs_dir_remove);

	args = kzalloc(sizeof(*args), GFP_NOFS | __GFP_NOFAIL);
	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
	if (!args)
		return -ENOMEM;

@@ -496,7 +496,7 @@ xfs_dir_replace(
	if (rval)
		return rval;

	args = kzalloc(sizeof(*args), GFP_NOFS | __GFP_NOFAIL);
	args = kzalloc(sizeof(*args), GFP_KERNEL | __GFP_NOFAIL);
	if (!args)
		return -ENOMEM;

+4 −4
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ xfs_iroot_realloc(
		if (ifp->if_broot_bytes == 0) {
			new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, rec_diff);
			ifp->if_broot = kmalloc(new_size,
						GFP_NOFS | __GFP_NOFAIL);
						GFP_KERNEL | __GFP_NOFAIL);
			ifp->if_broot_bytes = (int)new_size;
			return;
		}
@@ -417,7 +417,7 @@ xfs_iroot_realloc(
		new_max = cur_max + rec_diff;
		new_size = XFS_BMAP_BROOT_SPACE_CALC(mp, new_max);
		ifp->if_broot = krealloc(ifp->if_broot, new_size,
					 GFP_NOFS | __GFP_NOFAIL);
					 GFP_KERNEL | __GFP_NOFAIL);
		op = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1,
						     ifp->if_broot_bytes);
		np = (char *)XFS_BMAP_BROOT_PTR_ADDR(mp, ifp->if_broot, 1,
@@ -443,7 +443,7 @@ xfs_iroot_realloc(
	else
		new_size = 0;
	if (new_size > 0) {
		new_broot = kmalloc(new_size, GFP_NOFS | __GFP_NOFAIL);
		new_broot = kmalloc(new_size, GFP_KERNEL | __GFP_NOFAIL);
		/*
		 * First copy over the btree block header.
		 */
@@ -512,7 +512,7 @@ xfs_idata_realloc(

	if (byte_diff) {
		ifp->if_data = krealloc(ifp->if_data, new_size,
					GFP_NOFS | __GFP_NOFAIL);
					GFP_KERNEL | __GFP_NOFAIL);
		if (new_size == 0)
			ifp->if_data = NULL;
		ifp->if_bytes = new_size;
Loading