Skip to content

Commit 4637429

Browse files
author
Kent Overstreet
committed
bcachefs: bch2_sb_field_get() refactoring
Instead of using token pasting to generate methods for each superblock section, just make the type a parameter to bch2_sb_field_get(). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
1 parent be47e0b commit 4637429

13 files changed

Lines changed: 71 additions & 82 deletions

fs/bcachefs/checksum.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ int bch2_disable_encryption(struct bch_fs *c)
678678

679679
mutex_lock(&c->sb_lock);
680680

681-
crypt = bch2_sb_get_crypt(c->disk_sb.sb);
681+
crypt = bch2_sb_field_get(c->disk_sb.sb, crypt);
682682
if (!crypt)
683683
goto out;
684684

@@ -712,7 +712,7 @@ int bch2_enable_encryption(struct bch_fs *c, bool keyed)
712712
mutex_lock(&c->sb_lock);
713713

714714
/* Do we already have an encryption key? */
715-
if (bch2_sb_get_crypt(c->disk_sb.sb))
715+
if (bch2_sb_field_get(c->disk_sb.sb, crypt))
716716
goto err;
717717

718718
ret = bch2_alloc_ciphers(c);
@@ -740,7 +740,8 @@ int bch2_enable_encryption(struct bch_fs *c, bool keyed)
740740
if (ret)
741741
goto err;
742742

743-
crypt = bch2_sb_resize_crypt(&c->disk_sb, sizeof(*crypt) / sizeof(u64));
743+
crypt = bch2_sb_field_resize(&c->disk_sb, crypt,
744+
sizeof(*crypt) / sizeof(u64));
744745
if (!crypt) {
745746
ret = -BCH_ERR_ENOSPC_sb_crypt;
746747
goto err;
@@ -781,7 +782,7 @@ int bch2_fs_encryption_init(struct bch_fs *c)
781782
goto out;
782783
}
783784

784-
crypt = bch2_sb_get_crypt(c->disk_sb.sb);
785+
crypt = bch2_sb_field_get(c->disk_sb.sb, crypt);
785786
if (!crypt)
786787
goto out;
787788

