All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Siwtch to on-stack variables for block reserves
@ 2023-09-22 19:10 David Sterba
  2023-09-22 19:10 ` [PATCH 1/5] btrfs: use on-stack variable for block reserve in btrfs_evict_inode David Sterba
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

The block reserve structure is small enough to fit on stack so do that
in a few functions and avoid allocation. This in turn allows to remove
the alloc/free wrappers.

David Sterba (5):
  btrfs: use on-stack variable for block reserve in btrfs_evict_inode
  btrfs: use on-stack variable for block reserve in btrfs_truncate
  btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents
  btrfs: relocation: embed block reserve to struct reloc_control
  btrfs: remove unused alloc and free helpers for block group reserves

 fs/btrfs/block-rsv.c  | 22 --------------------
 fs/btrfs/block-rsv.h  |  4 ----
 fs/btrfs/file.c       | 29 +++++++++++---------------
 fs/btrfs/inode.c      | 47 ++++++++++++++++++++-----------------------
 fs/btrfs/relocation.c | 46 +++++++++++++++++++-----------------------
 5 files changed, 55 insertions(+), 93 deletions(-)

-- 
2.41.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/5] btrfs: use on-stack variable for block reserve in btrfs_evict_inode
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
@ 2023-09-22 19:10 ` David Sterba
  2023-09-22 19:10 ` [PATCH 2/5] btrfs: use on-stack variable for block reserve in btrfs_truncate David Sterba
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

We can avoid potential memory allocation failure in btrfs_evict_inode as
the block reserve lifetime is limited to the scope of the function. This
requires +48 bytes on stack.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/inode.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 52576deda654..e1cb7583016d 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -5202,7 +5202,7 @@ void btrfs_evict_inode(struct inode *inode)
 	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
 	struct btrfs_trans_handle *trans;
 	struct btrfs_root *root = BTRFS_I(inode)->root;
-	struct btrfs_block_rsv *rsv = NULL;
+	struct btrfs_block_rsv rsv;
 	int ret;
 
 	trace_btrfs_inode_evict(inode);
@@ -5249,11 +5249,9 @@ void btrfs_evict_inode(struct inode *inode)
 	 */
 	btrfs_kill_delayed_inode_items(BTRFS_I(inode));
 
-	rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);
-	if (!rsv)
-		goto out;
-	rsv->size = btrfs_calc_metadata_size(fs_info, 1);
-	rsv->failfast = true;
+	btrfs_init_metadata_block_rsv(fs_info, &rsv, BTRFS_BLOCK_RSV_TEMP);
+	rsv.size = btrfs_calc_metadata_size(fs_info, 1);
+	rsv.failfast = true;
 
 	btrfs_i_size_write(BTRFS_I(inode), 0);
 
@@ -5265,11 +5263,11 @@ void btrfs_evict_inode(struct inode *inode)
 			.min_type = 0,
 		};
 
-		trans = evict_refill_and_join(root, rsv);
+		trans = evict_refill_and_join(root, &rsv);
 		if (IS_ERR(trans))
-			goto out;
+			goto out_release;
 
-		trans->block_rsv = rsv;
+		trans->block_rsv = &rsv;
 
 		ret = btrfs_truncate_inode_items(trans, root, &control);
 		trans->block_rsv = &fs_info->trans_block_rsv;
@@ -5281,7 +5279,7 @@ void btrfs_evict_inode(struct inode *inode)
 		 */
 		btrfs_btree_balance_dirty_nodelay(fs_info);
 		if (ret && ret != -ENOSPC && ret != -EAGAIN)
-			goto out;
+			goto out_release;
 		else if (!ret)
 			break;
 	}
@@ -5295,16 +5293,17 @@ void btrfs_evict_inode(struct inode *inode)
 	 * If it turns out that we are dropping too many of these, we might want
 	 * to add a mechanism for retrying these after a commit.
 	 */
-	trans = evict_refill_and_join(root, rsv);
+	trans = evict_refill_and_join(root, &rsv);
 	if (!IS_ERR(trans)) {
-		trans->block_rsv = rsv;
+		trans->block_rsv = &rsv;
 		btrfs_orphan_del(trans, BTRFS_I(inode));
 		trans->block_rsv = &fs_info->trans_block_rsv;
 		btrfs_end_transaction(trans);
 	}
 
+out_release:
+	btrfs_block_rsv_release(fs_info, &rsv, (u64)-1, NULL);
 out:
-	btrfs_free_block_rsv(fs_info, rsv);
 	/*
 	 * If we didn't successfully delete, the orphan item will still be in
 	 * the tree and we'll retry on the next mount. Again, we might also want
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/5] btrfs: use on-stack variable for block reserve in btrfs_truncate
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
  2023-09-22 19:10 ` [PATCH 1/5] btrfs: use on-stack variable for block reserve in btrfs_evict_inode David Sterba
@ 2023-09-22 19:10 ` David Sterba
  2023-09-22 19:10 ` [PATCH 3/5] btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents David Sterba
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

We can avoid potential memory allocation failure in btrfs_truncate as
the block reserve lifetime is limited to the scope of the function. This
requires +48 bytes on stack.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/inode.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index e1cb7583016d..780537abeba7 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8246,7 +8246,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 	};
 	struct btrfs_root *root = inode->root;
 	struct btrfs_fs_info *fs_info = root->fs_info;
-	struct btrfs_block_rsv *rsv;
+	struct btrfs_block_rsv rsv;
 	int ret;
 	struct btrfs_trans_handle *trans;
 	u64 mask = fs_info->sectorsize - 1;
@@ -8288,11 +8288,9 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 	 * 2) fs_info->trans_block_rsv - this will have 1 items worth left for
 	 * updating the inode.
 	 */
-	rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);
-	if (!rsv)
-		return -ENOMEM;
-	rsv->size = min_size;
-	rsv->failfast = true;
+	btrfs_init_metadata_block_rsv(fs_info, &rsv, BTRFS_BLOCK_RSV_TEMP);
+	rsv.size = min_size;
+	rsv.failfast = true;
 
 	/*
 	 * 1 for the truncate slack space
@@ -8305,7 +8303,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 	}
 
 	/* Migrate the slack space for the truncate to our reserve */
