Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[cascardo/linux.git] / drivers / target / target_core_iblock.c
index 2077bc2..47cf6c9 100644 (file)
@@ -311,7 +311,8 @@ static void iblock_bio_done(struct bio *bio)
 }
 
 static struct bio *
-iblock_get_bio(struct se_cmd *cmd, sector_t lba, u32 sg_num)
+iblock_get_bio(struct se_cmd *cmd, sector_t lba, u32 sg_num, int op,
+              int op_flags)
 {
        struct iblock_dev *ib_dev = IBLOCK_DEV(cmd->se_dev);
        struct bio *bio;
@@ -333,18 +334,19 @@ iblock_get_bio(struct se_cmd *cmd, sector_t lba, u32 sg_num)
        bio->bi_private = cmd;
        bio->bi_end_io = &iblock_bio_done;
        bio->bi_iter.bi_sector = lba;
+       bio_set_op_attrs(bio, op, op_flags);
 
        return bio;
 }
 
-static void iblock_submit_bios(struct bio_list *list, int rw)
+static void iblock_submit_bios(struct bio_list *list)
 {
        struct blk_plug plug;
        struct bio *bio;
 
        blk_start_plug(&plug);
        while ((bio = bio_list_pop(list)))
-               submit_bio(rw, bio);
+               submit_bio(bio);
        blk_finish_plug(&plug);
 }
 
@@ -386,9 +388,10 @@ iblock_execute_sync_cache(struct se_cmd *cmd)
        bio = bio_alloc(GFP_KERNEL, 0);
        bio->bi_end_io = iblock_end_io_flush;
        bio->bi_bdev = ib_dev->ibd_bd;
+       bio->bi_rw = WRITE_FLUSH;
        if (!immed)
                bio->bi_private = cmd;
-       submit_bio(WRITE_FLUSH, bio);
+       submit_bio(bio);
        return 0;
 }
 
@@ -477,7 +480,7 @@ iblock_execute_write_same(struct se_cmd *cmd)
                goto fail;
        cmd->priv = ibr;
 
-       bio = iblock_get_bio(cmd, block_lba, 1);
+       bio = iblock_get_bio(cmd, block_lba, 1, REQ_OP_WRITE, 0);
        if (!bio)
                goto fail_free_ibr;
 
@@ -490,7 +493,8 @@ iblock_execute_write_same(struct se_cmd *cmd)
                while (bio_add_page(bio, sg_page(sg), sg->length, sg->offset)
                                != sg->length) {
 
-                       bio = iblock_get_bio(cmd, block_lba, 1);
+                       bio = iblock_get_bio(cmd, block_lba, 1, REQ_OP_WRITE,
+                                            0);
                        if (!bio)
                                goto fail_put_bios;
 
@@ -503,7 +507,7 @@ iblock_execute_write_same(struct se_cmd *cmd)
                sectors -= 1;
        }
 
-       iblock_submit_bios(&list, WRITE);
+       iblock_submit_bios(&list);
        return 0;
 
 fail_put_bios:
@@ -676,8 +680,7 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
        struct scatterlist *sg;
        u32 sg_num = sgl_nents;
        unsigned bio_cnt;
-       int rw = 0;
-       int i;
+       int i, op, op_flags = 0;
 
        if (data_direction == DMA_TO_DEVICE) {
                struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
@@ -686,18 +689,15 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
                 * Force writethrough using WRITE_FUA if a volatile write cache
                 * is not enabled, or if initiator set the Force Unit Access bit.
                 */
+               op = REQ_OP_WRITE;
                if (test_bit(QUEUE_FLAG_FUA, &q->queue_flags)) {
                        if (cmd->se_cmd_flags & SCF_FUA)
-                               rw = WRITE_FUA;
+                               op_flags = WRITE_FUA;
                        else if (!test_bit(QUEUE_FLAG_WC, &q->queue_flags))
-                               rw = WRITE_FUA;
-                       else
-                               rw = WRITE;
-               } else {
-                       rw = WRITE;
+                               op_flags = WRITE_FUA;
                }
        } else {
-               rw = READ;
+               op = REQ_OP_READ;
        }
 
        ibr = kzalloc(sizeof(struct iblock_req), GFP_KERNEL);
@@ -711,7 +711,7 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
                return 0;
        }
 
-       bio = iblock_get_bio(cmd, block_lba, sgl_nents);
+       bio = iblock_get_bio(cmd, block_lba, sgl_nents, op, op_flags);
        if (!bio)
                goto fail_free_ibr;
 
@@ -731,11 +731,12 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
                while (bio_add_page(bio, sg_page(sg), sg->length, sg->offset)
                                != sg->length) {
                        if (bio_cnt >= IBLOCK_MAX_BIO_PER_TASK) {
-                               iblock_submit_bios(&list, rw);
+                               iblock_submit_bios(&list);
                                bio_cnt = 0;
                        }
 
-                       bio = iblock_get_bio(cmd, block_lba, sg_num);
+                       bio = iblock_get_bio(cmd, block_lba, sg_num, op,
+                                            op_flags);
                        if (!bio)
                                goto fail_put_bios;
 
@@ -755,7 +756,7 @@ iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
                        goto fail_put_bios;
        }
 
-       iblock_submit_bios(&list, rw);
+       iblock_submit_bios(&list);
        iblock_complete_cmd(cmd);
        return 0;