lkml.org 
[lkml]   [2016]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 23/42] md/raid: set bi_op to REQ_OP
    Date
    From: Mike Christie <mchristi@redhat.com>

    This patch has md use bio->bi_op for REQ_OPs and rq_flag_bits
    to bio->bi_rw.

    Signed-off-by: Mike Christie <mchristi@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    drivers/md/bitmap.c | 2 +-
    drivers/md/dm-raid.c | 5 +++--
    drivers/md/md.c | 11 +++++++----
    drivers/md/md.h | 3 ++-
    drivers/md/raid1.c | 34 ++++++++++++++++----------------
    drivers/md/raid10.c | 50 ++++++++++++++++++++++++++----------------------
    drivers/md/raid5-cache.c | 25 +++++++++++++++---------
    drivers/md/raid5.c | 48 ++++++++++++++++++++++++++--------------------
    8 files changed, 101 insertions(+), 77 deletions(-)

    diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
    index 8b2e16f..9e8019e 100644
    --- a/drivers/md/bitmap.c
    +++ b/drivers/md/bitmap.c
    @@ -159,7 +159,7 @@ static int read_sb_page(struct mddev *mddev, loff_t offset,

    if (sync_page_io(rdev, target,
    roundup(size, bdev_logical_block_size(rdev->bdev)),
    - page, READ, true)) {
    + page, REQ_OP_READ, 0, true)) {
    page->index = index;
    return 0;
    }
    diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
    index a090121..43a749c 100644
    --- a/drivers/md/dm-raid.c
    +++ b/drivers/md/dm-raid.c
    @@ -792,7 +792,7 @@ static int read_disk_sb(struct md_rdev *rdev, int size)
    if (rdev->sb_loaded)
    return 0;

    - if (!sync_page_io(rdev, 0, size, rdev->sb_page, READ, 1)) {
    + if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, 0, 1)) {
    DMERR("Failed to read superblock of device at position %d",
    rdev->raid_disk);
    md_error(rdev->mddev, rdev);
    @@ -1646,7 +1646,8 @@ static void attempt_restore_of_faulty_devices(struct raid_set *rs)
    for (i = 0; i < rs->md.raid_disks; i++) {
    r = &rs->dev[i].rdev;
    if (test_bit(Faulty, &r->flags) && r->sb_page &&
    - sync_page_io(r, 0, r->sb_size, r->sb_page, READ, 1)) {
    + sync_page_io(r, 0, r->sb_size, r->sb_page, REQ_OP_READ, 0,
    + 1)) {
    DMINFO("Faulty %s device #%d has readable super block."
    " Attempting to revive it.",
    rs->raid_type->name, i);
    diff --git a/drivers/md/md.c b/drivers/md/md.c
    index ec3c98d..9c40368 100644
    --- a/drivers/md/md.c
    +++ b/drivers/md/md.c
    @@ -392,6 +392,7 @@ static void submit_flushes(struct work_struct *ws)
    bi->bi_end_io = md_end_flush;
    bi->bi_private = rdev;
    bi->bi_bdev = rdev->bdev;
    + bi->bi_op = REQ_OP_WRITE;
    bi->bi_rw = WRITE_FLUSH;
    atomic_inc(&mddev->flush_pending);
    submit_bio(bi);
    @@ -741,6 +742,7 @@ void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
    bio_add_page(bio, page, size, 0);
    bio->bi_private = rdev;
    bio->bi_end_io = super_written;
    + bio->bi_op = REQ_OP_WRITE;
    bio->bi_rw = WRITE_FLUSH_FUA;

    atomic_inc(&mddev->pending_writes);
    @@ -754,14 +756,15 @@ void md_super_wait(struct mddev *mddev)
    }

    int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
    - struct page *page, int rw, bool metadata_op)
    + struct page *page, int op, int op_flags, bool metadata_op)
    {
    struct bio *bio = bio_alloc_mddev(GFP_NOIO, 1, rdev->mddev);
    int ret;

    bio->bi_bdev = (metadata_op && rdev->meta_bdev) ?
    rdev->meta_bdev : rdev->bdev;
    - bio->bi_rw = rw;
    + bio->bi_op = op;
    + bio->bi_rw = op_flags;
    if (metadata_op)
    bio->bi_iter.bi_sector = sector + rdev->sb_start;
    else if (rdev->mddev->reshape_position != MaxSector &&
    @@ -787,7 +790,7 @@ static int read_disk_sb(struct md_rdev *rdev, int size)
    if (rdev->sb_loaded)
    return 0;

    - if (!sync_page_io(rdev, 0, size, rdev->sb_page, READ, true))
    + if (!sync_page_io(rdev, 0, size, rdev->sb_page, REQ_OP_READ, 0, true))
    goto fail;
    rdev->sb_loaded = 1;
    return 0;
    @@ -1473,7 +1476,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
    return -EINVAL;
    bb_sector = (long long)offset;
    if (!sync_page_io(rdev, bb_sector, sectors << 9,
    - rdev->bb_page, READ, true))
    + rdev->bb_page, REQ_OP_READ, 0, true))
    return -EIO;
    bbp = (u64 *)page_address(rdev->bb_page);
    rdev->badblocks.shift = sb->bblog_shift;
    diff --git a/drivers/md/md.h b/drivers/md/md.h
    index b5c4be7..2e0918f 100644
    --- a/drivers/md/md.h
    +++ b/drivers/md/md.h
    @@ -618,7 +618,8 @@ extern void md_super_write(struct mddev *mddev, struct md_rdev *rdev,
    sector_t sector, int size, struct page *page);
    extern void md_super_wait(struct mddev *mddev);
    extern int sync_page_io(struct md_rdev *rdev, sector_t sector, int size,
    - struct page *page, int rw, bool metadata_op);
    + struct page *page, int op, int op_flags,
    + bool metadata_op);
    extern void md_do_sync(struct md_thread *thread);
    extern void md_new_event(struct mddev *mddev);
    extern int md_allow_write(struct mddev *mddev);
    diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
    index 424df7e..c7abd2d 100644
    --- a/drivers/md/raid1.c
    +++ b/drivers/md/raid1.c
    @@ -759,7 +759,7 @@ static void flush_pending_writes(struct r1conf *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->bi_op == REQ_OP_DISCARD) &&
    !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
    /* Just ignore it */
    bio_endio(bio);
    @@ -1033,7 +1033,7 @@ static void raid1_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->bi_op == REQ_OP_DISCARD) &&
    !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
    /* Just ignore it */
    bio_endio(bio);
    @@ -1053,12 +1053,11 @@ static void raid1_make_request(struct mddev *mddev, struct bio * bio)
    int i, disks;
    struct bitmap *bitmap;
    unsigned long flags;
    + const int op = bio->bi_op;
    const int rw = bio_data_dir(bio);
    const unsigned long do_sync = (bio->bi_rw & REQ_SYNC);
    const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | 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);
    struct md_rdev *blocked_rdev;
    struct blk_plug_cb *cb;
    struct raid1_plug_cb *plug = NULL;
    @@ -1166,7 +1165,8 @@ read_again:
    mirror->rdev->data_offset;
    read_bio->bi_bdev = mirror->rdev->bdev;
    read_bio->bi_end_io = raid1_end_read_request;
    - read_bio->bi_rw = READ | do_sync;
    + read_bio->bi_op = op;
    + read_bio->bi_rw = do_sync;
    read_bio->bi_private = r1_bio;

    if (max_sectors < r1_bio->sectors) {
    @@ -1376,8 +1376,9 @@ read_again:
    conf->mirrors[i].rdev->data_offset);
    mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
    mbio->bi_end_io = raid1_end_write_request;
    + mbio->bi_op = op;
    mbio->bi_rw =
    - WRITE | do_flush_fua | do_sync | do_discard | do_same;
    + do_flush_fua | do_sync | do_sec;
    mbio->bi_private = r1_bio;

    atomic_inc(&r1_bio->remaining);
    @@ -1771,7 +1772,7 @@ static void end_sync_write(struct bio *bio)
    static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
    int sectors, struct page *page, int rw)
    {
    - 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) {
    @@ -1825,7 +1826,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
    rdev = conf->mirrors[d].rdev;
    if (sync_page_io(rdev, sect, s<<9,
    bio->bi_io_vec[idx].bv_page,
    - READ, false)) {
    + REQ_OP_READ, 0, false)) {
    success = 1;
    break;
    }
    @@ -2030,7 +2031,7 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
    !test_bit(MD_RECOVERY_SYNC, &mddev->recovery))))
    continue;

    - wbio->bi_rw = WRITE;
    + wbio->bi_op = REQ_OP_WRITE;
    wbio->bi_end_io = end_sync_write;
    atomic_inc(&r1_bio->remaining);
    md_sync_acct(conf->mirrors[i].rdev->bdev, bio_sectors(wbio));
    @@ -2090,7 +2091,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
    is_badblock(rdev, sect, s,
    &first_bad, &bad_sectors) == 0 &&
    sync_page_io(rdev, sect, s<<9,
    - conf->tmppage, READ, false))
    + conf->tmppage, REQ_OP_READ, 0, false))
    success = 1;
    else {
    d++;
    @@ -2201,7 +2202,7 @@ static int narrow_write_error(struct r1bio *r1_bio, int i)
    wbio = bio_clone_mddev(r1_bio->master_bio, GFP_NOIO, mddev);
    }

    - wbio->bi_rw = WRITE;
    + wbio->bi_op = REQ_OP_WRITE;
    wbio->bi_iter.bi_sector = r1_bio->sector;
    wbio->bi_iter.bi_size = r1_bio->sectors << 9;

    @@ -2344,7 +2345,8 @@ read_more:
    bio->bi_iter.bi_sector = r1_bio->sector + rdev->data_offset;
    bio->bi_bdev = rdev->bdev;
    bio->bi_end_io = raid1_end_read_request;
    - bio->bi_rw = READ | do_sync;
    + bio->bi_op = REQ_OP_READ;
    + bio->bi_rw = do_sync;
    bio->bi_private = r1_bio;
    if (max_sectors < r1_bio->sectors) {
    /* Drat - have to split this up more */
    @@ -2572,7 +2574,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
    if (i < conf->raid_disks)
    still_degraded = 1;
    } else if (!test_bit(In_sync, &rdev->flags)) {
    - bio->bi_rw = WRITE;
    + bio->bi_op = REQ_OP_WRITE;
    bio->bi_end_io = end_sync_write;
    write_targets ++;
    } else {
    @@ -2599,7 +2601,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
    if (disk < 0)
    disk = i;
    }
    - bio->bi_rw = READ;
    + bio->bi_op = REQ_OP_READ;
    bio->bi_end_io = end_sync_read;
    read_targets++;
    } else if (!test_bit(WriteErrorSeen, &rdev->flags) &&
    @@ -2611,7 +2613,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
    * if we are doing resync or repair. Otherwise, leave
    * this device alone for this sync request.
    */
    - bio->bi_rw = WRITE;
    + bio->bi_op = REQ_OP_WRITE;
    bio->bi_end_io = end_sync_write;
    write_targets++;
    }
    diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
    index 4736be8..63cd985 100644
    --- a/drivers/md/raid10.c
    +++ b/drivers/md/raid10.c
    @@ -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->bi_op == 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->bi_op == 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->bi_op;
    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,8 @@ 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;
    + read_bio->bi_op = op;
    + read_bio->bi_rw = do_sync;
    read_bio->bi_private = r10_bio;

    if (max_sectors < r10_bio->sectors) {
    @@ -1363,8 +1363,9 @@ retry_write:
    rdev));
    mbio->bi_bdev = rdev->bdev;
    mbio->bi_end_io = raid10_end_write_request;
    + mbio->bi_op = op;
    mbio->bi_rw =
    - WRITE | do_sync | do_fua | do_discard | do_same;
    + do_sync | do_fua | do_sec;
    mbio->bi_private = r10_bio;

    atomic_inc(&r10_bio->remaining);
    @@ -1406,8 +1407,9 @@ retry_write:
    r10_bio, rdev));
    mbio->bi_bdev = rdev->bdev;
    mbio->bi_end_io = raid10_end_write_request;
    + mbio->bi_op = op;
    mbio->bi_rw =
    - WRITE | do_sync | do_fua | do_discard | do_same;
    + do_sync | do_fua | do_sec;
    mbio->bi_private = r10_bio;

    atomic_inc(&r10_bio->remaining);
    @@ -1992,7 +1994,7 @@ 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_op = REQ_OP_WRITE;
    tbio->bi_private = r10_bio;
    tbio->bi_iter.bi_sector = r10_bio->devs[i].addr;
    tbio->bi_end_io = end_sync_write;
    @@ -2078,7 +2080,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 +2088,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 +2215,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 +2301,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 +2477,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;
    + wbio->bi_op = REQ_OP_WRITE;

    if (submit_bio_wait(wbio) < 0)
    /* Failure! */
    @@ -2550,7 +2553,8 @@ 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->bi_op = REQ_OP_READ;
    + bio->bi_rw = do_sync;
    bio->bi_private = r10_bio;
    bio->bi_end_io = raid10_end_read_request;
    if (max_sectors < r10_bio->sectors) {
    @@ -3040,7 +3044,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->bi_op = REQ_OP_READ;
    from_addr = r10_bio->devs[j].addr;
    bio->bi_iter.bi_sector = from_addr +
    rdev->data_offset;
    @@ -3066,7 +3070,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->bi_op = REQ_OP_WRITE;
    bio->bi_iter.bi_sector = to_addr
    + rdev->data_offset;
    bio->bi_bdev = rdev->bdev;
    @@ -3095,7 +3099,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->bi_op = REQ_OP_WRITE;
    bio->bi_iter.bi_sector = to_addr +
    rdev->data_offset;
    bio->bi_bdev = rdev->bdev;
    @@ -3215,7 +3219,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->bi_op = REQ_OP_READ;
    bio->bi_iter.bi_sector = sector +
    conf->mirrors[d].rdev->data_offset;
    bio->bi_bdev = conf->mirrors[d].rdev->bdev;
    @@ -3237,7 +3241,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->bi_op = REQ_OP_WRITE;
    bio->bi_iter.bi_sector = sector +
    conf->mirrors[d].replacement->data_offset;
    bio->bi_bdev = conf->mirrors[d].replacement->bdev;
    @@ -4320,7 +4324,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;
    + read_bio->bi_op = REQ_OP_READ;
    read_bio->bi_flags &= (~0UL << BIO_RESET_BITS);
    read_bio->bi_error = 0;
    read_bio->bi_vcnt = 0;
    @@ -4354,7 +4358,7 @@ read_more:
    rdev2->new_data_offset;
    b->bi_private = r10_bio;
    b->bi_end_io = end_reshape_write;
    - b->bi_rw = WRITE;
    + b->bi_op = REQ_OP_WRITE;
    b->bi_next = blist;
    blist = b;
    }
    @@ -4522,7 +4526,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:
    diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
    index 2d56fdc..da07670 100644
    --- a/drivers/md/raid5-cache.c
    +++ b/drivers/md/raid5-cache.c
    @@ -261,7 +261,7 @@ static struct bio *r5l_bio_alloc(struct r5l_log *log)
    {
    struct bio *bio = bio_alloc_bioset(GFP_NOIO, BIO_MAX_PAGES, log->bs);

    - bio->bi_rw = WRITE;
    + bio->bi_op = REQ_OP_WRITE;
    bio->bi_bdev = log->rdev->bdev;
    bio->bi_iter.bi_sector = log->rdev->data_offset + log->log_start;

    @@ -686,6 +686,7 @@ void r5l_flush_stripe_to_raid(struct r5l_log *log)
    bio_reset(&log->flush_bio);
    log->flush_bio.bi_bdev = log->rdev->bdev;
    log->flush_bio.bi_end_io = r5l_log_flush_endio;
    + log->flush_bio.bi_op = REQ_OP_WRITE;
    log->flush_bio.bi_rw = WRITE_FLUSH;
    submit_bio(&log->flush_bio);
    }
    @@ -882,7 +883,8 @@ static int r5l_read_meta_block(struct r5l_log *log,
    struct r5l_meta_block *mb;
    u32 crc, stored_crc;

    - if (!sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page, READ, false))
    + if (!sync_page_io(log->rdev, ctx->pos, PAGE_SIZE, page, REQ_OP_READ, 0,
    + false))
    return -EIO;

    mb = page_address(page);
    @@ -927,7 +929,8 @@ static int r5l_recovery_flush_one_stripe(struct r5l_log *log,
    &disk_index, sh);

    sync_page_io(log->rdev, *log_offset, PAGE_SIZE,
    - sh->dev[disk_index].page, READ, false);
    + sh->dev[disk_index].page, REQ_OP_READ, 0,
    + false);
    sh->dev[disk_index].log_checksum =
    le32_to_cpu(payload->checksum[0]);
    set_bit(R5_Wantwrite, &sh->dev[disk_index].flags);
    @@ -935,7 +938,8 @@ static int r5l_recovery_flush_one_stripe(struct r5l_log *log,
    } else {
    disk_index = sh->pd_idx;
    sync_page_io(log->rdev, *log_offset, PAGE_SIZE,
    - sh->dev[disk_index].page, READ, false);
    + sh->dev[disk_index].page, REQ_OP_READ, 0,
    + false);
    sh->dev[disk_index].log_checksum =
    le32_to_cpu(payload->checksum[0]);
    set_bit(R5_Wantwrite, &sh->dev[disk_index].flags);
    @@ -945,7 +949,7 @@ static int r5l_recovery_flush_one_stripe(struct r5l_log *log,
    sync_page_io(log->rdev,
    r5l_ring_add(log, *log_offset, BLOCK_SECTORS),
    PAGE_SIZE, sh->dev[disk_index].page,
    - READ, false);
    + REQ_OP_READ, 0, false);
    sh->dev[disk_index].log_checksum =
    le32_to_cpu(payload->checksum[1]);
    set_bit(R5_Wantwrite,
    @@ -987,11 +991,13 @@ static int r5l_recovery_flush_one_stripe(struct r5l_log *log,
    rdev = rcu_dereference(conf->disks[disk_index].rdev);
    if (rdev)
    sync_page_io(rdev, stripe_sect, PAGE_SIZE,
    - sh->dev[disk_index].page, WRITE, false);
    + sh->dev[disk_index].page, REQ_OP_WRITE, 0,
    + false);
    rrdev = rcu_dereference(conf->disks[disk_index].replacement);
    if (rrdev)
    sync_page_io(rrdev, stripe_sect, PAGE_SIZE,
    - sh->dev[disk_index].page, WRITE, false);
    + sh->dev[disk_index].page, REQ_OP_WRITE, 0,
    + false);
    }
    raid5_release_stripe(sh);
    return 0;
    @@ -1063,7 +1069,8 @@ static int r5l_log_write_empty_meta_block(struct r5l_log *log, sector_t pos,
    crc = crc32c_le(log->uuid_checksum, mb, PAGE_SIZE);
    mb->checksum = cpu_to_le32(crc);

    - if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, WRITE_FUA, false)) {
    + if (!sync_page_io(log->rdev, pos, PAGE_SIZE, page, REQ_OP_WRITE,
    + WRITE_FUA, false)) {
    __free_page(page);
    return -EIO;
    }
    @@ -1138,7 +1145,7 @@ static int r5l_load_log(struct r5l_log *log)
    if (!page)
    return -ENOMEM;

    - if (!sync_page_io(rdev, cp, PAGE_SIZE, page, READ, false)) {
    + if (!sync_page_io(rdev, cp, PAGE_SIZE, page, REQ_OP_READ, 0, false)) {
    ret = -EIO;
    goto ioerr;
    }
    diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
    index 8ab8b65..c36b817 100644
    --- a/drivers/md/raid5.c
    +++ b/drivers/md/raid5.c
    @@ -806,7 +806,8 @@ static void stripe_add_to_batch_list(struct r5conf *conf, struct stripe_head *sh
    dd_idx = 0;
    while (dd_idx == sh->pd_idx || dd_idx == sh->qd_idx)
    dd_idx++;
    - if (head->dev[dd_idx].towrite->bi_rw != sh->dev[dd_idx].towrite->bi_rw)
    + if (head->dev[dd_idx].towrite->bi_rw != sh->dev[dd_idx].towrite->bi_rw ||
    + head->dev[dd_idx].towrite->bi_op != sh->dev[dd_idx].towrite->bi_op)
    goto unlock_out;

    if (head->batch_head) {
    @@ -891,29 +892,32 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
    if (r5l_write_stripe(conf->log, sh) == 0)
    return;
    for (i = disks; i--; ) {
    - int rw;
    + int op;
    + int op_flags = 0;
    int replace_only = 0;
    struct bio *bi, *rbi;
    struct md_rdev *rdev, *rrdev = NULL;

    sh = head_sh;
    if (test_and_clear_bit(R5_Wantwrite, &sh->dev[i].flags)) {
    - if (test_and_clear_bit(R5_WantFUA, &sh->dev[i].flags))
    - rw = WRITE_FUA;
    - else
    - rw = WRITE;
    + if (test_and_clear_bit(R5_WantFUA, &sh->dev[i].flags)) {
    + op = REQ_OP_WRITE;
    + op_flags = WRITE_FUA;
    + } else {
    + op = REQ_OP_WRITE;
    + }
    if (test_bit(R5_Discard, &sh->dev[i].flags))
    - rw |= REQ_DISCARD;
    + op = REQ_OP_DISCARD;
    } else if (test_and_clear_bit(R5_Wantread, &sh->dev[i].flags))
    - rw = READ;
    + op = REQ_OP_READ;
    else if (test_and_clear_bit(R5_WantReplace,
    &sh->dev[i].flags)) {
    - rw = WRITE;
    + op = REQ_OP_WRITE;
    replace_only = 1;
    } else
    continue;
    if (test_and_clear_bit(R5_SyncIO, &sh->dev[i].flags))
    - rw |= REQ_SYNC;
    + op_flags |= REQ_SYNC;

    again:
    bi = &sh->dev[i].req;
    @@ -927,7 +931,7 @@ again:
    rdev = rrdev;
    rrdev = NULL;
    }
    - if (rw & WRITE) {
    + if (op_is_write(op)) {
    if (replace_only)
    rdev = NULL;
    if (rdev == rrdev)
    @@ -953,7 +957,7 @@ again:
    * need to check for writes. We never accept write errors
    * on the replacement, so we don't to check rrdev.
    */
    - while ((rw & WRITE) && rdev &&
    + while (op_is_write(op) && rdev &&
    test_bit(WriteErrorSeen, &rdev->flags)) {
    sector_t first_bad;
    int bad_sectors;
    @@ -995,8 +999,9 @@ again:

    bio_reset(bi);
    bi->bi_bdev = rdev->bdev;
    - bi->bi_rw = rw;
    - bi->bi_end_io = (rw & WRITE)
    + bi->bi_op = op;
    + bi->bi_rw = op_flags;
    + bi->bi_end_io = op_is_write(op)
    ? raid5_end_write_request
    : raid5_end_read_request;
    bi->bi_private = sh;
    @@ -1027,7 +1032,7 @@ again:
    * If this is discard request, set bi_vcnt 0. We don't
    * want to confuse SCSI because SCSI will replace payload
    */
    - if (rw & REQ_DISCARD)
    + if (op == REQ_OP_DISCARD)
    bi->bi_vcnt = 0;
    if (rrdev)
    set_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags);
    @@ -1047,8 +1052,9 @@ again:

    bio_reset(rbi);
    rbi->bi_bdev = rrdev->bdev;
    - rbi->bi_rw = rw;
    - BUG_ON(!(rw & WRITE));
    + rbi->bi_op = op;
    + rbi->bi_rw = op_flags;
    + BUG_ON(!op_is_write(op));
    rbi->bi_end_io = raid5_end_write_request;
    rbi->bi_private = sh;

    @@ -1076,7 +1082,7 @@ again:
    * If this is discard request, set bi_vcnt 0. We don't
    * want to confuse SCSI because SCSI will replace payload
    */
    - if (rw & REQ_DISCARD)
    + if (op == REQ_OP_DISCARD)
    rbi->bi_vcnt = 0;
    if (conf->mddev->gendisk)
    trace_block_bio_remap(bdev_get_queue(rbi->bi_bdev),
    @@ -1085,7 +1091,7 @@ again:
    generic_make_request(rbi);
    }
    if (!rdev && !rrdev) {
    - if (rw & WRITE)
    + if (op_is_write(op))
    set_bit(STRIPE_DEGRADED, &sh->state);
    pr_debug("skip op %ld on disc %d for sector %llu\n",
    bi->bi_rw, i, (unsigned long long)sh->sector);
    @@ -1623,7 +1629,7 @@ again:
    set_bit(R5_WantFUA, &dev->flags);
    if (wbi->bi_rw & REQ_SYNC)
    set_bit(R5_SyncIO, &dev->flags);
    - if (wbi->bi_rw & REQ_DISCARD)
    + if (wbi->bi_op == REQ_OP_DISCARD)
    set_bit(R5_Discard, &dev->flags);
    else {
    tx = async_copy_data(1, wbi, &dev->page,
    @@ -5178,7 +5184,7 @@ static void raid5_make_request(struct mddev *mddev, struct bio * bi)
    return;
    }

    - if (unlikely(bi->bi_rw & REQ_DISCARD)) {
    + if (unlikely(bi->bi_op == REQ_OP_DISCARD)) {
    make_discard_request(mddev, bi);
    return;
    }
    --
    2.7.2
    \
     
     \ /
      Last update: 2016-04-13 22:21    [W:4.492 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site