-	ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, rsv,
+	ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, &rsv,
 				      min_size, false);
 	/*
 	 * We have reserved 2 metadata units when we started the transaction and
@@ -8317,7 +8315,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 		goto out;
 	}
 
-	trans->block_rsv = rsv;
+	trans->block_rsv = &rsv;
 
 	while (1) {
 		struct extent_state *cached_state = NULL;
@@ -8360,9 +8358,9 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 			break;
 		}
 
-		btrfs_block_rsv_release(fs_info, rsv, -1, NULL);
+		btrfs_block_rsv_release(fs_info, &rsv, -1, NULL);
 		ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv,
-					      rsv, min_size, false);
+					      &rsv, min_size, false);
 		/*
 		 * We have reserved 2 metadata units when we started the
 		 * transaction and min_size matches 1 unit, so this should never
@@ -8371,7 +8369,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 		if (WARN_ON(ret))
 			break;
 
-		trans->block_rsv = rsv;
+		trans->block_rsv = &rsv;
 	}
 
 	/*
@@ -8409,7 +8407,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
 		btrfs_btree_balance_dirty(fs_info);
 	}
 out:
-	btrfs_free_block_rsv(fs_info, rsv);
+	btrfs_block_rsv_release(fs_info, &rsv, (u64)-1, NULL);
 	/*
 	 * So if we truncate and then write and fsync we normally would just
 	 * write the extents that changed, which is a problem if we need to
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/5] btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
  2023-09-22 19:10 ` [PATCH 1/5] btrfs: use on-stack variable for block reserve in btrfs_evict_inode David Sterba
  2023-09-22 19:10 ` [PATCH 2/5] btrfs: use on-stack variable for block reserve in btrfs_truncate David Sterba
@ 2023-09-22 19:10 ` David Sterba
  2023-09-22 19:10 ` [PATCH 4/5] btrfs: relocation: embed block reserve to struct reloc_control David Sterba
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

We can avoid potential memory allocation failure in btrfs_truncate as
the block reserve lifetime is limited to the scope of the function. This
requires +48 bytes on stack.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/file.c | 29 ++++++++++++-----------------
 1 file changed, 12 insertions(+), 17 deletions(-)

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 7a070f114a21..1bae9b3d50e1 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2324,7 +2324,7 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
 	u64 min_size = btrfs_calc_insert_metadata_size(fs_info, 1);
 	u64 ino_size = round_up(inode->vfs_inode.i_size, fs_info->sectorsize);
 	struct btrfs_trans_handle *trans = NULL;
-	struct btrfs_block_rsv *rsv;
+	struct btrfs_block_rsv rsv;
 	unsigned int rsv_count;
 	u64 cur_offset;
 	u64 len = end - start;
@@ -2333,13 +2333,9 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
 	if (end <= start)
 		return -EINVAL;
 
-	rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);
-	if (!rsv) {
-		ret = -ENOMEM;
-		goto out;
-	}
-	rsv->size = btrfs_calc_insert_metadata_size(fs_info, 1);
-	rsv->failfast = true;
+	btrfs_init_metadata_block_rsv(fs_info, &rsv, BTRFS_BLOCK_RSV_TEMP);
+	rsv.size = btrfs_calc_insert_metadata_size(fs_info, 1);
+	rsv.failfast = true;
 
 	/*
 	 * 1 - update the inode
@@ -2356,14 +2352,14 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
 	if (IS_ERR(trans)) {
 		ret = PTR_ERR(trans);
 		trans = NULL;
-		goto out_free;
+		goto out_release;
 	}
 
-	ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, rsv,
+	ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, &rsv,
 				      min_size, false);
 	if (WARN_ON(ret))
 		goto out_trans;
-	trans->block_rsv = rsv;
+	trans->block_rsv = &rsv;
 
 	cur_offset = start;
 	drop_args.path = path;
@@ -2478,10 +2474,10 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
 		}
 
 		ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv,
-					      rsv, min_size, false);
+					      &rsv, min_size, false);
 		if (WARN_ON(ret))
 			break;
-		trans->block_rsv = rsv;
+		trans->block_rsv = &rsv;
 
 		cur_offset = drop_args.drop_end;
 		len = end - cur_offset;
@@ -2558,16 +2554,15 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
 
 out_trans:
 	if (!trans)
-		goto out_free;
+		goto out_release;
 
 	trans->block_rsv = &fs_info->trans_block_rsv;
 	if (ret)
 		btrfs_end_transaction(trans);
 	else
 		*trans_out = trans;
-out_free:
-	btrfs_free_block_rsv(fs_info, rsv);
-out:
+out_release:
+	btrfs_block_rsv_release(fs_info, &rsv, (u64)-1, NULL);
 	return ret;
 }
 
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/5] btrfs: relocation: embed block reserve to struct reloc_control
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
                   ` (2 preceding siblings ...)
  2023-09-22 19:10 ` [PATCH 3/5] btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents David Sterba
@ 2023-09-22 19:10 ` David Sterba
  2023-09-22 19:10 ` [PATCH 5/5] btrfs: remove unused alloc and free helpers for block group reserves David Sterba
  2023-09-27 14:29 ` [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

The size of reloc_control is over 1500 bytes, we don't need to allocate
the block reserve separately with potential memory allocation failure,
as this would use the space in the same 2K slab.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/relocation.c | 46 ++++++++++++++++++++-----------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 903621a65244..cdadb4af58ea 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -139,7 +139,7 @@ struct reloc_control {
 	/* inode for moving data */
 	struct inode *data_inode;
 
-	struct btrfs_block_rsv *block_rsv;
+	struct btrfs_block_rsv block_rsv;
 
 	struct btrfs_backref_cache backref_cache;
 
