Skip to content

Commit

Permalink
Btrfs: get rid of BTRFS_INODE_HAS_ORPHAN_ITEM
Browse files Browse the repository at this point in the history
Now that we don't add orphan items for truncate, there can't be races on
adding or deleting an orphan item, so this bit is unnecessary.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
Omar Sandoval authored and David Sterba committed May 28, 2018
1 parent f7e9e8f commit 7b40b69
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 57 deletions.
1 change: 0 additions & 1 deletion fs/btrfs/btrfs_inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#define BTRFS_INODE_ORPHAN_META_RESERVED 1
#define BTRFS_INODE_DUMMY 2
#define BTRFS_INODE_IN_DEFRAG 3
#define BTRFS_INODE_HAS_ORPHAN_ITEM 4
#define BTRFS_INODE_HAS_ASYNC_EXTENT 5
#define BTRFS_INODE_NEEDS_FULL_SYNC 6
#define BTRFS_INODE_COPY_EVERYTHING 7
Expand Down
76 changes: 20 additions & 56 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -3359,7 +3359,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
struct btrfs_root *root = inode->root;
struct btrfs_block_rsv *block_rsv = NULL;
int reserve = 0;
bool insert = false;
int ret;

if (!root->orphan_block_rsv) {
Expand All @@ -3369,10 +3368,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
return -ENOMEM;
}

if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&inode->runtime_flags))
insert = true;

if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
&inode->runtime_flags))
reserve = 1;
Expand All @@ -3386,8 +3381,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
block_rsv = NULL;
}

if (insert)
atomic_inc(&root->orphan_inodes);
atomic_inc(&root->orphan_inodes);
spin_unlock(&root->orphan_lock);

/* grab metadata reservation from transaction handle */
Expand All @@ -3403,36 +3397,28 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans,
atomic_dec(&root->orphan_inodes);
clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
&inode->runtime_flags);
if (insert)
clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&inode->runtime_flags);
return ret;
}
}

/* insert an orphan item to track this unlinked file */
if (insert) {
ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode));
if (ret) {
if (reserve) {
clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
&inode->runtime_flags);
btrfs_orphan_release_metadata(inode);
}
/*
* btrfs_orphan_commit_root may race with us and set
* ->orphan_block_rsv to zero, in order to avoid that,
* decrease ->orphan_inodes after everything is done.
*/
atomic_dec(&root->orphan_inodes);
if (ret != -EEXIST) {
clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&inode->runtime_flags);
btrfs_abort_transaction(trans, ret);
return ret;
}
ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode));
if (ret) {
if (reserve) {
clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
&inode->runtime_flags);
btrfs_orphan_release_metadata(inode);
}
/*
* btrfs_orphan_commit_root may race with us and set
* ->orphan_block_rsv to zero, in order to avoid that,
* decrease ->orphan_inodes after everything is done.
*/
atomic_dec(&root->orphan_inodes);
if (ret != -EEXIST) {
btrfs_abort_transaction(trans, ret);
return ret;
}
ret = 0;
}

return 0;
Expand All @@ -3446,14 +3432,9 @@ static int btrfs_orphan_del(struct btrfs_trans_handle *trans,
struct btrfs_inode *inode)
{
struct btrfs_root *root = inode->root;
int delete_item = 0;
int ret = 0;

if (test_and_clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&inode->runtime_flags))
delete_item = 1;

if (delete_item && trans)
if (trans)
ret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode));

if (test_and_clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
Expand All @@ -3465,8 +3446,7 @@ static int btrfs_orphan_del(struct btrfs_trans_handle *trans,
* to zero, in order to avoid that, decrease ->orphan_inodes after
* everything is done.
*/
if (delete_item)
atomic_dec(&root->orphan_inodes);
atomic_dec(&root->orphan_inodes);

return ret;
}
Expand Down Expand Up @@ -3624,12 +3604,6 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
continue;
}

/*
* add this inode to the orphan list so btrfs_orphan_del does
* the proper thing when we hit it
*/
set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&BTRFS_I(inode)->runtime_flags);
atomic_inc(&root->orphan_inodes);

nr_unlink++;
Expand Down Expand Up @@ -5527,11 +5501,8 @@ void btrfs_evict_inode(struct inode *inode)

btrfs_free_io_failure_record(BTRFS_I(inode), 0, (u64)-1);

if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) {
BUG_ON(test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&BTRFS_I(inode)->runtime_flags));
if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags))
goto no_delete;
}

if (inode->i_nlink > 0) {
BUG_ON(btrfs_root_refs(&root->root_item) != 0 &&
Expand Down Expand Up @@ -9442,13 +9413,6 @@ void btrfs_destroy_inode(struct inode *inode)
if (!root)
goto free;

if (test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
&BTRFS_I(inode)->runtime_flags)) {
btrfs_info(fs_info, "inode %llu still on the orphan list",
btrfs_ino(BTRFS_I(inode)));
atomic_dec(&root->orphan_inodes);
}

while (1) {
ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);
if (!ordered)
Expand Down

0 comments on commit 7b40b69

Please sign in to comment.