block: switch bios to blk_status_t
Replace bi_error with a new bi_status to allow for a clear conversion. Note that device mapper overloaded bi_error with a private value, which we'll have to keep arround at least for now and thus propagate to a proper blk_status_t value. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:

committed by
Jens Axboe

parent
fc17b6534e
commit
4e4cbee93d
@@ -336,7 +336,7 @@ static void raid_end_bio_io(struct r10bio *r10_bio)
|
||||
struct r10conf *conf = r10_bio->mddev->private;
|
||||
|
||||
if (!test_bit(R10BIO_Uptodate, &r10_bio->state))
|
||||
bio->bi_error = -EIO;
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
|
||||
bio_endio(bio);
|
||||
/*
|
||||
@@ -389,7 +389,7 @@ static int find_bio_disk(struct r10conf *conf, struct r10bio *r10_bio,
|
||||
|
||||
static void raid10_end_read_request(struct bio *bio)
|
||||
{
|
||||
int uptodate = !bio->bi_error;
|
||||
int uptodate = !bio->bi_status;
|
||||
struct r10bio *r10_bio = bio->bi_private;
|
||||
int slot, dev;
|
||||
struct md_rdev *rdev;
|
||||
@@ -477,7 +477,7 @@ static void raid10_end_write_request(struct bio *bio)
|
||||
struct bio *to_put = NULL;
|
||||
bool discard_error;
|
||||
|
||||
discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD;
|
||||
discard_error = bio->bi_status && bio_op(bio) == REQ_OP_DISCARD;
|
||||
|
||||
dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl);
|
||||
|
||||
@@ -491,7 +491,7 @@ static void raid10_end_write_request(struct bio *bio)
|
||||
/*
|
||||
* this branch is our 'one mirror IO has finished' event handler:
|
||||
*/
|
||||
if (bio->bi_error && !discard_error) {
|
||||
if (bio->bi_status && !discard_error) {
|
||||
if (repl)
|
||||
/* Never record new bad blocks to replacement,
|
||||
* just fail it.
|
||||
@@ -913,7 +913,7 @@ static void flush_pending_writes(struct r10conf *conf)
|
||||
bio->bi_next = NULL;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
if (test_bit(Faulty, &rdev->flags)) {
|
||||
bio->bi_error = -EIO;
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
bio_endio(bio);
|
||||
} else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
||||
@@ -1098,7 +1098,7 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)
|
||||
bio->bi_next = NULL;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
if (test_bit(Faulty, &rdev->flags)) {
|
||||
bio->bi_error = -EIO;
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
bio_endio(bio);
|
||||
} else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
||||
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
||||
@@ -1888,7 +1888,7 @@ static void __end_sync_read(struct r10bio *r10_bio, struct bio *bio, int d)
|
||||
{
|
||||
struct r10conf *conf = r10_bio->mddev->private;
|
||||
|
||||
if (!bio->bi_error)
|
||||
if (!bio->bi_status)
|
||||
set_bit(R10BIO_Uptodate, &r10_bio->state);
|
||||
else
|
||||
/* The write handler will notice the lack of
|
||||
@@ -1972,7 +1972,7 @@ static void end_sync_write(struct bio *bio)
|
||||
else
|
||||
rdev = conf->mirrors[d].rdev;
|
||||
|
||||
if (bio->bi_error) {
|
||||
if (bio->bi_status) {
|
||||
if (repl)
|
||||
md_error(mddev, rdev);
|
||||
else {
|
||||
@@ -2021,7 +2021,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
||||
|
||||
/* find the first device with a block */
|
||||
for (i=0; i<conf->copies; i++)
|
||||
if (!r10_bio->devs[i].bio->bi_error)
|
||||
if (!r10_bio->devs[i].bio->bi_status)
|
||||
break;
|
||||
|
||||
if (i == conf->copies)
|
||||
@@ -2050,7 +2050,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
||||
tpages = get_resync_pages(tbio)->pages;
|
||||
d = r10_bio->devs[i].devnum;
|
||||
rdev = conf->mirrors[d].rdev;
|
||||
if (!r10_bio->devs[i].bio->bi_error) {
|
||||
if (!r10_bio->devs[i].bio->bi_status) {
|
||||
/* We know that the bi_io_vec layout is the same for
|
||||
* both 'first' and 'i', so we just compare them.
|
||||
* All vec entries are PAGE_SIZE;
|
||||
@@ -2633,7 +2633,7 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)
|
||||
rdev = conf->mirrors[dev].rdev;
|
||||
if (r10_bio->devs[m].bio == NULL)
|
||||
continue;
|
||||
if (!r10_bio->devs[m].bio->bi_error) {
|
||||
if (!r10_bio->devs[m].bio->bi_status) {
|
||||
rdev_clear_badblocks(
|
||||
rdev,
|
||||
r10_bio->devs[m].addr,
|
||||
@@ -2649,7 +2649,7 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)
|
||||
if (r10_bio->devs[m].repl_bio == NULL)
|
||||
continue;
|
||||
|
||||
if (!r10_bio->devs[m].repl_bio->bi_error) {
|
||||
if (!r10_bio->devs[m].repl_bio->bi_status) {
|
||||
rdev_clear_badblocks(
|
||||
rdev,
|
||||
r10_bio->devs[m].addr,
|
||||
@@ -2675,7 +2675,7 @@ static void handle_write_completed(struct r10conf *conf, struct r10bio *r10_bio)
|
||||
r10_bio->devs[m].addr,
|
||||
r10_bio->sectors, 0);
|
||||
rdev_dec_pending(rdev, conf->mddev);
|
||||
} else if (bio != NULL && bio->bi_error) {
|
||||
} else if (bio != NULL && bio->bi_status) {
|
||||
fail = true;
|
||||
if (!narrow_write_error(r10_bio, m)) {
|
||||
md_error(conf->mddev, rdev);
|
||||
@@ -3267,7 +3267,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
||||
r10_bio->devs[i].repl_bio->bi_end_io = NULL;
|
||||
|
||||
bio = r10_bio->devs[i].bio;
|
||||
bio->bi_error = -EIO;
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
rcu_read_lock();
|
||||
rdev = rcu_dereference(conf->mirrors[d].rdev);
|
||||
if (rdev == NULL || test_bit(Faulty, &rdev->flags)) {
|
||||
@@ -3309,7 +3309,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
||||
|
||||
/* Need to set up for writing to the replacement */
|
||||
bio = r10_bio->devs[i].repl_bio;
|
||||
bio->bi_error = -EIO;
|
||||
bio->bi_status = BLK_STS_IOERR;
|
||||
|
||||
sector = r10_bio->devs[i].addr;
|
||||
bio->bi_next = biolist;
|
||||
@@ -3375,7 +3375,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
||||
|
||||
if (bio->bi_end_io == end_sync_read) {
|
||||
md_sync_acct(bio->bi_bdev, nr_sectors);
|
||||
bio->bi_error = 0;
|
||||
bio->bi_status = 0;
|
||||
generic_make_request(bio);
|
||||
}
|
||||
}
|
||||
@@ -4394,7 +4394,7 @@ read_more:
|
||||
read_bio->bi_end_io = end_reshape_read;
|
||||
bio_set_op_attrs(read_bio, REQ_OP_READ, 0);
|
||||
read_bio->bi_flags &= (~0UL << BIO_RESET_BITS);
|
||||
read_bio->bi_error = 0;
|
||||
read_bio->bi_status = 0;
|
||||
read_bio->bi_vcnt = 0;
|
||||
read_bio->bi_iter.bi_size = 0;
|
||||
r10_bio->master_bio = read_bio;
|
||||
@@ -4638,7 +4638,7 @@ static void end_reshape_write(struct bio *bio)
|
||||
rdev = conf->mirrors[d].rdev;
|
||||
}
|
||||
|
||||
if (bio->bi_error) {
|
||||
if (bio->bi_status) {
|
||||
/* FIXME should record badblock */
|
||||
md_error(mddev, rdev);
|
||||
}
|
||||
|
Reference in New Issue
Block a user