On 11.05.2018 03:11, Omar Sandoval wrote: > From: Omar Sandoval <osan...@fb.com> > > btrfs_orphan_commit_root() tries to delete an orphan item for a > subvolume in the tree root, but we don't actually insert that item in > the first place. See commit 0a0d4415e338 ("Btrfs: delete dead code in > btrfs_orphan_add()"). We can get rid of it. > > root->orphan_inodes was used to as a refcount for root->orphan_block_rsv > and for btrfs_orphan_commit_root(), but both are gone now, so we can get > rid of it, as well.
So this really means that the logic for orphaned root item is completely defunct. Perhaps: a) This commit should be expanded to delete all the logic surrounding orphaned roots: btrfs_find_orphan_roots, BTRFS_ROOT_ORPHAN_ITEM_INSERTED flag define and any accompanying logic that utilizes this flag (end of btrfs_orphan_cleanup, orphan root logic at the end of btrfs_get_fs_root as well) b) Have those changes in a separate patch > > Signed-off-by: Omar Sandoval <osan...@fb.com> > --- > fs/btrfs/ctree.h | 3 --- > fs/btrfs/disk-io.c | 1 - > fs/btrfs/inode.c | 40 ++++------------------------------------ > fs/btrfs/transaction.c | 1 - > 4 files changed, 4 insertions(+), 41 deletions(-) > > diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h > index d66241a35fab..51408de11af2 100644 > --- a/fs/btrfs/ctree.h > +++ b/fs/btrfs/ctree.h > @@ -1219,7 +1219,6 @@ struct btrfs_root { > spinlock_t log_extents_lock[2]; > struct list_head logged_list[2]; > > - atomic_t orphan_inodes; > int orphan_cleanup_state; > > spinlock_t inode_lock; > @@ -3233,8 +3232,6 @@ int btrfs_update_inode_fallback(struct > btrfs_trans_handle *trans, > int btrfs_orphan_add(struct btrfs_trans_handle *trans, > struct btrfs_inode *inode); > int btrfs_orphan_cleanup(struct btrfs_root *root); > -void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, > - struct btrfs_root *root); > int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size); > void btrfs_invalidate_inodes(struct btrfs_root *root); > void btrfs_add_delayed_iput(struct inode *inode); > diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c > index 24e15e2080f4..4a40bfdddabc 100644 > --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -1214,7 +1214,6 @@ static void __setup_root(struct btrfs_root *root, > struct btrfs_fs_info *fs_info, > atomic_set(&root->log_commit[1], 0); > atomic_set(&root->log_writers, 0); > atomic_set(&root->log_batch, 0); > - atomic_set(&root->orphan_inodes, 0); > refcount_set(&root->refs, 1); > atomic_set(&root->will_be_snapshotted, 0); > root->log_transid = 0; > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c > index 50f10882a715..207e1d139b31 100644 > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -3292,30 +3292,6 @@ void btrfs_run_delayed_iputs(struct btrfs_fs_info > *fs_info) > spin_unlock(&fs_info->delayed_iput_lock); > } > > -/* > - * This is called in transaction commit time. If there are no orphan files in > - * the subvolume, it removes the orphan item. > - */ > -void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, > - struct btrfs_root *root) > -{ > - struct btrfs_fs_info *fs_info = root->fs_info; > - int ret; > - > - if (atomic_read(&root->orphan_inodes) == 0 && > - root->orphan_cleanup_state == ORPHAN_CLEANUP_DONE && > - test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state) && > - btrfs_root_refs(&root->root_item) > 0) { > - ret = btrfs_del_orphan_item(trans, fs_info->tree_root, > - root->root_key.objectid); > - if (ret) > - btrfs_abort_transaction(trans, ret); > - else > - clear_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, > - &root->state); > - } > -} > - > /* > * This creates an orphan entry for the given inode in case something goes > wrong > * in the middle of an unlink. > @@ -3330,11 +3306,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, > &inode->runtime_flags)) > return 0; > > - atomic_inc(&root->orphan_inodes); > - > ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode)); > if (ret && ret != -EEXIST) { > - atomic_dec(&root->orphan_inodes); > clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, &inode->runtime_flags); > btrfs_abort_transaction(trans, ret); > return ret; > @@ -3360,8 +3333,6 @@ static int btrfs_orphan_del(struct btrfs_trans_handle > *trans, > if (trans) > ret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode)); > > - atomic_dec(&root->orphan_inodes); > - > return ret; > } > > @@ -3519,12 +3490,11 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) > } > > /* > - * add this inode to the orphan list so btrfs_orphan_del does > - * the proper thing when we hit it > + * Mark this inode as having an orphan item 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++; > > @@ -9146,11 +9116,9 @@ void btrfs_destroy_inode(struct inode *inode) > 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_I(inode)->runtime_flags)) > + btrfs_info(fs_info, "inode %llu still has an orphan item", > btrfs_ino(BTRFS_I(inode))); > - atomic_dec(&root->orphan_inodes); > - } > > while (1) { > ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1); > diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c > index c944b4769e3c..44af1edf15d1 100644 > --- a/fs/btrfs/transaction.c > +++ b/fs/btrfs/transaction.c > @@ -1250,7 +1250,6 @@ static noinline int commit_fs_roots(struct > btrfs_trans_handle *trans) > > btrfs_free_log(trans, root); > btrfs_update_reloc_root(trans, root); > - btrfs_orphan_commit_root(trans, root); > > btrfs_save_ino_cache(root, trans); > > -- 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