Re: [PATCH] Btrfs: set keep_lock when necessary in btrfs_defrag_leaves
On Thu, Apr 26, 2018 at 4:01 AM, David Sterbawrote: > On Wed, Apr 25, 2018 at 09:40:34AM +0800, Liu Bo wrote: >> path->keep_lock is set but @path immediatley gets released, this sets >> ->keep_lock only when it's necessary. > > Can you please write down more details for context? This mostly repeats > what the code does, but not why. Thanks. Urr, right, I missed the important piece. ->keep_lock may hold the locks of all nodes on the path instead of only level=1 node and level=0 leaf. As it's more likely that lock content happens on tree root and higher nodes, we have to release as less locks as possible. Will update in v2. thanks, liubo > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] Btrfs: set keep_lock when necessary in btrfs_defrag_leaves
On Wed, Apr 25, 2018 at 09:40:34AM +0800, Liu Bo wrote: > path->keep_lock is set but @path immediatley gets released, this sets > ->keep_lock only when it's necessary. Can you please write down more details for context? This mostly repeats what the code does, but not why. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] Btrfs: set keep_lock when necessary in btrfs_defrag_leaves
path->keep_lock is set but @path immediatley gets released, this sets ->keep_lock only when it's necessary. Signed-off-by: Liu Bo--- fs/btrfs/tree-defrag.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/btrfs/tree-defrag.c b/fs/btrfs/tree-defrag.c index 3c0987ab587d..c12747904d4c 100644 --- a/fs/btrfs/tree-defrag.c +++ b/fs/btrfs/tree-defrag.c @@ -65,8 +65,6 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, memcpy(, >defrag_progress, sizeof(key)); } - path->keep_locks = 1; - ret = btrfs_search_forward(root, , path, BTRFS_OLDEST_GENERATION); if (ret < 0) goto out; @@ -81,6 +79,7 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans, * a deadlock (attempting to write lock an already write locked leaf). */ path->lowest_level = 1; + path->keep_locks = 1; wret = btrfs_search_slot(trans, root, , path, 0, 1); if (wret < 0) { -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html