Skip to content

Commit 8a2ee44

Browse files
Christoph Hellwigaxboe
authored andcommitted
btrfs: look at bi_size for repair decisions
bio_readpage_error currently uses bi_vcnt to decide if it is worth retrying an I/O. But the vector count is mostly an implementation artifact - it really should figure out if there is more than a single sector worth retrying. Use bi_size for that and shift by PAGE_SHIFT. This really should be blocks/sectors, but given that btrfs doesn't support a sector size different from the PAGE_SIZE using the page size keeps the changes to a minimum. Reviewed-by: Omar Sandoval <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent fbd7212 commit 8a2ee44

File tree

2 files changed

+1
-7
lines changed

2 files changed

+1
-7
lines changed

fs/btrfs/extent_io.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2350,7 +2350,7 @@ static int bio_readpage_error(struct bio *failed_bio, u64 phy_offset,
23502350
int read_mode = 0;
23512351
blk_status_t status;
23522352
int ret;
2353-
unsigned failed_bio_pages = bio_pages_all(failed_bio);
2353+
unsigned failed_bio_pages = failed_bio->bi_iter.bi_size >> PAGE_SHIFT;
23542354

23552355
BUG_ON(bio_op(failed_bio) == REQ_OP_WRITE);
23562356

include/linux/bio.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,6 @@ static inline void bio_get_last_bvec(struct bio *bio, struct bio_vec *bv)
263263
bv->bv_len = iter.bi_bvec_done;
264264
}
265265

266-
static inline unsigned bio_pages_all(struct bio *bio)
267-
{
268-
WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED));
269-
return bio->bi_vcnt;
270-
}
271-
272266
static inline struct bio_vec *bio_first_bvec_all(struct bio *bio)
273267
{
274268
WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED));

0 commit comments

Comments
 (0)