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;
 
 {
        struct replicas_delta *d = r->d;
        struct replicas_delta *top = (void *) r->d + r->used;
+       unsigned i;
+
+       fs_usage->nr_inodes += r->nr_inodes;
 
-       acc_u64s((u64 *) fs_usage,
-                (u64 *) &r->fs_usage, sizeof(*fs_usage) / sizeof(u64));
+       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);
                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;
 
                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:
 
 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];
 };