fs/bcachefs/counters.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static void bch2_sb_counters_to_text(struct printbuf *out, struct bch_sb *sb,
4848

4949
int bch2_sb_counters_to_cpu(struct bch_fs *c)
5050
{
51-
struct bch_sb_field_counters *ctrs = bch2_sb_get_counters(c->disk_sb.sb);
51+
struct bch_sb_field_counters *ctrs = bch2_sb_field_get(c->disk_sb.sb, counters);
5252
unsigned int i;
5353
unsigned int nr = bch2_sb_counter_nr_entries(ctrs);
5454
u64 val = 0;
@@ -66,13 +66,13 @@ int bch2_sb_counters_to_cpu(struct bch_fs *c)
6666

6767
int bch2_sb_counters_from_cpu(struct bch_fs *c)
6868
{
69-
struct bch_sb_field_counters *ctrs = bch2_sb_get_counters(c->disk_sb.sb);
69+
struct bch_sb_field_counters *ctrs = bch2_sb_field_get(c->disk_sb.sb, counters);
7070
struct bch_sb_field_counters *ret;
7171
unsigned int i;
7272
unsigned int nr = bch2_sb_counter_nr_entries(ctrs);
7373

7474
if (nr < BCH_COUNTER_NR) {
75-
ret = bch2_sb_resize_counters(&c->disk_sb,
75+
ret = bch2_sb_field_resize(&c->disk_sb, counters,
7676
sizeof(*ctrs) / sizeof(u64) + BCH_COUNTER_NR);
7777

7878
if (ret) {

fs/bcachefs/disk_groups.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ int bch2_sb_disk_groups_to_cpu(struct bch_fs *c)
157157

158158
lockdep_assert_held(&c->sb_lock);
159159

160-
groups = bch2_sb_get_disk_groups(c->disk_sb.sb);
160+
groups = bch2_sb_field_get(c->disk_sb.sb, disk_groups);
161161
nr_groups = disk_groups_nr(groups);
162162

163163
if (!groups)
@@ -295,7 +295,7 @@ static int __bch2_disk_group_add(struct bch_sb_handle *sb, unsigned parent,
295295
const char *name, unsigned namelen)
296296
{
297297
struct bch_sb_field_disk_groups *groups =
298-
bch2_sb_get_disk_groups(sb->sb);
298+
bch2_sb_field_get(sb->sb, disk_groups);
299299
unsigned i, nr_groups = disk_groups_nr(groups);
300300
struct bch_disk_group *g;
301301

@@ -313,7 +313,7 @@ static int __bch2_disk_group_add(struct bch_sb_handle *sb, unsigned parent,
313313
sizeof(struct bch_disk_group) * (nr_groups + 1)) /
314314
sizeof(u64);
315315

316-
groups = bch2_sb_resize_disk_groups(sb, u64s);
316+
groups = bch2_sb_field_resize(sb, disk_groups, u64s);
317317
if (!groups)
318318
return -BCH_ERR_ENOSPC_disk_label_add;
319319

@@ -337,7 +337,7 @@ static int __bch2_disk_group_add(struct bch_sb_handle *sb, unsigned parent,
337337
int bch2_disk_path_find(struct bch_sb_handle *sb, const char *name)
338338
{
339339
struct bch_sb_field_disk_groups *groups =
340-
bch2_sb_get_disk_groups(sb->sb);
340+
bch2_sb_field_get(sb->sb, disk_groups);
341341
int v = -1;
342342

343343
do {
@@ -367,7 +367,7 @@ int bch2_disk_path_find_or_create(struct bch_sb_handle *sb, const char *name)
367367
if (*next == '.')
368368
next++;
369369

370-
groups = bch2_sb_get_disk_groups(sb->sb);
370+
groups = bch2_sb_field_get(sb->sb, disk_groups);
371371

372372
v = __bch2_disk_group_find(groups, parent, name, len);
373373
if (v < 0)
@@ -385,7 +385,7 @@ int bch2_disk_path_find_or_create(struct bch_sb_handle *sb, const char *name)
385385
void bch2_disk_path_to_text(struct printbuf *out, struct bch_sb *sb, unsigned v)
386386
{
387387
struct bch_sb_field_disk_groups *groups =
388-
bch2_sb_get_disk_groups(sb);
388+
bch2_sb_field_get(sb, disk_groups);
389389
struct bch_disk_group *g;
390390
unsigned nr = 0;
391391
u16 path[32];

fs/bcachefs/journal.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,9 +1170,9 @@ int bch2_dev_journal_init(struct bch_dev *ca, struct bch_sb *sb)
11701170
{
11711171
struct journal_device *ja = &ca->journal;
11721172
struct bch_sb_field_journal *journal_buckets =
1173-
bch2_sb_get_journal(sb);
1173+
bch2_sb_field_get(sb, journal);
11741174
struct bch_sb_field_journal_v2 *journal_buckets_v2 =
1175-
bch2_sb_get_journal_v2(sb);
1175+
bch2_sb_field_get(sb, journal_v2);
11761176
unsigned i, nr_bvecs;
11771177

11781178
ja->nr = 0;

fs/bcachefs/journal_sb.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ int bch2_journal_buckets_to_sb(struct bch_fs *c, struct bch_dev *ca,
194194
if (buckets[i] + 1 != buckets[i + 1])
195195
nr_compacted++;
196196

197-
j = bch2_sb_resize_journal_v2(&ca->disk_sb,
197+
j = bch2_sb_field_resize(&ca->disk_sb, journal_v2,
198198
(sizeof(*j) + sizeof(j->d[0]) * nr_compacted) / sizeof(u64));
199199
if (!j)
200200
return -BCH_ERR_ENOSPC_sb_journal;

fs/bcachefs/journal_seq_blacklist.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ blacklist_entry_try_merge(struct bch_fs *c,
5858
&bl->start[i + 1],
5959
sizeof(bl->start[0]) * (nr - i));
6060

61-
bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
62-
sb_blacklist_u64s(nr));
61+
bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
62+
sb_blacklist_u64s(nr));
6363
BUG_ON(!bl);
6464
}
6565

@@ -79,7 +79,7 @@ int bch2_journal_seq_blacklist_add(struct bch_fs *c, u64 start, u64 end)
7979
int ret = 0;
8080

8181
mutex_lock(&c->sb_lock);
82-
bl = bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
82+
bl = bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
8383
nr = blacklist_nr_entries(bl);
8484

8585
for (i = 0; i < nr; i++) {
@@ -100,8 +100,8 @@ int bch2_journal_seq_blacklist_add(struct bch_fs *c, u64 start, u64 end)
100100
}
101101
}
102102

103-
bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
104-
sb_blacklist_u64s(nr + 1));
103+
bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
104+
sb_blacklist_u64s(nr + 1));
105105
if (!bl) {
106106
ret = -BCH_ERR_ENOSPC_sb_journal_seq_blacklist;
107107
goto out;
@@ -158,7 +158,7 @@ bool bch2_journal_seq_is_blacklisted(struct bch_fs *c, u64 seq,
158158
int bch2_blacklist_table_initialize(struct bch_fs *c)
159159
{
160160
struct bch_sb_field_journal_seq_blacklist *bl =
161-
bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
161+
bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
162162
struct journal_seq_blacklist_table *t;
163163
unsigned i, nr = blacklist_nr_entries(bl);
164164

@@ -281,7 +281,7 @@ void bch2_blacklist_entries_gc(struct work_struct *work)
281281
return;
282282

283283
mutex_lock(&c->sb_lock);
284-
bl = bch2_sb_get_journal_seq_blacklist(c->disk_sb.sb);
284+
bl = bch2_sb_field_get(c->disk_sb.sb, journal_seq_blacklist);
285285
if (!bl)
286286
goto out;
287287

@@ -306,7 +306,7 @@ void bch2_blacklist_entries_gc(struct work_struct *work)
306306
bch_info(c, "nr blacklist entries was %u, now %u", nr, new_nr);
307307

308308
if (new_nr != nr) {
309-
bl = bch2_sb_resize_journal_seq_blacklist(&c->disk_sb,
309+
bl = bch2_sb_field_resize(&c->disk_sb, journal_seq_blacklist,
310310
new_nr ? sb_blacklist_u64s(new_nr) : 0);
311311
BUG_ON(new_nr && !bl);
312312

fs/bcachefs/quota.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -513,12 +513,12 @@ void bch2_fs_quota_init(struct bch_fs *c)
513513

514514
static struct bch_sb_field_quota *bch2_sb_get_or_create_quota(struct bch_sb_handle *sb)
515515
{
516-
struct bch_sb_field_quota *sb_quota = bch2_sb_get_quota(sb->sb);
516+
struct bch_sb_field_quota *sb_quota = bch2_sb_field_get(sb->sb, quota);
517517

518518
if (sb_quota)
519519
return sb_quota;
520520

521-
sb_quota = bch2_sb_resize_quota(sb, sizeof(*sb_quota) / sizeof(u64));
521+
sb_quota = bch2_sb_field_resize(sb, quota, sizeof(*sb_quota) / sizeof(u64));
522522
if (sb_quota) {
523523
unsigned qtype, qc;
524524

@@ -536,7 +536,7 @@ static void bch2_sb_quota_read(struct bch_fs *c)
536536
struct bch_sb_field_quota *sb_quota;
537537
unsigned i, j;
538538

539-
sb_quota = bch2_sb_get_quota(c->disk_sb.sb);
539+
sb_quota = bch2_sb_field_get(c->disk_sb.sb, quota);
540540
if (!sb_quota)
541541
return;
542542

fs/bcachefs/replicas.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -700,9 +700,9 @@ int bch2_sb_replicas_to_cpu_replicas(struct bch_fs *c)
700700
struct bch_replicas_cpu new_r = { 0, 0, NULL };
701701
int ret = 0;
702702

703-
if ((sb_v1 = bch2_sb_get_replicas(c->disk_sb.sb)))
703+
if ((sb_v1 = bch2_sb_field_get(c->disk_sb.sb, replicas)))
704704
ret = __bch2_sb_replicas_to_cpu_replicas(sb_v1, &new_r);
705-
else if ((sb_v0 = bch2_sb_get_replicas_v0(c->disk_sb.sb)))
705+
else if ((sb_v0 = bch2_sb_field_get(c->disk_sb.sb, replicas_v0)))
706706
ret = __bch2_sb_replicas_v0_to_cpu_replicas(sb_v0, &new_r);
707707
if (ret)
708708
return ret;
@@ -732,13 +732,13 @@ static int bch2_cpu_replicas_to_sb_replicas_v0(struct bch_fs *c,
732732
for_each_cpu_replicas_entry(r, src)
733733
bytes += replicas_entry_bytes(src) - 1;
734734

735-
sb_r = bch2_sb_resize_replicas_v0(&c->disk_sb,
735+
sb_r = bch2_sb_field_resize(&c->disk_sb, replicas_v0,
736736
DIV_ROUND_UP(bytes, sizeof(u64)));
737737
if (!sb_r)
738738
return -BCH_ERR_ENOSPC_sb_replicas;
739739

740740
bch2_sb_field_delete(&c->disk_sb, BCH_SB_FIELD_replicas);
741-
sb_r = bch2_sb_get_replicas_v0(c->disk_sb.sb);
741+
sb_r = bch2_sb_field_get(c->disk_sb.sb, replicas_v0);
742742

743743
memset(&sb_r->entries, 0,
744744
vstruct_end(&sb_r->field) -
@@ -777,13 +777,13 @@ static int bch2_cpu_replicas_to_sb_replicas(struct bch_fs *c,
777777
if (!need_v1)
778778
return bch2_cpu_replicas_to_sb_replicas_v0(c, r);
779779

780-
sb_r = bch2_sb_resize_replicas(&c->disk_sb,
780+
sb_r = bch2_sb_field_resize(&c->disk_sb, replicas,
781781
DIV_ROUND_UP(bytes, sizeof(u64)));
782782
if (!sb_r)
783783
return -BCH_ERR_ENOSPC_sb_replicas;
784784

785785
bch2_sb_field_delete(&c->disk_sb, BCH_SB_FIELD_replicas_v0);
786-
sb_r = bch2_sb_get_replicas(c->disk_sb.sb);
786+
sb_r = bch2_sb_field_get(c->disk_sb.sb, replicas);
787787

788788
memset(&sb_r->entries, 0,
789789
vstruct_end(&sb_r->field) -
@@ -998,8 +998,8 @@ unsigned bch2_sb_dev_has_data(struct bch_sb *sb, unsigned dev)
998998
struct bch_sb_field_replicas_v0 *replicas_v0;
999999
unsigned i, data_has = 0;
10001000

1001-
replicas = bch2_sb_get_replicas(sb);
1002-
replicas_v0 = bch2_sb_get_replicas_v0(sb);
1001+
replicas = bch2_sb_field_get(sb, replicas);
1002+
replicas_v0 = bch2_sb_field_get(sb, replicas_v0);
10031003

10041004
if (replicas) {
10051005
struct bch_replicas_entry *r;

fs/bcachefs/sb-clean.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ struct bch_sb_field_clean *bch2_read_superblock_clean(struct bch_fs *c)
137137
int ret;
138138

139139
mutex_lock(&c->sb_lock);
140-
sb_clean = bch2_sb_get_clean(c->disk_sb.sb);
140+
sb_clean = bch2_sb_field_get(c->disk_sb.sb, clean);
141141

142142
if (fsck_err_on(!sb_clean, c,
143143
"superblock marked clean but clean section not present")) {
@@ -359,7 +359,7 @@ void bch2_fs_mark_clean(struct bch_fs *c)
359359

360360
u64s = sizeof(*sb_clean) / sizeof(u64) + c->journal.entry_u64s_reserved;
361361

362-
sb_clean = bch2_sb_resize_clean(&c->disk_sb, u64s);
362+
sb_clean = bch2_sb_field_resize(&c->disk_sb, clean, u64s);
363363
if (!sb_clean) {
364364
bch_err(c, "error resizing superblock while setting filesystem clean");
365365
goto out;

fs/bcachefs/sb-members.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ static struct bch_member *members_v2_get_mut(struct bch_sb_field_members_v2 *mi,
1616

1717
struct bch_member *bch2_members_v2_get_mut(struct bch_sb *sb, int i)
1818
{
19-
return members_v2_get_mut(bch2_sb_get_members_v2(sb), i);
19+
return members_v2_get_mut(bch2_sb_field_get(sb, members_v2), i);
2020
}
2121

2222
static struct bch_member members_v2_get(struct bch_sb_field_members_v2 *mi, int i)
@@ -41,22 +41,22 @@ static struct bch_member members_v1_get(struct bch_sb_field_members_v1 *mi, int
4141

4242
struct bch_member bch2_sb_member_get(struct bch_sb *sb, int i)
4343
{
44-
struct bch_sb_field_members_v2 *mi2 = bch2_sb_get_members_v2(sb);
44+
struct bch_sb_field_members_v2 *mi2 = bch2_sb_field_get(sb, members_v2);
4545
if (mi2)
4646
return members_v2_get(mi2, i);
47-
struct bch_sb_field_members_v1 *mi1 = bch2_sb_get_members_v1(sb);
47+
struct bch_sb_field_members_v1 *mi1 = bch2_sb_field_get(sb, members_v1);
4848
return members_v1_get(mi1, i);
4949
}
5050

5151
static int sb_members_v2_resize_entries(struct bch_fs *c)
5252
{
53-
struct bch_sb_field_members_v2 *mi = bch2_sb_get_members_v2(c->disk_sb.sb);
53+
struct bch_sb_field_members_v2 *mi = bch2_sb_field_get(c->disk_sb.sb, members_v2);
5454

5555
if (le16_to_cpu(mi->member_bytes) < sizeof(struct bch_member)) {
5656
unsigned u64s = DIV_ROUND_UP((sizeof(*mi) + sizeof(mi->_members[0]) *
5757
c->disk_sb.sb->nr_devices), 8);
5858

59-
mi = bch2_sb_resize_members_v2(&c->disk_sb, u64s);
59+
mi = bch2_sb_field_resize(&c->disk_sb, members_v2, u64s);
6060
if (!mi)
6161
return -BCH_ERR_ENOSPC_sb_members_v2;
6262

@@ -76,12 +76,12 @@ int bch2_members_v2_init(struct bch_fs *c)
7676
struct bch_sb_field_members_v1 *mi1;
7777
struct bch_sb_field_members_v2 *mi2;
7878

79-
if (!bch2_sb_get_members_v2(c->disk_sb.sb)) {
80-
mi2 = bch2_sb_resize_members_v2(&c->disk_sb,
79+
if (!bch2_sb_field_get(c->disk_sb.sb, members_v2)) {
80+
mi2 = bch2_sb_field_resize(&c->disk_sb, members_v2,
8181
DIV_ROUND_UP(sizeof(*mi2) +
8282
sizeof(struct bch_member) * c->sb.nr_devices,
8383
sizeof(u64)));
84-
mi1 = bch2_sb_get_members_v1(c->disk_sb.sb);
84+
mi1 = bch2_sb_field_get(c->disk_sb.sb, members_v1);
8585
memcpy(&mi2->_members[0], &mi1->_members[0],
8686
BCH_MEMBER_V1_BYTES * c->sb.nr_devices);
8787
memset(&mi2->pad[0], 0, sizeof(mi2->pad));
@@ -96,13 +96,13 @@ int bch_members_cpy_v2_v1(struct bch_sb_handle *disk_sb)
9696
struct bch_sb_field_members_v1 *mi1;
9797
struct bch_sb_field_members_v2 *mi2;
9898

99-
mi1 = bch2_sb_resize_members_v1(disk_sb,
99+
mi1 = bch2_sb_field_resize(disk_sb, members_v1,
100100
DIV_ROUND_UP(sizeof(*mi1) + BCH_MEMBER_V1_BYTES *
101101
disk_sb->sb->nr_devices, sizeof(u64)));
102102
if (!mi1)
103103
return -BCH_ERR_ENOSPC_sb_members;
104104

105-
mi2 = bch2_sb_get_members_v2(disk_sb->sb);
105+
mi2 = bch2_sb_field_get(disk_sb->sb, members_v2);
106106

107107
for (unsigned i = 0; i < disk_sb->sb->nr_devices; i++)
108108
memcpy(members_v1_get_mut(mi1, i), members_v2_get_mut(mi2, i), BCH_MEMBER_V1_BYTES);
@@ -283,7 +283,7 @@ static void bch2_sb_members_v1_to_text(struct printbuf *out, struct bch_sb *sb,
283283
struct bch_sb_field *f)
284284
{
285285
struct bch_sb_field_members_v1 *mi = field_to_type(f, members_v1);
286-
struct bch_sb_field_disk_groups *gi = bch2_sb_get_disk_groups(sb);
286+
struct bch_sb_field_disk_groups *gi = bch2_sb_field_get(sb, disk_groups);
287287
unsigned i;
288288

289289
for (i = 0; i < sb->nr_devices; i++) {
@@ -301,7 +301,7 @@ static void bch2_sb_members_v2_to_text(struct printbuf *out, struct bch_sb *sb,
301301
struct bch_sb_field *f)
302302
{
303303
struct bch_sb_field_members_v2 *mi = field_to_type(f, members_v2);
304-
struct bch_sb_field_disk_groups *gi = bch2_sb_get_disk_groups(sb);
304+
struct bch_sb_field_disk_groups *gi = bch2_sb_field_get(sb, disk_groups);
305305
unsigned i;
306306

307307
for (i = 0; i < sb->nr_devices; i++) {

0 commit comments

Comments
 (0)