diff options
author | Nikolay Borisov <nborisov@suse.com> | 2017-02-20 06:50:59 -0500 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-02-28 05:30:10 -0500 |
commit | 73f2e545b68f6af033fd2c083ca9dc3079e79083 (patch) | |
tree | 8426521e9179b91457289683e3a01daa77bd6ccd | |
parent | 3d6ae7bb6a64b7dbc516863eeb99c3182d499aba (diff) |
btrfs: Make btrfs_orphan_add take btrfs_inode
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | fs/btrfs/ctree.h | 3 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 2 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 39 | ||||
-rw-r--r-- | fs/btrfs/relocation.c | 2 |
4 files changed, 24 insertions, 22 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 2bfc2e289f51..af68f8452f19 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -3174,7 +3174,8 @@ int btrfs_update_inode(struct btrfs_trans_handle *trans, | |||
3174 | struct inode *inode); | 3174 | struct inode *inode); |
3175 | int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, | 3175 | int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, |
3176 | struct btrfs_root *root, struct inode *inode); | 3176 | struct btrfs_root *root, struct inode *inode); |
3177 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); | 3177 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, |
3178 | struct btrfs_inode *inode); | ||
3178 | int btrfs_orphan_cleanup(struct btrfs_root *root); | 3179 | int btrfs_orphan_cleanup(struct btrfs_root *root); |
3179 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, | 3180 | void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, |
3180 | struct btrfs_root *root); | 3181 | struct btrfs_root *root); |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 7b2313a4441e..3853fab2f49f 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -10337,7 +10337,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, | |||
10337 | mutex_unlock(&trans->transaction->cache_write_mutex); | 10337 | mutex_unlock(&trans->transaction->cache_write_mutex); |
10338 | 10338 | ||
10339 | if (!IS_ERR(inode)) { | 10339 | if (!IS_ERR(inode)) { |
10340 | ret = btrfs_orphan_add(trans, inode); | 10340 | ret = btrfs_orphan_add(trans, BTRFS_I(inode)); |
10341 | if (ret) { | 10341 | if (ret) { |
10342 | btrfs_add_delayed_iput(inode); | 10342 | btrfs_add_delayed_iput(inode); |
10343 | goto out; | 10343 | goto out; |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index ad93974f86a9..d5339b8d4663 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3172,10 +3172,11 @@ void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, | |||
3172 | * NOTE: caller of this function should reserve 5 units of metadata for | 3172 | * NOTE: caller of this function should reserve 5 units of metadata for |
3173 | * this function. | 3173 | * this function. |
3174 | */ | 3174 | */ |
3175 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | 3175 | int btrfs_orphan_add(struct btrfs_trans_handle *trans, |
3176 | struct btrfs_inode *inode) | ||
3176 | { | 3177 | { |
3177 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); | 3178 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb); |
3178 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3179 | struct btrfs_root *root = inode->root; |
3179 | struct btrfs_block_rsv *block_rsv = NULL; | 3180 | struct btrfs_block_rsv *block_rsv = NULL; |
3180 | int reserve = 0; | 3181 | int reserve = 0; |
3181 | int insert = 0; | 3182 | int insert = 0; |
@@ -3197,7 +3198,7 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | |||
3197 | } | 3198 | } |
3198 | 3199 | ||
3199 | if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, | 3200 | if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, |
3200 | &BTRFS_I(inode)->runtime_flags)) { | 3201 | &inode->runtime_flags)) { |
3201 | #if 0 | 3202 | #if 0 |
3202 | /* | 3203 | /* |
3203 | * For proper ENOSPC handling, we should do orphan | 3204 | * For proper ENOSPC handling, we should do orphan |
@@ -3214,39 +3215,38 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | |||
3214 | } | 3215 | } |
3215 | 3216 | ||
3216 | if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED, | 3217 | if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED, |
3217 | &BTRFS_I(inode)->runtime_flags)) | 3218 | &inode->runtime_flags)) |
3218 | reserve = 1; | 3219 | reserve = 1; |
3219 | spin_unlock(&root->orphan_lock); | 3220 | spin_unlock(&root->orphan_lock); |
3220 | 3221 | ||
3221 | /* grab metadata reservation from transaction handle */ | 3222 | /* grab metadata reservation from transaction handle */ |
3222 | if (reserve) { | 3223 | if (reserve) { |
3223 | ret = btrfs_orphan_reserve_metadata(trans, BTRFS_I(inode)); | 3224 | ret = btrfs_orphan_reserve_metadata(trans, inode); |
3224 | ASSERT(!ret); | 3225 | ASSERT(!ret); |
3225 | if (ret) { | 3226 | if (ret) { |
3226 | atomic_dec(&root->orphan_inodes); | 3227 | atomic_dec(&root->orphan_inodes); |
3227 | clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, | 3228 | clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, |
3228 | &BTRFS_I(inode)->runtime_flags); | 3229 | &inode->runtime_flags); |
3229 | if (insert) | 3230 | if (insert) |
3230 | clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, | 3231 | clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, |
3231 | &BTRFS_I(inode)->runtime_flags); | 3232 | &inode->runtime_flags); |
3232 | return ret; | 3233 | return ret; |
3233 | } | 3234 | } |
3234 | } | 3235 | } |
3235 | 3236 | ||
3236 | /* insert an orphan item to track this unlinked/truncated file */ | 3237 | /* insert an orphan item to track this unlinked/truncated file */ |
3237 | if (insert >= 1) { | 3238 | if (insert >= 1) { |
3238 | ret = btrfs_insert_orphan_item(trans, root, | 3239 | ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode)); |
3239 | btrfs_ino(BTRFS_I(inode))); | ||
3240 | if (ret) { | 3240 | if (ret) { |
3241 | atomic_dec(&root->orphan_inodes); | 3241 | atomic_dec(&root->orphan_inodes); |
3242 | if (reserve) { | 3242 | if (reserve) { |
3243 | clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, | 3243 | clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED, |
3244 | &BTRFS_I(inode)->runtime_flags); | 3244 | &inode->runtime_flags); |
3245 | btrfs_orphan_release_metadata(BTRFS_I(inode)); | 3245 | btrfs_orphan_release_metadata(inode); |
3246 | } | 3246 | } |
3247 | if (ret != -EEXIST) { | 3247 | if (ret != -EEXIST) { |
3248 | clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, | 3248 | clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, |
3249 | &BTRFS_I(inode)->runtime_flags); | 3249 | &inode->runtime_flags); |
3250 | btrfs_abort_transaction(trans, ret); | 3250 | btrfs_abort_transaction(trans, ret); |
3251 | return ret; | 3251 | return ret; |
3252 | } | 3252 | } |
@@ -3458,7 +3458,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) | |||
3458 | ret = PTR_ERR(trans); | 3458 | ret = PTR_ERR(trans); |
3459 | goto out; | 3459 | goto out; |
3460 | } | 3460 | } |
3461 | ret = btrfs_orphan_add(trans, inode); | 3461 | ret = btrfs_orphan_add(trans, BTRFS_I(inode)); |
3462 | btrfs_end_transaction(trans); | 3462 | btrfs_end_transaction(trans); |
3463 | if (ret) { | 3463 | if (ret) { |
3464 | iput(inode); | 3464 | iput(inode); |
@@ -4060,7 +4060,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) | |||
4060 | goto out; | 4060 | goto out; |
4061 | 4061 | ||
4062 | if (inode->i_nlink == 0) { | 4062 | if (inode->i_nlink == 0) { |
4063 | ret = btrfs_orphan_add(trans, inode); | 4063 | ret = btrfs_orphan_add(trans, BTRFS_I(inode)); |
4064 | if (ret) | 4064 | if (ret) |
4065 | goto out; | 4065 | goto out; |
4066 | } | 4066 | } |
@@ -4177,7 +4177,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
4177 | goto out; | 4177 | goto out; |
4178 | } | 4178 | } |
4179 | 4179 | ||
4180 | err = btrfs_orphan_add(trans, inode); | 4180 | err = btrfs_orphan_add(trans, BTRFS_I(inode)); |
4181 | if (err) | 4181 | if (err) |
4182 | goto out; | 4182 | goto out; |
4183 | 4183 | ||
@@ -4992,7 +4992,7 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr) | |||
4992 | * so we need to guarantee from this point on that everything | 4992 | * so we need to guarantee from this point on that everything |
4993 | * will be consistent. | 4993 | * will be consistent. |
4994 | */ | 4994 | */ |
4995 | ret = btrfs_orphan_add(trans, inode); | 4995 | ret = btrfs_orphan_add(trans, BTRFS_I(inode)); |
4996 | btrfs_end_transaction(trans); | 4996 | btrfs_end_transaction(trans); |
4997 | if (ret) | 4997 | if (ret) |
4998 | return ret; | 4998 | return ret; |
@@ -9865,7 +9865,8 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
9865 | new_dentry->d_name.len); | 9865 | new_dentry->d_name.len); |
9866 | } | 9866 | } |
9867 | if (!ret && new_inode->i_nlink == 0) | 9867 | if (!ret && new_inode->i_nlink == 0) |
9868 | ret = btrfs_orphan_add(trans, d_inode(new_dentry)); | 9868 | ret = btrfs_orphan_add(trans, |
9869 | BTRFS_I(d_inode(new_dentry))); | ||
9869 | if (ret) { | 9870 | if (ret) { |
9870 | btrfs_abort_transaction(trans, ret); | 9871 | btrfs_abort_transaction(trans, ret); |
9871 | goto out_fail; | 9872 | goto out_fail; |
@@ -10482,7 +10483,7 @@ static int btrfs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) | |||
10482 | ret = btrfs_update_inode(trans, root, inode); | 10483 | ret = btrfs_update_inode(trans, root, inode); |
10483 | if (ret) | 10484 | if (ret) |
10484 | goto out_inode; | 10485 | goto out_inode; |
10485 | ret = btrfs_orphan_add(trans, inode); | 10486 | ret = btrfs_orphan_add(trans, BTRFS_I(inode)); |
10486 | if (ret) | 10487 | if (ret) |
10487 | goto out_inode; | 10488 | goto out_inode; |
10488 | 10489 | ||
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index e48625413fcb..d60df51959f7 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -4246,7 +4246,7 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, | |||
4246 | BUG_ON(IS_ERR(inode) || is_bad_inode(inode)); | 4246 | BUG_ON(IS_ERR(inode) || is_bad_inode(inode)); |
4247 | BTRFS_I(inode)->index_cnt = group->key.objectid; | 4247 | BTRFS_I(inode)->index_cnt = group->key.objectid; |
4248 | 4248 | ||
4249 | err = btrfs_orphan_add(trans, inode); | 4249 | err = btrfs_orphan_add(trans, BTRFS_I(inode)); |
4250 | out: | 4250 | out: |
4251 | btrfs_end_transaction(trans); | 4251 | btrfs_end_transaction(trans); |
4252 | btrfs_btree_balance_dirty(fs_info); | 4252 | btrfs_btree_balance_dirty(fs_info); |