@@ -633,19 +633,21 @@ static void ec_validate_checksums(struct bch_fs *c, struct ec_stripe_buf *buf)
633633 struct bch_csum got = ec_block_checksum (buf , i , offset );
634634
635635 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 ;
638639
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 );
645646
646- clear_bit (i , buf -> valid );
647+ bch2_io_error (ca , BCH_MEMBER_ERROR_checksum );
648+ }
647649
648- bch2_io_error ( ca , BCH_MEMBER_ERROR_checksum );
650+ clear_bit ( i , buf -> valid );
649651 break ;
650652 }
651653
0 commit comments