@@ -240,71 +240,73 @@ int bch2_alloc_v3_validate(struct bch_fs *c, struct bkey_s_c k,
240
240
int bch2_alloc_v4_validate (struct bch_fs * c , struct bkey_s_c k ,
241
241
enum bch_validate_flags flags )
242
242
{
243
- struct bkey_s_c_alloc_v4 a = bkey_s_c_to_alloc_v4 ( k ) ;
243
+ struct bch_alloc_v4 a ;
244
244
int ret = 0 ;
245
245
246
- bkey_fsck_err_on (alloc_v4_u64s_noerror (a .v ) > bkey_val_u64s (k .k ),
246
+ bkey_val_copy (& a , bkey_s_c_to_alloc_v4 (k ));
247
+
248
+ bkey_fsck_err_on (alloc_v4_u64s_noerror (& a ) > bkey_val_u64s (k .k ),
247
249
c , alloc_v4_val_size_bad ,
248
250
"bad val size (%u > %zu)" ,
249
- alloc_v4_u64s_noerror (a . v ), bkey_val_u64s (k .k ));
251
+ alloc_v4_u64s_noerror (& a ), bkey_val_u64s (k .k ));
250
252
251
- bkey_fsck_err_on (!BCH_ALLOC_V4_BACKPOINTERS_START (a . v ) &&
252
- BCH_ALLOC_V4_NR_BACKPOINTERS (a . v ),
253
+ bkey_fsck_err_on (!BCH_ALLOC_V4_BACKPOINTERS_START (& a ) &&
254
+ BCH_ALLOC_V4_NR_BACKPOINTERS (& a ),
253
255
c , alloc_v4_backpointers_start_bad ,
254
256
"invalid backpointers_start" );
255
257
256
- bkey_fsck_err_on (alloc_data_type (* a . v , a .v -> data_type ) != a .v -> data_type ,
258
+ bkey_fsck_err_on (alloc_data_type (a , a .data_type ) != a .data_type ,
257
259
c , alloc_key_data_type_bad ,
258
260
"invalid data type (got %u should be %u)" ,
259
- a .v -> data_type , alloc_data_type (* a . v , a .v -> data_type ));
261
+ a .data_type , alloc_data_type (a , a .data_type ));
260
262
261
263
for (unsigned i = 0 ; i < 2 ; i ++ )
262
- bkey_fsck_err_on (a .v -> io_time [i ] > LRU_TIME_MAX ,
264
+ bkey_fsck_err_on (a .io_time [i ] > LRU_TIME_MAX ,
263
265
c , alloc_key_io_time_bad ,
264
266
"invalid io_time[%s]: %llu, max %llu" ,
265
267
i == READ ? "read" : "write" ,
266
- a .v -> io_time [i ], LRU_TIME_MAX );
268
+ a .io_time [i ], LRU_TIME_MAX );
267
269
268
- unsigned stripe_sectors = BCH_ALLOC_V4_BACKPOINTERS_START (a . v ) * sizeof (u64 ) >
270
+ unsigned stripe_sectors = BCH_ALLOC_V4_BACKPOINTERS_START (& a ) * sizeof (u64 ) >
269
271
offsetof(struct bch_alloc_v4 , stripe_sectors )
270
- ? a .v -> stripe_sectors
272
+ ? a .stripe_sectors
271
273
: 0 ;
272
274
273
- switch (a .v -> data_type ) {
275
+ switch (a .data_type ) {
274
276
case BCH_DATA_free :
275
277
case BCH_DATA_need_gc_gens :
276
278
case BCH_DATA_need_discard :
277
279
bkey_fsck_err_on (stripe_sectors ||
278
- a .v -> dirty_sectors ||
279
- a .v -> cached_sectors ||
280
- a .v -> stripe ,
280
+ a .dirty_sectors ||
281
+ a .cached_sectors ||
282
+ a .stripe ,
281
283
c , alloc_key_empty_but_have_data ,
282
284
"empty data type free but have data %u.%u.%u %u" ,
283
285
stripe_sectors ,
284
- a .v -> dirty_sectors ,
285
- a .v -> cached_sectors ,
286
- a .v -> stripe );
286
+ a .dirty_sectors ,
287
+ a .cached_sectors ,
288
+ a .stripe );
287
289
break ;
288
290
case BCH_DATA_sb :
289
291
case BCH_DATA_journal :
290
292
case BCH_DATA_btree :
291
293
case BCH_DATA_user :
292
294
case BCH_DATA_parity :
293
- bkey_fsck_err_on (!a .v -> dirty_sectors &&
295
+ bkey_fsck_err_on (!a .dirty_sectors &&
294
296
!stripe_sectors ,
295
297
c , alloc_key_dirty_sectors_0 ,
296
298
"data_type %s but dirty_sectors==0" ,
297
- bch2_data_type_str (a .v -> data_type ));
299
+ bch2_data_type_str (a .data_type ));
298
300
break ;
299
301
case BCH_DATA_cached :
300
- bkey_fsck_err_on (!a .v -> cached_sectors ||
301
- a .v -> dirty_sectors ||
302
+ bkey_fsck_err_on (!a .cached_sectors ||
303
+ a .dirty_sectors ||
302
304
stripe_sectors ||
303
- a .v -> stripe ,
305
+ a .stripe ,
304
306
c , alloc_key_cached_inconsistency ,
305
307
"data type inconsistency" );
306
308
307
- bkey_fsck_err_on (!a .v -> io_time [READ ] &&
309
+ bkey_fsck_err_on (!a .io_time [READ ] &&
308
310
c -> curr_recovery_pass > BCH_RECOVERY_PASS_check_alloc_to_lru_refs ,
309
311
c , alloc_key_cached_but_read_time_zero ,
310
312
"cached bucket with read_time == 0" );
0 commit comments