mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 18:30:06 +00:00
bcachefs: Make replicas_delta_list smaller
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
fbc519ab2e
commit
77d63522f0
3 changed files with 20 additions and 10 deletions
|
@ -587,9 +587,11 @@ static inline int do_btree_insert_at(struct btree_trans *trans,
|
|||
bch2_journal_res_put(&c->journal, &trans->journal_res);
|
||||
out_clear_replicas:
|
||||
if (trans->fs_usage_deltas) {
|
||||
memset(&trans->fs_usage_deltas->fs_usage, 0,
|
||||
sizeof(trans->fs_usage_deltas->fs_usage));
|
||||
trans->fs_usage_deltas->used = 0;
|
||||
memset((void *) trans->fs_usage_deltas +
|
||||
offsetof(struct replicas_delta_list, memset_start), 0,
|
||||
(void *) &trans->fs_usage_deltas->memset_end -
|
||||
(void *) &trans->fs_usage_deltas->memset_start);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -585,9 +585,14 @@ void bch2_replicas_delta_list_apply(struct bch_fs *c,
|
|||
{
|
||||
struct replicas_delta *d = r->d;
|
||||
struct replicas_delta *top = (void *) r->d + r->used;
|
||||
unsigned i;
|
||||
|
||||
acc_u64s((u64 *) fs_usage,
|
||||
(u64 *) &r->fs_usage, sizeof(*fs_usage) / sizeof(u64));
|
||||
fs_usage->nr_inodes += r->nr_inodes;
|
||||
|
||||
for (i = 0; i < BCH_REPLICAS_MAX; i++) {
|
||||
fs_usage->reserved += r->persistent_reserved[i];
|
||||
fs_usage->persistent_reserved[i] += r->persistent_reserved[i];
|
||||
}
|
||||
|
||||
while (d != top) {
|
||||
BUG_ON((void *) d > (void *) top);
|
||||
|
@ -1739,9 +1744,9 @@ int bch2_trans_mark_key(struct btree_trans *trans, struct bkey_s_c k,
|
|||
d = replicas_deltas_realloc(trans, 0);
|
||||
|
||||
if (!(flags & BCH_BUCKET_MARK_OVERWRITE))
|
||||
d->fs_usage.nr_inodes++;
|
||||
d->nr_inodes++;
|
||||
else
|
||||
d->fs_usage.nr_inodes--;
|
||||
d->nr_inodes--;
|
||||
return 0;
|
||||
case KEY_TYPE_reservation: {
|
||||
unsigned replicas = bkey_s_c_to_reservation(k).v->nr_replicas;
|
||||
|
@ -1750,10 +1755,9 @@ int bch2_trans_mark_key(struct btree_trans *trans, struct bkey_s_c k,
|
|||
|
||||
sectors *= replicas;
|
||||
replicas = clamp_t(unsigned, replicas, 1,
|
||||
ARRAY_SIZE(d->fs_usage.persistent_reserved));
|
||||
ARRAY_SIZE(d->persistent_reserved));
|
||||
|
||||
d->fs_usage.reserved += sectors;
|
||||
d->fs_usage.persistent_reserved[replicas - 1] += sectors;
|
||||
d->persistent_reserved[replicas - 1] += sectors;
|
||||
return 0;
|
||||
}
|
||||
case KEY_TYPE_reflink_p:
|
||||
|
|
|
@ -100,7 +100,11 @@ struct replicas_delta {
|
|||
struct replicas_delta_list {
|
||||
unsigned size;
|
||||
unsigned used;
|
||||
struct bch_fs_usage fs_usage;
|
||||
|
||||
struct {} memset_start;
|
||||
u64 nr_inodes;
|
||||
u64 persistent_reserved[BCH_REPLICAS_MAX];
|
||||
struct {} memset_end;
|
||||
struct replicas_delta d[0];
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue