All of lore.kernel.org
 help / color / mirror / Atom feed
From: Su Yue <suy.fnst@cn.fujitsu.com>
To: <linux-btrfs@vger.kernel.org>
Cc: <suy.fnst@cn.fujitsu.com>, <dsterba@suse.cz>
Subject: [PATCH v5 08/16] btrfs-progs: lowmem: remove parameter @trans of delete_extent_item()
Date: Tue, 8 May 2018 16:30:04 +0800	[thread overview]
Message-ID: <20180508083012.12090-9-suy.fnst@cn.fujitsu.com> (raw)
In-Reply-To: <20180508083012.12090-1-suy.fnst@cn.fujitsu.com>

This patch removes the parameter @trans of delete_extent_item().
It calls try_avoid_extents_overwrite() and starts a transaction
by itself.

Note: This patch and next patches cause error in lowmem repair like:
"Error: Commit_root already set when starting transaction".
Such error will disappear after removing @trans finished.

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
---
 check/mode-lowmem.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
index cad131495c6f..55e06ebf2268 100644
--- a/check/mode-lowmem.c
+++ b/check/mode-lowmem.c
@@ -4124,13 +4124,22 @@ out:
 	return err;
 }
 
-static int delete_extent_tree_item(struct btrfs_trans_handle *trans,
-				   struct btrfs_root *root,
+static int delete_extent_tree_item(struct btrfs_root *root,
 				   struct btrfs_path *path)
 {
 	struct btrfs_key key;
+	struct btrfs_trans_handle *trans;
 	int ret = 0;
 
+	ret = avoid_extents_overwrite(root->fs_info);
+	if (ret)
+		return ret;
+	trans = btrfs_start_transaction(root, 1);
+	if (IS_ERR(trans)) {
+		ret = PTR_ERR(trans);
+		error("fail to start transaction %s", strerror(-ret));
+		goto out;
+	}
 	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
 	btrfs_release_path(path);
 	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
@@ -4148,6 +4157,7 @@ static int delete_extent_tree_item(struct btrfs_trans_handle *trans,
 	else
 		path->slots[0]--;
 out:
+	btrfs_commit_transaction(trans, root);
 	if (ret)
 		error("failed to delete root %llu item[%llu, %u, %llu]",
 		      root->objectid, key.objectid, key.type, key.offset);
@@ -4199,7 +4209,7 @@ again:
 		ret = check_block_group_item(fs_info, eb, slot);
 		if (repair &&
 		    ret & REFERENCER_MISSING)
-			ret = delete_extent_tree_item(trans, root, path);
+			ret = delete_extent_tree_item(root, path);
 		err |= ret;
 		break;
 	case BTRFS_DEV_ITEM_KEY:
@@ -4230,7 +4240,7 @@ again:
 					       key.objectid, -1);
 		if (repair &&
 		    ret & (REFERENCER_MISMATCH | REFERENCER_MISSING))
-			ret = delete_extent_tree_item(trans, root, path);
+			ret = delete_extent_tree_item(root, path);
 		err |= ret;
 		break;
 	case BTRFS_EXTENT_DATA_REF_KEY:
@@ -4243,7 +4253,7 @@ again:
 				btrfs_extent_data_ref_count(eb, dref));
 		if (repair &&
 		    ret & (REFERENCER_MISMATCH | REFERENCER_MISSING))
-			ret = delete_extent_tree_item(trans, root, path);
+			ret = delete_extent_tree_item(root, path);
 		err |= ret;
 		break;
 	case BTRFS_SHARED_BLOCK_REF_KEY:
@@ -4251,7 +4261,7 @@ again:
 						 key.objectid, -1);
 		if (repair &&
 		    ret & (REFERENCER_MISMATCH | REFERENCER_MISSING))
-			ret = delete_extent_tree_item(trans, root, path);
+			ret = delete_extent_tree_item(root, path);
 		err |= ret;
 		break;
 	case BTRFS_SHARED_DATA_REF_KEY:
@@ -4259,7 +4269,7 @@ again:
 						key.objectid);
 		if (repair &&
 		    ret & (REFERENCER_MISMATCH | REFERENCER_MISSING))
-			ret = delete_extent_tree_item(trans, root, path);
+			ret = delete_extent_tree_item(root, path);
 		err |= ret;
 		break;
 	default:
-- 
2.17.0




  parent reply	other threads:[~2018-05-08  8:24 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-08  8:29 [PATCH v5 00/16] btrfs-progs: lowmem: avoid extents overwrite Su Yue
2018-05-08  8:29 ` [PATCH v5 01/16] btrfs-progs: check: move pin_down_tree_blocks to mode-common.c Su Yue
2018-05-08  8:29 ` [PATCH v5 02/16] btrfs-progs: lowmem: exclude extents of metadata blocks Su Yue
2018-05-08  8:29 ` [PATCH v5 03/16] btrfs-progs: lowmem: introduce mark/clear_block_groups_full() Su Yue
2018-05-08  8:30 ` [PATCH v5 04/16] btrfs-progs: lowmem: introduce try_force_cow_in_new_chunk() Su Yue
2018-05-08  8:30 ` [PATCH v5 05/16] btrfs-progs: lowmem: introduce avoid_extents_overwrite() Su Yue
2018-05-08  8:30 ` [PATCH v5 06/16] btrfs-progs: lowmem: exclude extents if init-extent-tree in lowmem Su Yue
2018-05-08  8:30 ` [PATCH v5 07/16] btrfs-progs: lowmem: start to remove parameters @trans " Su Yue
2018-05-08  8:30 ` Su Yue [this message]
2018-05-08  8:30 ` [PATCH v5 09/16] btrfs-progs: lowmem: remove parameter @trans of repair_chunk_item() Su Yue
2018-05-08  8:30 ` [PATCH v5 10/16] btrfs-progs: lowmem: remove parameter @trans of repair_extent_item() Su Yue
2018-05-08  8:30 ` [PATCH v5 11/16] btrfs-progs: lowmem: remove parameter @trans of check_leaf_items() Su Yue
2018-05-08  8:30 ` [PATCH v5 12/16] btrfs-progs: lowmem: remove parameter @trans of repair_tree_back_ref() Su Yue
2018-05-08  8:30 ` [PATCH v5 13/16] btrfs-progs: lowmem: remove parameter @trans of check_btrfs_root() Su Yue
2018-05-08  8:30 ` [PATCH v5 14/16] btrfs-progs: lowmem: introduce repair_block_accounting() Su Yue
2018-05-08  8:30 ` [PATCH v5 15/16] btrfs-progs: lowmem: end of removing parameters @trans in lowmem Su Yue
2018-05-08  8:30 ` [PATCH v5 16/16] btrfs-progs: fsck-tests: add image no extent with normal device size Su Yue
2018-05-08 17:11 ` [PATCH v5 00/16] btrfs-progs: lowmem: avoid extents overwrite David Sterba

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180508083012.12090-9-suy.fnst@cn.fujitsu.com \
    --to=suy.fnst@cn.fujitsu.com \
    --cc=dsterba@suse.cz \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.