@@ -732,12 +732,17 @@ static void ec_block_io(struct bch_fs *c, struct ec_stripe_buf *buf,
732732 struct bch_stripe * v = & bkey_i_to_stripe (& buf -> key )-> v ;
733733 unsigned offset = 0 , bytes = buf -> size << 9 ;
734734 struct bch_extent_ptr * ptr = & v -> ptrs [idx ];
735- struct bch_dev * ca = bch2_dev_bkey_exists (c , ptr -> dev );
736735 enum bch_data_type data_type = idx < v -> nr_blocks - v -> nr_redundant
737736 ? BCH_DATA_user
738737 : BCH_DATA_parity ;
739738 int rw = op_is_write (opf );
740739
740+ struct bch_dev * ca = bch2_dev_get_ioref (c , ptr -> dev , rw );
741+ if (!ca ) {
742+ clear_bit (idx , buf -> valid );
743+ return ;
744+ }
745+
741746 if (dev_ptr_stale (ca , ptr )) {
742747 bch_err_ratelimited (c ,
743748 "error %s stripe: stale pointer" ,
@@ -746,10 +751,6 @@ static void ec_block_io(struct bch_fs *c, struct ec_stripe_buf *buf,
746751 return ;
747752 }
748753
749- if (!bch2_dev_get_ioref (ca , rw )) {
750- clear_bit (idx , buf -> valid );
751- return ;
752- }
753754
754755 this_cpu_add (ca -> io_done -> sectors [rw ][data_type ], buf -> size );
755756
@@ -1354,20 +1355,18 @@ static void zero_out_rest_of_ec_bucket(struct bch_fs *c,
13541355 unsigned block ,
13551356 struct open_bucket * ob )
13561357{
1357- struct bch_dev * ca = bch2_dev_bkey_exists (c , ob -> dev );
1358- unsigned offset = ca -> mi .bucket_size - ob -> sectors_free ;
1359- int ret ;
1360-
1361- if (!bch2_dev_get_ioref (ca , WRITE )) {
1358+ struct bch_dev * ca = bch2_dev_get_ioref (c , ob -> dev , WRITE );
1359+ if (!ca ) {
13621360 s -> err = - BCH_ERR_erofs_no_writes ;
13631361 return ;
13641362 }
13651363
1364+ unsigned offset = ca -> mi .bucket_size - ob -> sectors_free ;
13661365 memset (s -> new_stripe .data [block ] + (offset << 9 ),
13671366 0 ,
13681367 ob -> sectors_free << 9 );
13691368
1370- ret = blkdev_issue_zeroout (ca -> disk_sb .bdev ,
1369+ int ret = blkdev_issue_zeroout (ca -> disk_sb .bdev ,
13711370 ob -> bucket * ca -> mi .bucket_size + offset ,
13721371 ob -> sectors_free ,
13731372 GFP_KERNEL , 0 );
0 commit comments