bcachefs: Fix struct with flex member ABI warning
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 17 Apr 2025 16:42:13 +0000 (12:42 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 22 May 2025 00:14:24 +0000 (20:14 -0400)
This pops up when buliding in userspace.

The structs aren't actually variable length, but no way to tell the
compiler that...

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/disk_accounting.c
fs/bcachefs/disk_accounting.h

index 1f0422bfae359fd50b640d4fbfca2b2240c36216..e399237e124ad245d0ed2830d09f62fdf6366211 100644 (file)
@@ -631,17 +631,17 @@ static int accounting_read_key(struct btree_trans *trans, struct bkey_s_c k)
 }
 
 static int bch2_disk_accounting_validate_late(struct btree_trans *trans,
-                                             struct disk_accounting_pos acc,
+                                             struct disk_accounting_pos *acc,
                                              u64 *v, unsigned nr)
 {
        struct bch_fs *c = trans->c;
        struct printbuf buf = PRINTBUF;
        int ret = 0, invalid_dev = -1;
 
-       switch (acc.type) {
+       switch (acc->type) {
        case BCH_DISK_ACCOUNTING_replicas: {
                struct bch_replicas_padded r;
-               __accounting_to_replicas(&r.e, &acc);
+               __accounting_to_replicas(&r.e, acc);
 
                for (unsigned i = 0; i < r.e.nr_devs; i++)
                        if (r.e.devs[i] != BCH_SB_MEMBER_INVALID &&
@@ -660,7 +660,7 @@ static int bch2_disk_accounting_validate_late(struct btree_trans *trans,
                                trans, accounting_replicas_not_marked,
                                "accounting not marked in superblock replicas\n%s",
                                (printbuf_reset(&buf),
-                                bch2_accounting_key_to_text(&buf, &acc),
+                                bch2_accounting_key_to_text(&buf, acc),
                                 buf.buf))) {
                        /*
                         * We're not RW yet and still single threaded, dropping
@@ -676,8 +676,8 @@ static int bch2_disk_accounting_validate_late(struct btree_trans *trans,
        }
 
        case BCH_DISK_ACCOUNTING_dev_data_type:
-               if (!bch2_dev_exists(c, acc.dev_data_type.dev)) {
-                       invalid_dev = acc.dev_data_type.dev;
+               if (!bch2_dev_exists(c, acc->dev_data_type.dev)) {
+                       invalid_dev = acc->dev_data_type.dev;
                        goto invalid_device;
                }
                break;
@@ -691,13 +691,13 @@ invalid_device:
                     "accounting entry points to invalid device %i\n%s",
                     invalid_dev,
                     (printbuf_reset(&buf),
-                     bch2_accounting_key_to_text(&buf, &acc),
+                     bch2_accounting_key_to_text(&buf, acc),
                      buf.buf))) {
                for (unsigned i = 0; i < nr; i++)
                        v[i] = -v[i];
 
                ret = commit_do(trans, NULL, NULL, 0,
-                               bch2_disk_accounting_mod(trans, &acc, v, nr, false)) ?:
+                               bch2_disk_accounting_mod(trans, acc, v, nr, false)) ?:
                        -BCH_ERR_remove_disk_accounting_entry;
        } else {
                ret = -BCH_ERR_remove_disk_accounting_entry;
@@ -748,7 +748,7 @@ int bch2_accounting_read(struct bch_fs *c)
                        if (acc_k.type >= BCH_DISK_ACCOUNTING_TYPE_NR)
                                break;
 
-                       if (!bch2_accounting_is_mem(acc_k)) {
+                       if (!bch2_accounting_is_mem(&acc_k)) {
                                struct disk_accounting_pos next;
                                memset(&next, 0, sizeof(next));
                                next.type = acc_k.type + 1;
@@ -770,7 +770,7 @@ int bch2_accounting_read(struct bch_fs *c)
                        struct disk_accounting_pos acc_k;
                        bpos_to_disk_accounting_pos(&acc_k, i->k->k.p);
 
-                       if (!bch2_accounting_is_mem(acc_k))
+                       if (!bch2_accounting_is_mem(&acc_k))
                                continue;
 
                        struct bkey_s_c k = bkey_i_to_s_c(i->k);
@@ -826,7 +826,7 @@ int bch2_accounting_read(struct bch_fs *c)
                 */
                ret = bch2_is_zero(v, sizeof(v[0]) * i->nr_counters)
                        ? -BCH_ERR_remove_disk_accounting_entry
-                       : bch2_disk_accounting_validate_late(trans, acc_k, v, i->nr_counters);
+                       : bch2_disk_accounting_validate_late(trans, &acc_k, v, i->nr_counters);
 
                if (ret == -BCH_ERR_remove_disk_accounting_entry) {
                        free_percpu(i->v[0]);
@@ -939,7 +939,7 @@ void bch2_verify_accounting_clean(struct bch_fs *c)
                        if (acc_k.type >= BCH_DISK_ACCOUNTING_TYPE_NR)
                                break;
 
-                       if (!bch2_accounting_is_mem(acc_k)) {
+                       if (!bch2_accounting_is_mem(&acc_k)) {
                                struct disk_accounting_pos next;
                                memset(&next, 0, sizeof(next));
                                next.type = acc_k.type + 1;
index d557b99b3c0ae6477bcd4d365e671ec6d4c888af..54cb8a5b117d0f4064482e4b93bdd855a0c5a387 100644 (file)
@@ -139,10 +139,10 @@ int bch2_accounting_mem_insert(struct bch_fs *, struct bkey_s_c_accounting, enum
 int bch2_accounting_mem_insert_locked(struct bch_fs *, struct bkey_s_c_accounting, enum bch_accounting_mode);
 void bch2_accounting_mem_gc(struct bch_fs *);
 
-static inline bool bch2_accounting_is_mem(struct disk_accounting_pos acc)
+static inline bool bch2_accounting_is_mem(struct disk_accounting_pos *acc)
 {
-       return acc.type < BCH_DISK_ACCOUNTING_TYPE_NR &&
-               acc.type != BCH_DISK_ACCOUNTING_inum;
+       return acc->type < BCH_DISK_ACCOUNTING_TYPE_NR &&
+               acc->type != BCH_DISK_ACCOUNTING_inum;
 }
 
 /*
@@ -163,7 +163,7 @@ static inline int bch2_accounting_mem_mod_locked(struct btree_trans *trans,
        if (gc && !acc->gc_running)
                return 0;
 
-       if (!bch2_accounting_is_mem(acc_k))
+       if (!bch2_accounting_is_mem(&acc_k))
                return 0;
 
        if (mode == BCH_ACCOUNTING_normal) {