@@ -1264,10 +1264,12 @@ int bch2_btree_node_read_done(struct bch_fs *c, struct bch_dev *ca,
12641264 return retry_read ;
12651265fsck_err :
12661266 if (ret == - BCH_ERR_btree_node_read_err_want_retry ||
1267- ret == - BCH_ERR_btree_node_read_err_must_retry )
1267+ ret == - BCH_ERR_btree_node_read_err_must_retry ) {
12681268 retry_read = 1 ;
1269- else
1269+ } else {
12701270 set_btree_node_read_error (b );
1271+ bch2_btree_lost_data (c , b -> c .btree_id );
1272+ }
12711273 goto out ;
12721274}
12731275
@@ -1328,6 +1330,7 @@ static void btree_node_read_work(struct work_struct *work)
13281330
13291331 if (!can_retry ) {
13301332 set_btree_node_read_error (b );
1333+ bch2_btree_lost_data (c , b -> c .btree_id );
13311334 break ;
13321335 }
13331336 }
@@ -1527,9 +1530,10 @@ static CLOSURE_CALLBACK(btree_node_read_all_replicas_done)
15271530 ret = -1 ;
15281531 }
15291532
1530- if (ret )
1533+ if (ret ) {
15311534 set_btree_node_read_error (b );
1532- else if (* saw_error )
1535+ bch2_btree_lost_data (c , b -> c .btree_id );
1536+ } else if (* saw_error )
15331537 bch2_btree_node_rewrite_async (c , b );
15341538
15351539 for (i = 0 ; i < ra -> nr ; i ++ ) {
@@ -1665,6 +1669,7 @@ void bch2_btree_node_read(struct btree_trans *trans, struct btree *b,
16651669 bch2_fatal_error (c );
16661670
16671671 set_btree_node_read_error (b );
1672+ bch2_btree_lost_data (c , b -> c .btree_id );
16681673 clear_btree_node_read_in_flight (b );
16691674 wake_up_bit (& b -> flags , BTREE_NODE_read_in_flight );
16701675 printbuf_exit (& buf );
0 commit comments