|
@@ -865,7 +865,7 @@ static void flush_pending_writes(struct r10conf *conf)
|
|
|
while (bio) { /* submit pending writes */
|
|
|
struct bio *next = bio->bi_next;
|
|
|
bio->bi_next = NULL;
|
|
|
- if (unlikely((bio->bi_rw & REQ_DISCARD) &&
|
|
|
+ if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
|
|
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
|
|
/* Just ignore it */
|
|
|
bio_endio(bio);
|
|
@@ -1041,7 +1041,7 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)
|
|
|
while (bio) { /* submit pending writes */
|
|
|
struct bio *next = bio->bi_next;
|
|
|
bio->bi_next = NULL;
|
|
|
- if (unlikely((bio->bi_rw & REQ_DISCARD) &&
|
|
|
+ if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
|
|
|
!blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
|
|
|
/* Just ignore it */
|
|
|
bio_endio(bio);
|
|
@@ -1058,12 +1058,11 @@ static void __make_request(struct mddev *mddev, struct bio *bio)
|
|
|
struct r10bio *r10_bio;
|
|
|
struct bio *read_bio;
|
|
|
int i;
|
|
|
+ const int op = bio_op(bio);
|
|
|
const int rw = bio_data_dir(bio);
|
|
|
const unsigned long do_sync = (bio->bi_rw & REQ_SYNC);
|
|
|
const unsigned long do_fua = (bio->bi_rw & REQ_FUA);
|
|
|
- const unsigned long do_discard = (bio->bi_rw
|
|
|
- & (REQ_DISCARD | REQ_SECURE));
|
|
|
- const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME);
|
|
|
+ const unsigned long do_sec = (bio->bi_rw & REQ_SECURE);
|
|
|
unsigned long flags;
|
|
|
struct md_rdev *blocked_rdev;
|
|
|
struct blk_plug_cb *cb;
|
|
@@ -1156,7 +1155,7 @@ read_again:
|
|
|
choose_data_offset(r10_bio, rdev);
|
|
|
read_bio->bi_bdev = rdev->bdev;
|
|
|
read_bio->bi_end_io = raid10_end_read_request;
|
|
|
- read_bio->bi_rw = READ | do_sync;
|
|
|
+ bio_set_op_attrs(read_bio, op, do_sync);
|
|
|
read_bio->bi_private = r10_bio;
|
|
|
|
|
|
if (max_sectors < r10_bio->sectors) {
|
|
@@ -1363,8 +1362,7 @@ retry_write:
|
|
|
rdev));
|
|
|
mbio->bi_bdev = rdev->bdev;
|
|
|
mbio->bi_end_io = raid10_end_write_request;
|
|
|
- mbio->bi_rw =
|
|
|
- WRITE | do_sync | do_fua | do_discard | do_same;
|
|
|
+ bio_set_op_attrs(mbio, op, do_sync | do_fua | do_sec);
|
|
|
mbio->bi_private = r10_bio;
|
|
|
|
|
|
atomic_inc(&r10_bio->remaining);
|
|
@@ -1406,8 +1404,7 @@ retry_write:
|
|
|
r10_bio, rdev));
|
|
|
mbio->bi_bdev = rdev->bdev;
|
|
|
mbio->bi_end_io = raid10_end_write_request;
|
|
|
- mbio->bi_rw =
|
|
|
- WRITE | do_sync | do_fua | do_discard | do_same;
|
|
|
+ bio_set_op_attrs(mbio, op, do_sync | do_fua | do_sec);
|
|
|
mbio->bi_private = r10_bio;
|
|
|
|
|
|
atomic_inc(&r10_bio->remaining);
|
|
@@ -1992,10 +1989,10 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|
|
|
|
|
tbio->bi_vcnt = vcnt;
|
|
|
tbio->bi_iter.bi_size = fbio->bi_iter.bi_size;
|
|
|
- tbio->bi_rw = WRITE;
|
|
|
tbio->bi_private = r10_bio;
|
|
|
tbio->bi_iter.bi_sector = r10_bio->devs[i].addr;
|
|
|
tbio->bi_end_io = end_sync_write;
|
|
|
+ bio_set_op_attrs(tbio, REQ_OP_WRITE, 0);
|
|
|
|
|
|
bio_copy_data(tbio, fbio);
|
|
|
|
|
@@ -2078,7 +2075,7 @@ static void fix_recovery_read_error(struct r10bio *r10_bio)
|
|
|
addr,
|
|
|
s << 9,
|
|
|
bio->bi_io_vec[idx].bv_page,
|
|
|
- READ, false);
|
|
|
+ REQ_OP_READ, 0, false);
|
|
|
if (ok) {
|
|
|
rdev = conf->mirrors[dw].rdev;
|
|
|
addr = r10_bio->devs[1].addr + sect;
|
|
@@ -2086,7 +2083,7 @@ static void fix_recovery_read_error(struct r10bio *r10_bio)
|
|
|
addr,
|
|
|
s << 9,
|
|
|
bio->bi_io_vec[idx].bv_page,
|
|
|
- WRITE, false);
|
|
|
+ REQ_OP_WRITE, 0, false);
|
|
|
if (!ok) {
|
|
|
set_bit(WriteErrorSeen, &rdev->flags);
|
|
|
if (!test_and_set_bit(WantReplacement,
|
|
@@ -2213,7 +2210,7 @@ static int r10_sync_page_io(struct md_rdev *rdev, sector_t sector,
|
|
|
if (is_badblock(rdev, sector, sectors, &first_bad, &bad_sectors)
|
|
|
&& (rw == READ || test_bit(WriteErrorSeen, &rdev->flags)))
|
|
|
return -1;
|
|
|
- if (sync_page_io(rdev, sector, sectors << 9, page, rw, false))
|
|
|
+ if (sync_page_io(rdev, sector, sectors << 9, page, rw, 0, false))
|
|
|
/* success */
|
|
|
return 1;
|
|
|
if (rw == WRITE) {
|
|
@@ -2299,7 +2296,8 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
|
|
|
r10_bio->devs[sl].addr +
|
|
|
sect,
|
|
|
s<<9,
|
|
|
- conf->tmppage, READ, false);
|
|
|
+ conf->tmppage,
|
|
|
+ REQ_OP_READ, 0, false);
|
|
|
rdev_dec_pending(rdev, mddev);
|
|
|
rcu_read_lock();
|
|
|
if (success)
|
|
@@ -2474,7 +2472,7 @@ static int narrow_write_error(struct r10bio *r10_bio, int i)
|
|
|
choose_data_offset(r10_bio, rdev) +
|
|
|
(sector - r10_bio->sector));
|
|
|
wbio->bi_bdev = rdev->bdev;
|
|
|
- wbio->bi_rw = WRITE;
|
|
|
+ bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);
|
|
|
|
|
|
if (submit_bio_wait(wbio) < 0)
|
|
|
/* Failure! */
|
|
@@ -2550,7 +2548,7 @@ read_more:
|
|
|
bio->bi_iter.bi_sector = r10_bio->devs[slot].addr
|
|
|
+ choose_data_offset(r10_bio, rdev);
|
|
|
bio->bi_bdev = rdev->bdev;
|
|
|
- bio->bi_rw = READ | do_sync;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_READ, do_sync);
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = raid10_end_read_request;
|
|
|
if (max_sectors < r10_bio->sectors) {
|
|
@@ -3040,7 +3038,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|
|
biolist = bio;
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = end_sync_read;
|
|
|
- bio->bi_rw = READ;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_READ, 0);
|
|
|
from_addr = r10_bio->devs[j].addr;
|
|
|
bio->bi_iter.bi_sector = from_addr +
|
|
|
rdev->data_offset;
|
|
@@ -3066,7 +3064,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|
|
biolist = bio;
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = end_sync_write;
|
|
|
- bio->bi_rw = WRITE;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
|
|
bio->bi_iter.bi_sector = to_addr
|
|
|
+ rdev->data_offset;
|
|
|
bio->bi_bdev = rdev->bdev;
|
|
@@ -3095,7 +3093,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|
|
biolist = bio;
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = end_sync_write;
|
|
|
- bio->bi_rw = WRITE;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
|
|
bio->bi_iter.bi_sector = to_addr +
|
|
|
rdev->data_offset;
|
|
|
bio->bi_bdev = rdev->bdev;
|
|
@@ -3215,7 +3213,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|
|
biolist = bio;
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = end_sync_read;
|
|
|
- bio->bi_rw = READ;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_READ, 0);
|
|
|
bio->bi_iter.bi_sector = sector +
|
|
|
conf->mirrors[d].rdev->data_offset;
|
|
|
bio->bi_bdev = conf->mirrors[d].rdev->bdev;
|
|
@@ -3237,7 +3235,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|
|
biolist = bio;
|
|
|
bio->bi_private = r10_bio;
|
|
|
bio->bi_end_io = end_sync_write;
|
|
|
- bio->bi_rw = WRITE;
|
|
|
+ bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
|
|
|
bio->bi_iter.bi_sector = sector +
|
|
|
conf->mirrors[d].replacement->data_offset;
|
|
|
bio->bi_bdev = conf->mirrors[d].replacement->bdev;
|
|
@@ -4322,7 +4320,7 @@ read_more:
|
|
|
+ rdev->data_offset);
|
|
|
read_bio->bi_private = r10_bio;
|
|
|
read_bio->bi_end_io = end_sync_read;
|
|
|
- read_bio->bi_rw = 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_vcnt = 0;
|
|
@@ -4356,7 +4354,7 @@ read_more:
|
|
|
rdev2->new_data_offset;
|
|
|
b->bi_private = r10_bio;
|
|
|
b->bi_end_io = end_reshape_write;
|
|
|
- b->bi_rw = WRITE;
|
|
|
+ bio_set_op_attrs(b, REQ_OP_WRITE, 0);
|
|
|
b->bi_next = blist;
|
|
|
blist = b;
|
|
|
}
|
|
@@ -4524,7 +4522,7 @@ static int handle_reshape_read_error(struct mddev *mddev,
|
|
|
addr,
|
|
|
s << 9,
|
|
|
bvec[idx].bv_page,
|
|
|
- READ, false);
|
|
|
+ REQ_OP_READ, 0, false);
|
|
|
if (success)
|
|
|
break;
|
|
|
failed:
|