@@ -880,7 +880,7 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
 
 	if (!trans->reloc_reserved) {
 		rsv = trans->block_rsv;
-		trans->block_rsv = rc->block_rsv;
+		trans->block_rsv = &rc->block_rsv;
 		clear_rsv = 1;
 	}
 	reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
@@ -1751,7 +1751,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
 	memset(&next_key, 0, sizeof(next_key));
 
 	while (1) {
-		ret = btrfs_block_rsv_refill(fs_info, rc->block_rsv,
+		ret = btrfs_block_rsv_refill(fs_info, &rc->block_rsv,
 					     min_reserved,
 					     BTRFS_RESERVE_FLUSH_LIMIT);
 		if (ret)
@@ -1774,7 +1774,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
 		 * appropriately.
 		 */
 		reloc_root->last_trans = trans->transid;
-		trans->block_rsv = rc->block_rsv;
+		trans->block_rsv = &rc->block_rsv;
 
 		replaced = 0;
 		max_level = level;
@@ -1871,7 +1871,7 @@ int prepare_to_merge(struct reloc_control *rc, int err)
 again:
 	if (!err) {
 		num_bytes = rc->merging_rsv_size;
-		ret = btrfs_block_rsv_add(fs_info, rc->block_rsv, num_bytes,
+		ret = btrfs_block_rsv_add(fs_info, &rc->block_rsv, num_bytes,
 					  BTRFS_RESERVE_FLUSH_ALL);
 		if (ret)
 			err = ret;
@@ -1880,7 +1880,7 @@ int prepare_to_merge(struct reloc_control *rc, int err)
 	trans = btrfs_join_transaction(rc->extent_root);
 	if (IS_ERR(trans)) {
 		if (!err)
-			btrfs_block_rsv_release(fs_info, rc->block_rsv,
+			btrfs_block_rsv_release(fs_info, &rc->block_rsv,
 						num_bytes, NULL);
 		return PTR_ERR(trans);
 	}
@@ -1888,7 +1888,7 @@ int prepare_to_merge(struct reloc_control *rc, int err)
 	if (!err) {
 		if (num_bytes != rc->merging_rsv_size) {
 			btrfs_end_transaction(trans);
-			btrfs_block_rsv_release(fs_info, rc->block_rsv,
+			btrfs_block_rsv_release(fs_info, &rc->block_rsv,
 						num_bytes, NULL);
 			goto again;
 		}
@@ -2360,7 +2360,7 @@ static int reserve_metadata_space(struct btrfs_trans_handle *trans,
 
 	num_bytes = calcu_metadata_size(rc, node, 1) * 2;
 
-	trans->block_rsv = rc->block_rsv;
+	trans->block_rsv = &rc->block_rsv;
 	rc->reserved_bytes += num_bytes;
 
 	/*
@@ -2368,7 +2368,7 @@ static int reserve_metadata_space(struct btrfs_trans_handle *trans,
 	 * If we get an enospc just kick back -EAGAIN so we know to drop the
 	 * transaction and try to refill when we can flush all the things.
 	 */
-	ret = btrfs_block_rsv_refill(fs_info, rc->block_rsv, num_bytes,
+	ret = btrfs_block_rsv_refill(fs_info, &rc->block_rsv, num_bytes,
 				     BTRFS_RESERVE_FLUSH_LIMIT);
 	if (ret) {
 		tmp = fs_info->nodesize * RELOCATION_RESERVED_NODES;
@@ -2381,8 +2381,7 @@ static int reserve_metadata_space(struct btrfs_trans_handle *trans,
 		 * space for relocation and we will return earlier in
 		 * enospc case.
 		 */
-		rc->block_rsv->size = tmp + fs_info->nodesize *
-				      RELOCATION_RESERVED_NODES;
+		rc->block_rsv.size = tmp + fs_info->nodesize * RELOCATION_RESERVED_NODES;
 		return -EAGAIN;
 	}
 
@@ -3631,21 +3630,18 @@ int prepare_to_relocate(struct reloc_control *rc)
 	struct btrfs_trans_handle *trans;
 	int ret;
 
-	rc->block_rsv = btrfs_alloc_block_rsv(rc->extent_root->fs_info,
-					      BTRFS_BLOCK_RSV_TEMP);
-	if (!rc->block_rsv)
-		return -ENOMEM;
-
+	btrfs_init_metadata_block_rsv(rc->extent_root->fs_info, &rc->block_rsv,
+				      BTRFS_BLOCK_RSV_TEMP);
 	memset(&rc->cluster, 0, sizeof(rc->cluster));
 	rc->search_start = rc->block_group->start;
 	rc->extents_found = 0;
 	rc->nodes_relocated = 0;
 	rc->merging_rsv_size = 0;
 	rc->reserved_bytes = 0;
-	rc->block_rsv->size = rc->extent_root->fs_info->nodesize *
-			      RELOCATION_RESERVED_NODES;
+	rc->block_rsv.size = rc->extent_root->fs_info->nodesize *
+			     RELOCATION_RESERVED_NODES;
 	ret = btrfs_block_rsv_refill(rc->extent_root->fs_info,
-				     rc->block_rsv, rc->block_rsv->size,
+				     &rc->block_rsv, rc->block_rsv.size,
 				     BTRFS_RESERVE_FLUSH_ALL);
 	if (ret)
 		return ret;
@@ -3697,8 +3693,8 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
 
 	while (1) {
 		rc->reserved_bytes = 0;
-		ret = btrfs_block_rsv_refill(fs_info, rc->block_rsv,
-					     rc->block_rsv->size,
+		ret = btrfs_block_rsv_refill(fs_info, &rc->block_rsv,
+					     rc->block_rsv.size,
 					     BTRFS_RESERVE_FLUSH_ALL);
 		if (ret) {
 			err = ret;
@@ -3818,7 +3814,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
 	set_reloc_control(rc);
 
 	btrfs_backref_release_cache(&rc->backref_cache);
-	btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1, NULL);
+	btrfs_block_rsv_release(fs_info, &rc->block_rsv, (u64)-1, NULL);
 
 	/*
 	 * Even in the case when the relocation is cancelled, we should all go
@@ -3834,7 +3830,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
 
 	rc->merge_reloc_tree = false;
 	unset_reloc_control(rc);
-	btrfs_block_rsv_release(fs_info, rc->block_rsv, (u64)-1, NULL);
+	btrfs_block_rsv_release(fs_info, &rc->block_rsv, (u64)-1, NULL);
 
 	/* get rid of pinned extents */
 	trans = btrfs_join_transaction(rc->extent_root);
@@ -3849,7 +3845,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
 	ret = clean_dirty_subvols(rc);
 	if (ret < 0 && !err)
 		err = ret;
-	btrfs_free_block_rsv(fs_info, rc->block_rsv);
+	btrfs_block_rsv_release(fs_info, &rc->block_rsv, (u64)-1, NULL);
 	btrfs_free_path(path);
 	return err;
 }
@@ -4575,7 +4571,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
 
 	if (rc->merge_reloc_tree) {
 		ret = btrfs_block_rsv_migrate(&pending->block_rsv,
-					      rc->block_rsv,
+					      &rc->block_rsv,
 					      rc->nodes_relocated, true);
 		if (ret)
 			return ret;
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 5/5] btrfs: remove unused alloc and free helpers for block group reserves
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
                   ` (3 preceding siblings ...)
  2023-09-22 19:10 ` [PATCH 4/5] btrfs: relocation: embed block reserve to struct reloc_control David Sterba
@ 2023-09-22 19:10 ` David Sterba
  2023-09-27 14:29 ` [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-22 19:10 UTC (permalink / raw)
  To: linux-btrfs; +Cc: David Sterba

There are no remaining users of btrfs_alloc_block_rsv() and
btrfs_free_block_rsv() after conversions to on-stack or embedded
variables, so remove them.

Signed-off-by: David Sterba <dsterba@suse.com>
---
 fs/btrfs/block-rsv.c | 22 ----------------------
 fs/btrfs/block-rsv.h |  4 ----
 2 files changed, 26 deletions(-)

diff --git a/fs/btrfs/block-rsv.c b/fs/btrfs/block-rsv.c
index ceb5f586a2d5..9cb32301e92a 100644
--- a/fs/btrfs/block-rsv.c
+++ b/fs/btrfs/block-rsv.c
@@ -190,28 +190,6 @@ void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
 					    BTRFS_BLOCK_GROUP_METADATA);
 }
 
-struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
-					      enum btrfs_rsv_type type)
-{
-	struct btrfs_block_rsv *block_rsv;
-
-	block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
-	if (!block_rsv)
-		return NULL;
-
-	btrfs_init_metadata_block_rsv(fs_info, block_rsv, type);
-	return block_rsv;
-}
-
-void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
-			  struct btrfs_block_rsv *rsv)
-{
-	if (!rsv)
-		return;
-	btrfs_block_rsv_release(fs_info, rsv, (u64)-1, NULL);
-	kfree(rsv);
-}
-
 int btrfs_block_rsv_add(struct btrfs_fs_info *fs_info,
 			struct btrfs_block_rsv *block_rsv, u64 num_bytes,
 			enum btrfs_reserve_flush_enum flush)
diff --git a/fs/btrfs/block-rsv.h b/fs/btrfs/block-rsv.h
index b0bd12b8652f..f1f52a21682a 100644
--- a/fs/btrfs/block-rsv.h
+++ b/fs/btrfs/block-rsv.h
@@ -53,13 +53,9 @@ struct btrfs_block_rsv {
 
 void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, enum btrfs_rsv_type type);
 void btrfs_init_root_block_rsv(struct btrfs_root *root);
-struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
-					      enum btrfs_rsv_type type);
 void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
 				   struct btrfs_block_rsv *rsv,
 				   enum btrfs_rsv_type type);
-void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
-			  struct btrfs_block_rsv *rsv);
 int btrfs_block_rsv_add(struct btrfs_fs_info *fs_info,
 			struct btrfs_block_rsv *block_rsv, u64 num_bytes,
 			enum btrfs_reserve_flush_enum flush);
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/5] Siwtch to on-stack variables for block reserves
  2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
                   ` (4 preceding siblings ...)
  2023-09-22 19:10 ` [PATCH 5/5] btrfs: remove unused alloc and free helpers for block group reserves David Sterba
@ 2023-09-27 14:29 ` David Sterba
  5 siblings, 0 replies; 7+ messages in thread
From: David Sterba @ 2023-09-27 14:29 UTC (permalink / raw)
  To: David Sterba; +Cc: linux-btrfs

On Fri, Sep 22, 2023 at 09:10:22PM +0200, David Sterba wrote:
> The block reserve structure is small enough to fit on stack so do that
> in a few functions and avoid allocation. This in turn allows to remove
> the alloc/free wrappers.
> 
> David Sterba (5):
>   btrfs: use on-stack variable for block reserve in btrfs_evict_inode
>   btrfs: use on-stack variable for block reserve in btrfs_truncate
>   btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents
>   btrfs: relocation: embed block reserve to struct reloc_control
>   btrfs: remove unused alloc and free helpers for block group reserves

There's a reproducible crash in btrfs/190,

[ 7055.938851] BTRFS: device fsid 9673d357-6c33-44dd-ad15-97e5d65db453 devid 1 transid 12 /dev/vdb scanned by mount (19369)
[ 7055.941209] BTRFS info (device vdb): using crc32c (crc32c-intel) checksum algorithm
[ 7055.941998] BTRFS info (device vdb): using free space tree
[ 7055.951786] BTRFS info (device vdb): auto enabling async discard
[ 7055.977444] INFO: trying to register non-static key.
[ 7055.978023] The code is fine but needs lockdep annotation, or maybe
[ 7055.978621] you didn't initialize this object before use?
[ 7055.979150] turning off the locking correctness validator.
[ 7055.979696] CPU: 5 PID: 19369 Comm: mount Not tainted 6.6.0-rc3-default+ #194
[ 7055.980384] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
[ 7055.981435] Call Trace:
[ 7055.981748]  <TASK>
[ 7055.982026]  dump_stack_lvl+0x46/0x70
[ 7055.982483]  register_lock_class+0xaa3/0xb70
[ 7055.983015]  ? kasan_save_stack+0x3f/0x50
[ 7055.983533]  ? kasan_save_stack+0x2f/0x50
[ 7055.984048]  ? is_dynamic_key+0x1a0/0x1a0
[ 7055.984565]  ? merge_reloc_root+0x125/0xd80 [btrfs]
[ 7055.985227]  ? merge_reloc_roots+0x183/0x480 [btrfs]
[ 7055.985902]  ? btrfs_recover_relocation+0x909/0xa40 [btrfs]
[ 7055.986628]  ? btrfs_start_pre_rw_mount+0x56c/0x810 [btrfs]
[ 7055.987363]  ? open_ctree+0xda6/0x14d0 [btrfs]
[ 7055.987998]  ? legacy_get_tree+0x7b/0xc0
[ 7055.992021]  ? vfs_get_tree+0x3e/0x130
[ 7055.992515]  ? vfs_kern_mount.part.0+0x6e/0xc0
[ 7055.993000]  ? btrfs_mount+0x1b4/0x340 [btrfs]
[ 7055.993616]  ? legacy_get_tree+0x7b/0xc0
[ 7055.994107]  ? vfs_get_tree+0x3e/0x130
[ 7055.994574]  __lock_acquire+0x70/0xfd0
[ 7055.995055]  lock_acquire+0x146/0x3a0
[ 7055.995516]  ? btrfs_block_rsv_refill+0x2f/0xb0 [btrfs]
[ 7055.996231]  ? lock_sync+0xd0/0xd0
[ 7055.996673]  _raw_spin_lock+0x2b/0x70
[ 7055.997150]  ? btrfs_block_rsv_refill+0x2f/0xb0 [btrfs]
[ 7055.997841]  btrfs_block_rsv_refill+0x2f/0xb0 [btrfs]
[ 7055.998510]  merge_reloc_root+0x315/0xd80 [btrfs]
[ 7055.999154]  ? prepare_to_merge+0x970/0x970 [btrfs]
[ 7055.999811]  ? _raw_spin_unlock+0x1a/0x30
[ 7056.000302]  ? btrfs_get_root_ref+0x1e9/0x5a0 [btrfs]
[ 7056.000977]  ? btrfs_init_root_free_objectid+0x160/0x1e0 [btrfs]
[ 7056.001745]  merge_reloc_roots+0x183/0x480 [btrfs]
[ 7056.002305]  ? merge_reloc_root+0xd80/0xd80 [btrfs]
[ 7056.002902]  ? __add_reloc_root+0x1e6/0x250 [btrfs]
[ 7056.003547]  btrfs_recover_relocation+0x909/0xa40 [btrfs]
[ 7056.004269]  ? btrfs_relocate_block_group+0x600/0x600 [btrfs]
[ 7056.005016]  ? __up_write+0x2c0/0x2f0
[ 7056.005486]  ? btrfs_start_pre_rw_mount+0x55a/0x810 [btrfs]
[ 7056.006209]  btrfs_start_pre_rw_mount+0x56c/0x810 [btrfs]
[ 7056.006952]  ? btrfs_clear_oneshot_options+0x20/0x20 [btrfs]
[ 7056.007652]  ? open_ctree+0xcdf/0x14d0 [btrfs]
[ 7056.008186]  open_ctree+0xda6/0x14d0 [btrfs]
[ 7056.008778]  ? init_tree_roots+0x520/0x520 [btrfs]
[ 7056.009423]  btrfs_mount_root+0x571/0x680 [btrfs]
[ 7056.010075]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.010854]  ? legacy_parse_param+0x43/0x3b0
[ 7056.011298]  ? strcmp+0x2e/0x50
[ 7056.011668]  ? kfree+0x117/0x150
[ 7056.012050]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.012506]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.012959]  ? kasan_set_track+0x21/0x30
[ 7056.013375]  ? __kasan_kmalloc+0x83/0x90
[ 7056.013792]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.014469]  legacy_get_tree+0x7b/0xc0
[ 7056.014883]  vfs_get_tree+0x3e/0x130
[ 7056.015273]  vfs_kern_mount.part.0+0x6e/0xc0
[ 7056.015723]  btrfs_mount+0x1b4/0x340 [btrfs]
[ 7056.016248]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.016908]  ? strcmp+0x2e/0x50
[ 7056.017401]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.018068]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.018740]  ? kasan_set_track+0x21/0x30
[ 7056.019362]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.020188]  legacy_get_tree+0x7b/0xc0
[ 7056.020758]  vfs_get_tree+0x3e/0x130
[ 7056.021295]  do_new_mount+0x1ee/0x3d0
[ 7056.021830]  ? do_add_mount+0x140/0x140
[ 7056.022391]  ? cap_capable+0x9f/0xe0
[ 7056.022937]  path_mount+0x21e/0xc30
[ 7056.023457]  ? kasan_quarantine_put+0xad/0x1b0
[ 7056.024091]  ? finish_automount+0x4d0/0x4d0
[ 7056.024690]  ? user_path_at_empty+0x3b/0x50
[ 7056.025288]  ? kmem_cache_free+0xfc/0x3c0
[ 7056.025869]  __x64_sys_mount+0x25c/0x2d0
[ 7056.026440]  ? copy_mnt_ns+0x5d0/0x5d0
[ 7056.026993]  ? mark_held_locks+0x1a/0x80
[ 7056.027557]  ? lockdep_hardirqs_on_prepare.part.0+0xf1/0x1c0
[ 7056.028323]  do_syscall_64+0x2c/0x50
[ 7056.028863]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
[ 7056.029564] RIP: 0033:0x7f2e5b00db5e
[ 7056.032306] RSP: 002b:00007ffff9f8a9c8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
[ 7056.033291] RAX: ffffffffffffffda RBX: 0000565018c489f0 RCX: 00007f2e5b00db5e
[ 7056.034226] RDX: 0000565018c48c20 RSI: 0000565018c48c60 RDI: 0000565018c48c40
[ 7056.035134] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
[ 7056.036053] R10: 0000000000000000 R11: 0000000000000246 R12: 0000565018c48c40
[ 7056.036967] R13: 0000565018c48c20 R14: 00000000ffffffff R15: 00007f2e5b156076
[ 7056.037878]  </TASK>
[ 7056.038274] ==================================================================
[ 7056.039222] BUG: KASAN: null-ptr-deref in do_raw_spin_trylock+0x60/0x110
[ 7056.040111] Read of size 4 at addr 0000000000000000 by task mount/19369
[ 7056.041000] 
[ 7056.041283] CPU: 5 PID: 19369 Comm: mount Not tainted 6.6.0-rc3-default+ #194
[ 7056.042219] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
[ 7056.043633] Call Trace:
[ 7056.044035]  <TASK>
[ 7056.044394]  dump_stack_lvl+0x46/0x70
[ 7056.044946]  kasan_report+0xd4/0x110
[ 7056.045492]  ? do_raw_spin_trylock+0x60/0x110
[ 7056.046115]  ? do_raw_spin_trylock+0x60/0x110
[ 7056.046738]  kasan_check_range+0xec/0x190
[ 7056.047326]  do_raw_spin_trylock+0x60/0x110
[ 7056.047942]  ? do_raw_spin_lock+0x1a0/0x1a0
[ 7056.048562]  ? legacy_get_tree+0x7b/0xc0
[ 7056.049134]  ? vfs_get_tree+0x3e/0x130
[ 7056.049694]  ? vfs_kern_mount.part.0+0x6e/0xc0
[ 7056.050331]  _raw_spin_lock+0x33/0x70
[ 7056.050857]  ? __reserve_bytes+0xef/0x8c0 [btrfs]
[ 7056.051643]  __reserve_bytes+0xef/0x8c0 [btrfs]
[ 7056.052488]  ? handle_reserve_ticket+0x430/0x430 [btrfs]
[ 7056.053419]  ? do_raw_spin_trylock+0xc8/0x110
[ 7056.054061]  ? do_raw_spin_lock+0x1a0/0x1a0
[ 7056.054698]  btrfs_reserve_metadata_bytes+0x36/0x1a0 [btrfs]
[ 7056.055644]  btrfs_block_rsv_refill+0x71/0xb0 [btrfs]
[ 7056.056474]  merge_reloc_root+0x315/0xd80 [btrfs]
[ 7056.057328]  ? prepare_to_merge+0x970/0x970 [btrfs]
[ 7056.058154]  ? _raw_spin_unlock+0x1a/0x30
[ 7056.058778]  ? btrfs_get_root_ref+0x1e9/0x5a0 [btrfs]
[ 7056.059640]  ? btrfs_init_root_free_objectid+0x160/0x1e0 [btrfs]
[ 7056.060575]  merge_reloc_roots+0x183/0x480 [btrfs]
[ 7056.061440]  ? merge_reloc_root+0xd80/0xd80 [btrfs]
[ 7056.062305]  ? __add_reloc_root+0x1e6/0x250 [btrfs]
[ 7056.063149]  btrfs_recover_relocation+0x909/0xa40 [btrfs]
[ 7056.064080]  ? btrfs_relocate_block_group+0x600/0x600 [btrfs]
[ 7056.065046]  ? __up_write+0x2c0/0x2f0
[ 7056.065625]  ? btrfs_start_pre_rw_mount+0x55a/0x810 [btrfs]
[ 7056.066636]  btrfs_start_pre_rw_mount+0x56c/0x810 [btrfs]
[ 7056.067453]  ? btrfs_clear_oneshot_options+0x20/0x20 [btrfs]
[ 7056.068341]  ? open_ctree+0xcdf/0x14d0 [btrfs]
[ 7056.069130]  open_ctree+0xda6/0x14d0 [btrfs]
[ 7056.069855]  ? init_tree_roots+0x520/0x520 [btrfs]
[ 7056.070711]  btrfs_mount_root+0x571/0x680 [btrfs]
[ 7056.071560]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.072539]  ? legacy_parse_param+0x43/0x3b0
[ 7056.073190]  ? strcmp+0x2e/0x50
[ 7056.073716]  ? kfree+0x117/0x150
[ 7056.074246]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.074913]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.075575]  ? kasan_set_track+0x21/0x30
[ 7056.076187]  ? __kasan_kmalloc+0x83/0x90
[ 7056.076790]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.077759]  legacy_get_tree+0x7b/0xc0
[ 7056.078327]  vfs_get_tree+0x3e/0x130
[ 7056.078884]  vfs_kern_mount.part.0+0x6e/0xc0
[ 7056.079512]  btrfs_mount+0x1b4/0x340 [btrfs]
[ 7056.080220]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.080977]  ? strcmp+0x2e/0x50
[ 7056.081496]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.082160]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.082830]  ? kasan_set_track+0x21/0x30
[ 7056.083448]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.084283]  legacy_get_tree+0x7b/0xc0
[ 7056.084850]  vfs_get_tree+0x3e/0x130
[ 7056.085393]  do_new_mount+0x1ee/0x3d0
[ 7056.085948]  ? do_add_mount+0x140/0x140
[ 7056.086527]  ? cap_capable+0x9f/0xe0
[ 7056.087072]  path_mount+0x21e/0xc30
[ 7056.087619]  ? kasan_quarantine_put+0xad/0x1b0
[ 7056.088256]  ? finish_automount+0x4d0/0x4d0
[ 7056.088864]  ? user_path_at_empty+0x3b/0x50
[ 7056.089507]  ? kmem_cache_free+0xfc/0x3c0
[ 7056.090127]  __x64_sys_mount+0x25c/0x2d0
[ 7056.090735]  ? copy_mnt_ns+0x5d0/0x5d0
[ 7056.091331]  ? mark_held_locks+0x1a/0x80
[ 7056.091960]  ? lockdep_hardirqs_on_prepare.part.0+0xf1/0x1c0
[ 7056.092751]  do_syscall_64+0x2c/0x50
[ 7056.093313]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
[ 7056.094059] RIP: 0033:0x7f2e5b00db5e
[ 7056.097060] RSP: 002b:00007ffff9f8a9c8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
[ 7056.098143] RAX: ffffffffffffffda RBX: 0000565018c489f0 RCX: 00007f2e5b00db5e
[ 7056.099132] RDX: 0000565018c48c20 RSI: 0000565018c48c60 RDI: 0000565018c48c40
[ 7056.100129] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
[ 7056.101118] R10: 0000000000000000 R11: 0000000000000246 R12: 0000565018c48c40
[ 7056.102079] R13: 0000565018c48c20 R14: 00000000ffffffff R15: 00007f2e5b156076
[ 7056.103037]  </TASK>
[ 7056.103421] ==================================================================
[ 7056.104423] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 7056.105426] #PF: supervisor read access in kernel mode
[ 7056.106196] #PF: error_code(0x0000) - not-present page
[ 7056.106958] PGD 0 P4D 0 
[ 7056.107416] Oops: 0000 [#1] PREEMPT SMP KASAN
[ 7056.108093] CPU: 5 PID: 19369 Comm: mount Tainted: G    B              6.6.0-rc3-default+ #194
[ 7056.109314] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
[ 7056.114226] RIP: 0010:do_raw_spin_trylock+0x68/0x110
[ 7056.117457] RSP: 0018:ffff88810f947178 EFLAGS: 00010292
[ 7056.118184] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[ 7056.119168] RDX: 0000000000000000 RSI: 0000000000000004 RDI: ffff88810f947140
[ 7056.120172] RBP: 1ffff11021f28e2f R08: 0000000000000001 R09: fffffbfff58a50b0
[ 7056.121176] R10: ffffffffac528587 R11: 3d3d3d3d3d3d3d3d R12: ffff888110310040
[ 7056.122170] R13: 0000000000008000 R14: ffff88810ce10000 R15: 0000000000008000
[ 7056.123135] FS:  00007f2e5ae14800(0000) GS:ffff88811aa00000(0000) knlGS:0000000000000000
[ 7056.124285] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 7056.125087] CR2: 0000000000000000 CR3: 000000010b270005 CR4: 00000000003706a0
[ 7056.126076] Call Trace:
[ 7056.126498]  <TASK>
[ 7056.126876]  ? __die+0x1a/0x60
[ 7056.127356]  ? page_fault_oops+0x6c/0xa0
[ 7056.127942]  ? exc_page_fault+0x54/0xa0
[ 7056.128544]  ? asm_exc_page_fault+0x22/0x30
[ 7056.129189]  ? do_raw_spin_trylock+0x68/0x110
[ 7056.129841]  ? do_raw_spin_trylock+0x68/0x110
[ 7056.130502]  ? do_raw_spin_lock+0x1a0/0x1a0
[ 7056.131153]  ? legacy_get_tree+0x7b/0xc0
[ 7056.131777]  ? vfs_get_tree+0x3e/0x130
[ 7056.132375]  ? vfs_kern_mount.part.0+0x6e/0xc0
[ 7056.133057]  _raw_spin_lock+0x33/0x70
[ 7056.133648]  ? __reserve_bytes+0xef/0x8c0 [btrfs]
[ 7056.134510]  __reserve_bytes+0xef/0x8c0 [btrfs]
[ 7056.135278]  ? handle_reserve_ticket+0x430/0x430 [btrfs]
[ 7056.136142]  ? do_raw_spin_trylock+0xc8/0x110
[ 7056.136806]  ? do_raw_spin_lock+0x1a0/0x1a0
[ 7056.137427]  btrfs_reserve_metadata_bytes+0x36/0x1a0 [btrfs]
[ 7056.138314]  btrfs_block_rsv_refill+0x71/0xb0 [btrfs]
[ 7056.139215]  merge_reloc_root+0x315/0xd80 [btrfs]
[ 7056.140017]  ? prepare_to_merge+0x970/0x970 [btrfs]
[ 7056.140811]  ? _raw_spin_unlock+0x1a/0x30
[ 7056.141444]  ? btrfs_get_root_ref+0x1e9/0x5a0 [btrfs]
[ 7056.142304]  ? btrfs_init_root_free_objectid+0x160/0x1e0 [btrfs]
[ 7056.143226]  merge_reloc_roots+0x183/0x480 [btrfs]
[ 7056.144095]  ? merge_reloc_root+0xd80/0xd80 [btrfs]
[ 7056.144914]  ? __add_reloc_root+0x1e6/0x250 [btrfs]
[ 7056.145710]  btrfs_recover_relocation+0x909/0xa40 [btrfs]
[ 7056.146633]  ? btrfs_relocate_block_group+0x600/0x600 [btrfs]
[ 7056.147602]  ? __up_write+0x2c0/0x2f0
[ 7056.148188]  ? btrfs_start_pre_rw_mount+0x55a/0x810 [btrfs]
[ 7056.149106]  btrfs_start_pre_rw_mount+0x56c/0x810 [btrfs]
[ 7056.149959]  ? btrfs_clear_oneshot_options+0x20/0x20 [btrfs]
[ 7056.150885]  ? open_ctree+0xcdf/0x14d0 [btrfs]
[ 7056.151616]  open_ctree+0xda6/0x14d0 [btrfs]
[ 7056.152333]  ? init_tree_roots+0x520/0x520 [btrfs]
[ 7056.153122]  btrfs_mount_root+0x571/0x680 [btrfs]
[ 7056.153950]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.154905]  ? legacy_parse_param+0x43/0x3b0
[ 7056.155538]  ? strcmp+0x2e/0x50
[ 7056.156062]  ? kfree+0x117/0x150
[ 7056.156596]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.157272]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.157944]  ? kasan_set_track+0x21/0x30
[ 7056.158560]  ? __kasan_kmalloc+0x83/0x90
[ 7056.159175]  ? perf_trace_btrfs_sleep_tree_lock+0x4a0/0x4a0 [btrfs]
[ 7056.160186]  legacy_get_tree+0x7b/0xc0
[ 7056.160752]  vfs_get_tree+0x3e/0x130
[ 7056.161315]  vfs_kern_mount.part.0+0x6e/0xc0
[ 7056.161965]  btrfs_mount+0x1b4/0x340 [btrfs]
[ 7056.162756]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.163558]  ? strcmp+0x2e/0x50
[ 7056.164060]  ? vfs_parse_fs_string+0xcf/0x120
[ 7056.164724]  ? vfs_parse_fs_param+0x180/0x180
[ 7056.165396]  ? kasan_set_track+0x21/0x30
[ 7056.166009]  ? mount_subvol+0x350/0x350 [btrfs]
[ 7056.166806]  legacy_get_tree+0x7b/0xc0
[ 7056.167366]  vfs_get_tree+0x3e/0x130
[ 7056.167937]  do_new_mount+0x1ee/0x3d0
[ 7056.168523]  ? do_add_mount+0x140/0x140
[ 7056.169129]  ? cap_capable+0x9f/0xe0
[ 7056.169669]  path_mount+0x21e/0xc30
[ 7056.170205]  ? kasan_quarantine_put+0xad/0x1b0
[ 7056.170870]  ? finish_automount+0x4d0/0x4d0
[ 7056.171510]  ? user_path_at_empty+0x3b/0x50
[ 7056.172161]  ? kmem_cache_free+0xfc/0x3c0
[ 7056.172784]  __x64_sys_mount+0x25c/0x2d0
[ 7056.173397]  ? copy_mnt_ns+0x5d0/0x5d0
[ 7056.173970]  ? mark_held_locks+0x1a/0x80
[ 7056.174579]  ? lockdep_hardirqs_on_prepare.part.0+0xf1/0x1c0
[ 7056.175398]  do_syscall_64+0x2c/0x50
[ 7056.175960]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
[ 7056.176702] RIP: 0033:0x7f2e5b00db5e
[ 7056.179769] RSP: 002b:00007ffff9f8a9c8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
[ 7056.180797] RAX: ffffffffffffffda RBX: 0000565018c489f0 RCX: 00007f2e5b00db5e
[ 7056.181789] RDX: 0000565018c48c20 RSI: 0000565018c48c60 RDI: 0000565018c48c40
[ 7056.182778] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
[ 7056.183775] R10: 0000000000000000 R11: 0000000000000246 R12: 0000565018c48c40
[ 7056.184766] R13: 0000565018c48c20 R14: 00000000ffffffff R15: 00007f2e5b156076
[ 7056.185752]  </TASK>
[ 7056.188538] CR2: 0000000000000000
[ 7056.189081] ---[ end trace 0000000000000000 ]---
[ 7056.189777] RIP: 0010:do_raw_spin_trylock+0x68/0x110
[ 7056.192980] RSP: 0018:ffff88810f947178 EFLAGS: 00010292
[ 7056.193743] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[ 7056.194737] RDX: 0000000000000000 RSI: 0000000000000004 RDI: ffff88810f947140
[ 7056.195730] RBP: 1ffff11021f28e2f R08: 0000000000000001 R09: fffffbfff58a50b0
[ 7056.196722] R10: ffffffffac528587 R11: 3d3d3d3d3d3d3d3d R12: ffff888110310040
[ 7056.197717] R13: 0000000000008000 R14: ffff88810ce10000 R15: 0000000000008000
[ 7056.198712] FS:  00007f2e5ae14800(0000) GS:ffff88811aa00000(0000) knlGS:0000000000000000
[ 7056.199866] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 7056.200701] CR2: 0000000000000000 CR3: 000000010b270005 CR4: 00000000003706a0
[ 7056.201722] note: mount[19369] exited with irqs disabled
[ 7056.202529] note: mount[19369] exited with preempt_count 1
[failed, exit status 1]_check_dmesg: something found in dmesg (see /tmp/fstests/results//btrfs/190.dmesg)
 [14:21:44]10s - output mismatch (see /tmp/fstests/results//btrfs/190.out.bad)
    --- tests/btrfs/190.out	2020-01-14 21:19:45.483403633 +0000
    +++ /tmp/fstests/results//btrfs/190.out.bad	2023-09-27 14:21:44.439960880 +0000
    @@ -1,2 +1,4 @@
     QA output created by 190
    -Silence is golden
    +./common/rc: line 130: 19369 Killed                  $MOUNT_PROG $*
    +mount /dev/vdb /tmp/scratch failed
    +(see /tmp/fstests/results//btrfs/190.full for details)
    ...
    (Run 'diff -u /tmp/fstests/tests/btrfs/190.out /tmp/fstests/results//btrfs/190.out.bad'  to see the entire diff)

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-09-27 14:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-22 19:10 [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba
2023-09-22 19:10 ` [PATCH 1/5] btrfs: use on-stack variable for block reserve in btrfs_evict_inode David Sterba
2023-09-22 19:10 ` [PATCH 2/5] btrfs: use on-stack variable for block reserve in btrfs_truncate David Sterba
2023-09-22 19:10 ` [PATCH 3/5] btrfs: use on-stack variable for block reserve in btrfs_replace_file_extents David Sterba
2023-09-22 19:10 ` [PATCH 4/5] btrfs: relocation: embed block reserve to struct reloc_control David Sterba
2023-09-22 19:10 ` [PATCH 5/5] btrfs: remove unused alloc and free helpers for block group reserves David Sterba
2023-09-27 14:29 ` [PATCH 0/5] Siwtch to on-stack variables for block reserves David Sterba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.