mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 04:21:03 -04:00
bcachefs: Kill dirent_occupied_size() in rename path
Cc: Hongbo Li <lihongbo22@huawei.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -275,8 +275,8 @@ int bch2_dirent_read_target(struct btree_trans *trans, subvol_inum dir,
|
||||
}
|
||||
|
||||
int bch2_dirent_rename(struct btree_trans *trans,
|
||||
subvol_inum src_dir, struct bch_hash_info *src_hash,
|
||||
subvol_inum dst_dir, struct bch_hash_info *dst_hash,
|
||||
subvol_inum src_dir, struct bch_hash_info *src_hash, u64 *src_dir_i_size,
|
||||
subvol_inum dst_dir, struct bch_hash_info *dst_hash, u64 *dst_dir_i_size,
|
||||
const struct qstr *src_name, subvol_inum *src_inum, u64 *src_offset,
|
||||
const struct qstr *dst_name, subvol_inum *dst_inum, u64 *dst_offset,
|
||||
enum bch_rename_mode mode)
|
||||
@@ -406,6 +406,14 @@ int bch2_dirent_rename(struct btree_trans *trans,
|
||||
new_src->v.d_type == DT_SUBVOL)
|
||||
new_src->v.d_parent_subvol = cpu_to_le32(src_dir.subvol);
|
||||
|
||||
if (old_dst.k)
|
||||
*dst_dir_i_size -= bkey_bytes(old_dst.k);
|
||||
*src_dir_i_size -= bkey_bytes(old_src.k);
|
||||
|
||||
if (mode == BCH_RENAME_EXCHANGE)
|
||||
*src_dir_i_size += bkey_bytes(&new_src->k);
|
||||
*dst_dir_i_size += bkey_bytes(&new_dst->k);
|
||||
|
||||
ret = bch2_trans_update(trans, &dst_iter, &new_dst->k_i, 0);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
@@ -62,8 +62,8 @@ enum bch_rename_mode {
|
||||
};
|
||||
|
||||
int bch2_dirent_rename(struct btree_trans *,
|
||||
subvol_inum, struct bch_hash_info *,
|
||||
subvol_inum, struct bch_hash_info *,
|
||||
subvol_inum, struct bch_hash_info *, u64 *,
|
||||
subvol_inum, struct bch_hash_info *, u64 *,
|
||||
const struct qstr *, subvol_inum *, u64 *,
|
||||
const struct qstr *, subvol_inum *, u64 *,
|
||||
enum bch_rename_mode);
|
||||
|
||||
@@ -417,8 +417,8 @@ int bch2_rename_trans(struct btree_trans *trans,
|
||||
}
|
||||
|
||||
ret = bch2_dirent_rename(trans,
|
||||
src_dir, &src_hash,
|
||||
dst_dir, &dst_hash,
|
||||
src_dir, &src_hash, &src_dir_u->bi_size,
|
||||
dst_dir, &dst_hash, &dst_dir_u->bi_size,
|
||||
src_name, &src_inum, &src_offset,
|
||||
dst_name, &dst_inum, &dst_offset,
|
||||
mode);
|
||||
|
||||
Reference in New Issue
Block a user