aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Borisov <nborisov@suse.com>2017-02-20 06:50:59 -0500
committerDavid Sterba <dsterba@suse.com>2017-02-28 05:30:10 -0500
commit73f2e545b68f6af033fd2c083ca9dc3079e79083 (patch)
tree8426521e9179b91457289683e3a01daa77bd6ccd
parent3d6ae7bb6a64b7dbc516863eeb99c3182d499aba (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.h3
-rw-r--r--fs/btrfs/extent-tree.c2
-rw-r--r--fs/btrfs/inode.c39
-rw-r--r--fs/btrfs/relocation.c2
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);
3175int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, 3175int 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);
3177int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode); 3177int btrfs_orphan_add(struct btrfs_trans_handle *trans,
3178 struct btrfs_inode *inode);
3178int btrfs_orphan_cleanup(struct btrfs_root *root); 3179int btrfs_orphan_cleanup(struct btrfs_root *root);
3179void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans, 3180void 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 */
3175int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) 3175int 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));
4250out: 4250out:
4251 btrfs_end_transaction(trans); 4251 btrfs_end_transaction(trans);
4252 btrfs_btree_balance_dirty(fs_info); 4252 btrfs_btree_balance_dirty(fs_info);