@@ -633,19 +633,21 @@ static void ec_validate_checksums(struct bch_fs *c, struct ec_stripe_buf *buf)
633
633
struct bch_csum got = ec_block_checksum (buf , i , offset );
634
634
635
635
if (bch2_crc_cmp (want , got )) {
636
- struct printbuf err = PRINTBUF ;
637
- struct bch_dev * ca = bch2_dev_bkey_exists (c , v -> ptrs [i ].dev );
636
+ struct bch_dev * ca = bch2_dev_tryget (c , v -> ptrs [i ].dev );
637
+ if (ca ) {
638
+ struct printbuf err = PRINTBUF ;
638
639
639
- prt_str (& err , "stripe " );
640
- bch2_csum_err_msg (& err , v -> csum_type , want , got );
641
- prt_printf (& err , " for %ps at %u of\n " , (void * ) _RET_IP_ , i );
642
- bch2_bkey_val_to_text (& err , c , bkey_i_to_s_c (& buf -> key ));
643
- bch_err_ratelimited (ca , "%s" , err .buf );
644
- printbuf_exit (& err );
640
+ prt_str (& err , "stripe " );
641
+ bch2_csum_err_msg (& err , v -> csum_type , want , got );
642
+ prt_printf (& err , " for %ps at %u of\n " , (void * ) _RET_IP_ , i );
643
+ bch2_bkey_val_to_text (& err , c , bkey_i_to_s_c (& buf -> key ));
644
+ bch_err_ratelimited (ca , "%s" , err .buf );
645
+ printbuf_exit (& err );
645
646
646
- clear_bit (i , buf -> valid );
647
+ bch2_io_error (ca , BCH_MEMBER_ERROR_checksum );
648
+ }
647
649
648
- bch2_io_error ( ca , BCH_MEMBER_ERROR_checksum );
650
+ clear_bit ( i , buf -> valid );
649
651
break ;
650
652
}
651
653
0 commit comments