Skip to content

Commit

Permalink
Btrfs: do not check inode's runtime flags under root->orphan_lock
Browse files Browse the repository at this point in the history
It's not necessary to hold ->orphan_lock when checking inode's runtime
flags.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Liu Bo authored and David Sterba committed Mar 26, 2018
1 parent bc5511d commit 3d5adda
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 */
Expand Down

0 comments on commit 3d5adda

Please sign in to comment.