Merge branch 'mymd/for-next' into mymd/for-linus
[cascardo/linux.git] / drivers / md / raid1.c
index 5027ef4..46168ef 100644 (file)
@@ -747,7 +747,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_op(bio) == REQ_OP_DISCARD) &&
                            !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
                                /* Just ignore it */
                                bio_endio(bio);
@@ -1021,7 +1021,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_op(bio) == REQ_OP_DISCARD) &&
                    !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
                        /* Just ignore it */
                        bio_endio(bio);
@@ -1041,12 +1041,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_op(bio);
        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_flush_fua = (bio->bi_rw &
+                                               (REQ_PREFLUSH | REQ_FUA));
        struct md_rdev *blocked_rdev;
        struct blk_plug_cb *cb;
        struct raid1_plug_cb *plug = NULL;
@@ -1094,7 +1093,7 @@ static void raid1_make_request(struct mddev *mddev, struct bio * bio)
        bitmap = mddev->bitmap;
 
        /*
-        * make_request() can abort the operation when READA is being
+        * make_request() can abort the operation when read-ahead is being
         * used and no empty request is available.
         *
         */
@@ -1154,7 +1153,7 @@ 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;
+               bio_set_op_attrs(read_bio, op, do_sync);
                read_bio->bi_private = r1_bio;
 
                if (max_sectors < r1_bio->sectors) {
@@ -1364,8 +1363,7 @@ 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_rw =
-                       WRITE | do_flush_fua | do_sync | do_discard | do_same;
+               bio_set_op_attrs(mbio, op, do_flush_fua | do_sync);
                mbio->bi_private = r1_bio;
 
                atomic_inc(&r1_bio->remaining);
@@ -1756,7 +1754,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) {
@@ -1810,7 +1808,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;
                                }
@@ -2015,7 +2013,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;
+               bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);
                wbio->bi_end_io = end_sync_write;
                atomic_inc(&r1_bio->remaining);
                md_sync_acct(conf->mirrors[i].rdev->bdev, bio_sectors(wbio));
@@ -2073,7 +2071,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
                                atomic_inc(&rdev->nr_pending);
                                rcu_read_unlock();
                                if (sync_page_io(rdev, sect, s<<9,
-                                                conf->tmppage, READ, false))
+                                        conf->tmppage, REQ_OP_READ, 0, false))
                                        success = 1;
                                rdev_dec_pending(rdev, mddev);
                                if (success)
@@ -2198,14 +2196,15 @@ 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;
+               bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);
                wbio->bi_iter.bi_sector = r1_bio->sector;
                wbio->bi_iter.bi_size = r1_bio->sectors << 9;
 
                bio_trim(wbio, sector - r1_bio->sector, sectors);
                wbio->bi_iter.bi_sector += rdev->data_offset;
                wbio->bi_bdev = rdev->bdev;
-               if (submit_bio_wait(WRITE, wbio) < 0)
+
+               if (submit_bio_wait(wbio) < 0)
                        /* failure! */
                        ok = rdev_set_badblocks(rdev, sector,
                                                sectors, 0)
@@ -2340,7 +2339,7 @@ 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_set_op_attrs(bio, REQ_OP_READ, do_sync);
                bio->bi_private = r1_bio;
                if (max_sectors < r1_bio->sectors) {
                        /* Drat - have to split this up more */
@@ -2575,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_set_op_attrs(bio, REQ_OP_WRITE, 0);
                        bio->bi_end_io = end_sync_write;
                        write_targets ++;
                } else {
@@ -2602,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_set_op_attrs(bio, REQ_OP_READ, 0);
                                bio->bi_end_io = end_sync_read;
                                read_targets++;
                        } else if (!test_bit(WriteErrorSeen, &rdev->flags) &&
@@ -2614,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_set_op_attrs(bio, REQ_OP_WRITE, 0);
                                bio->bi_end_io = end_sync_write;
                                write_targets++;
                        }