summaryrefslogtreecommitdiff
path: root/libbcachefs/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/fs.c')
-rw-r--r--libbcachefs/fs.c64
1 files changed, 15 insertions, 49 deletions
diff --git a/libbcachefs/fs.c b/libbcachefs/fs.c
index 16017079..d3fb0039 100644
--- a/libbcachefs/fs.c
+++ b/libbcachefs/fs.c
@@ -81,9 +81,7 @@ void bch2_inode_update_after_write(struct bch_fs *c,
struct bch_inode_unpacked *bi,
unsigned fields)
{
- set_nlink(&inode->v, bi->bi_flags & BCH_INODE_UNLINKED
- ? 0
- : bi->bi_nlink + nlink_bias(inode->v.i_mode));
+ set_nlink(&inode->v, bch2_inode_nlink_get(bi));
i_uid_write(&inode->v, bi->bi_uid);
i_gid_write(&inode->v, bi->bi_gid);
inode->v.i_mode = bi->bi_mode;
@@ -106,30 +104,22 @@ int __must_check bch2_write_inode_trans(struct btree_trans *trans,
inode_set_fn set,
void *p)
{
- struct bch_fs *c = trans->c;
struct btree_iter *iter = NULL;
struct bkey_inode_buf *inode_p;
int ret;
lockdep_assert_held(&inode->ei_update_lock);
- if (c->opts.new_inode_updates) {
- /* XXX: Don't do this with btree locks held */
- if (!inode->ei_inode_update)
- inode->ei_inode_update =
- bch2_deferred_update_alloc(c, BTREE_ID_INODES, 64);
- } else {
- iter = bch2_trans_get_iter(trans, BTREE_ID_INODES,
- POS(inode->v.i_ino, 0),
- BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
- if (IS_ERR(iter))
- return PTR_ERR(iter);
-
- /* The btree node lock is our lock on the inode: */
- ret = bch2_btree_iter_traverse(iter);
- if (ret)
- return ret;
- }
+ iter = bch2_trans_get_iter(trans, BTREE_ID_INODES,
+ POS(inode->v.i_ino, 0),
+ BTREE_ITER_SLOTS|BTREE_ITER_INTENT);
+ if (IS_ERR(iter))
+ return PTR_ERR(iter);
+
+ /* The btree node lock is our lock on the inode: */
+ ret = bch2_btree_iter_traverse(iter);
+ if (ret)
+ return ret;
*inode_u = inode->ei_inode;
@@ -144,14 +134,7 @@ int __must_check bch2_write_inode_trans(struct btree_trans *trans,
return PTR_ERR(inode_p);
bch2_inode_pack(inode_p, inode_u);
-
- if (!inode->ei_inode_update)
- bch2_trans_update(trans,
- BTREE_INSERT_ENTRY(iter, &inode_p->inode.k_i));
- else
- bch2_trans_update(trans,
- BTREE_INSERT_DEFERRED(inode->ei_inode_update,
- &inode_p->inode.k_i));
+ bch2_trans_update(trans, iter, &inode_p->inode.k_i);
return 0;
}
@@ -489,12 +472,7 @@ static int inode_update_for_link_fn(struct bch_inode_info *inode,
struct bch_fs *c = inode->v.i_sb->s_fs_info;
bi->bi_ctime = bch2_current_time(c);
-
- if (bi->bi_flags & BCH_INODE_UNLINKED)
- bi->bi_flags &= ~BCH_INODE_UNLINKED;
- else
- bi->bi_nlink++;
-
+ bch2_inode_nlink_inc(bi);
return 0;
}
@@ -577,11 +555,7 @@ static int inode_update_for_unlink_fn(struct bch_inode_info *inode,
struct bch_fs *c = inode->v.i_sb->s_fs_info;
bi->bi_ctime = bch2_current_time(c);
- if (bi->bi_nlink)
- bi->bi_nlink--;
- else
- bi->bi_flags |= BCH_INODE_UNLINKED;
-
+ bch2_inode_nlink_dec(bi);
return 0;
}
@@ -749,10 +723,7 @@ static int inode_update_for_rename_fn(struct bch_inode_info *inode,
BUG_ON(bi->bi_nlink &&
S_ISDIR(info->dst_inode->v.i_mode));
- if (bi->bi_nlink)
- bi->bi_nlink--;
- else
- bi->bi_flags |= BCH_INODE_UNLINKED;
+ bch2_inode_nlink_dec(bi);
}
if (inode == info->src_dir ||
@@ -1412,7 +1383,6 @@ static struct inode *bch2_alloc_inode(struct super_block *sb)
inode_init_once(&inode->v);
mutex_init(&inode->ei_update_lock);
mutex_init(&inode->ei_quota_lock);
- inode->ei_inode_update = NULL;
inode->ei_journal_seq = 0;
return &inode->v;
@@ -1470,10 +1440,6 @@ static void bch2_evict_inode(struct inode *vinode)
BUG_ON(!is_bad_inode(&inode->v) && inode->ei_quota_reserved);
- if (inode->ei_inode_update)
- bch2_deferred_update_free(c, inode->ei_inode_update);
- inode->ei_inode_update = NULL;
-
if (!inode->v.i_nlink && !is_bad_inode(&inode->v)) {
bch2_quota_acct(c, inode->ei_qid, Q_SPC, -((s64) inode->v.i_blocks),
KEY_TYPE_QUOTA_WARN);