From: Liu Bo Date: Thu, 25 Jan 2018 18:02:55 +0000 (-0700) Subject: Btrfs: do not check inode's runtime flags under root->orphan_lock X-Git-Tag: v5.15~8810^2~147 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3d5addafd0c49d57afe867339ec1cc535d23715e;p=platform%2Fkernel%2Flinux-starfive.git Btrfs: do not check inode's runtime flags under root->orphan_lock It's not necessary to hold ->orphan_lock when checking inode's runtime flags. Signed-off-by: Liu Bo Reviewed-by: Josef Bacik Signed-off-by: David Sterba --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 28491a8..4d3a4d1 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -3355,14 +3355,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, return -ENOMEM; } - spin_lock(&root->orphan_lock); - if (!root->orphan_block_rsv) { - root->orphan_block_rsv = block_rsv; - } else if (block_rsv) { - btrfs_free_block_rsv(fs_info, block_rsv); - block_rsv = NULL; - } - if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, &inode->runtime_flags)) { #if 0 @@ -3377,12 +3369,23 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, insert = 1; #endif insert = 1; - atomic_inc(&root->orphan_inodes); } if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED, &inode->runtime_flags)) reserve = 1; + + spin_lock(&root->orphan_lock); + /* If someone has created ->orphan_block_rsv, be happy to use it. */ + if (!root->orphan_block_rsv) { + root->orphan_block_rsv = block_rsv; + } else if (block_rsv) { + btrfs_free_block_rsv(fs_info, block_rsv); + block_rsv = NULL; + } + + if (insert) + atomic_inc(&root->orphan_inodes); spin_unlock(&root->orphan_lock); /* grab metadata reservation from transaction handle */