aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Christie <mchristi@redhat.com>2016-06-05 15:31:48 -0400
committerJens Axboe <axboe@fb.com>2016-06-07 15:41:38 -0400
commit95fe6c1a209ef89d9f94dd04a0ad72be1487d5d5 (patch)
tree4f0b5eabb7d38efe2f17e61207c628a1de8bb6ea
parentc8d93247f1d0cf478222a7f4fc37d453d6193d04 (diff)
block, fs, mm, drivers: use bio set/get op accessors
This patch converts the simple bi_rw use cases in the block, drivers, mm and fs code to set/get the bio operation using bio_set_op_attrs/bio_op These should be simple one or two liner cases, so I just did them in one patch. The next patches handle the more complicated cases in a module per patch. Signed-off-by: Mike Christie <mchristi@redhat.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--block/bio.c13
-rw-r--r--block/blk-core.c6
-rw-r--r--block/blk-flush.c2
-rw-r--r--block/blk-lib.c4
-rw-r--r--block/blk-map.c2
-rw-r--r--block/blk-merge.c12
-rw-r--r--drivers/block/brd.c2
-rw-r--r--drivers/block/floppy.c2
-rw-r--r--drivers/block/pktcdvd.c4
-rw-r--r--drivers/block/rsxx/dma.c2
-rw-r--r--drivers/block/zram/zram_drv.c2
-rw-r--r--drivers/lightnvm/rrpc.c6
-rw-r--r--drivers/scsi/osd/osd_initiator.c8
-rw-r--r--drivers/staging/lustre/lustre/llite/lloop.c6
-rw-r--r--fs/crypto/crypto.c2
-rw-r--r--fs/exofs/ore.c2
-rw-r--r--fs/ext4/page-io.c6
-rw-r--r--fs/ext4/readpage.c2
-rw-r--r--fs/jfs/jfs_logmgr.c4
-rw-r--r--fs/jfs/jfs_metapage.c4
-rw-r--r--fs/logfs/dev_bdev.c12
-rw-r--r--fs/nfs/blocklayout/blocklayout.c4
-rw-r--r--include/linux/bio.h15
-rw-r--r--mm/page_io.c4
24 files changed, 65 insertions, 61 deletions
diff --git a/block/bio.c b/block/bio.c
index fc779eba0b95..848cd351513b 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -656,16 +656,15 @@ struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask,
656 bio = bio_alloc_bioset(gfp_mask, bio_segments(bio_src), bs); 656 bio = bio_alloc_bioset(gfp_mask, bio_segments(bio_src), bs);
657 if (!bio) 657 if (!bio)
658 return NULL; 658 return NULL;
659
660 bio->bi_bdev = bio_src->bi_bdev; 659 bio->bi_bdev = bio_src->bi_bdev;
661 bio->bi_rw = bio_src->bi_rw; 660 bio->bi_rw = bio_src->bi_rw;
662 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; 661 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector;
663 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; 662 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size;
664 663
665 if (bio->bi_rw & REQ_DISCARD) 664 if (bio_op(bio) == REQ_OP_DISCARD)
666 goto integrity_clone; 665 goto integrity_clone;
667 666
668 if (bio->bi_rw & REQ_WRITE_SAME) { 667 if (bio_op(bio) == REQ_OP_WRITE_SAME) {
669 bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0]; 668 bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0];
670 goto integrity_clone; 669 goto integrity_clone;
671 } 670 }
@@ -1166,7 +1165,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
1166 goto out_bmd; 1165 goto out_bmd;
1167 1166
1168 if (iter->type & WRITE) 1167 if (iter->type & WRITE)
1169 bio->bi_rw |= REQ_WRITE; 1168 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
1170 1169
1171 ret = 0; 1170 ret = 0;
1172 1171
@@ -1336,7 +1335,7 @@ struct bio *bio_map_user_iov(struct request_queue *q,
1336 * set data direction, and check if mapped pages need bouncing 1335 * set data direction, and check if mapped pages need bouncing
1337 */ 1336 */
1338 if (iter->type & WRITE) 1337 if (iter->type & WRITE)
1339 bio->bi_rw |= REQ_WRITE; 1338 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
1340 1339
1341 bio_set_flag(bio, BIO_USER_MAPPED); 1340 bio_set_flag(bio, BIO_USER_MAPPED);
1342 1341
@@ -1529,7 +1528,7 @@ struct bio *bio_copy_kern(struct request_queue *q, void *data, unsigned int len,
1529 bio->bi_private = data; 1528 bio->bi_private = data;
1530 } else { 1529 } else {
1531 bio->bi_end_io = bio_copy_kern_endio; 1530 bio->bi_end_io = bio_copy_kern_endio;
1532 bio->bi_rw |= REQ_WRITE; 1531 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
1533 } 1532 }
1534 1533
1535 return bio; 1534 return bio;
@@ -1784,7 +1783,7 @@ struct bio *bio_split(struct bio *bio, int sectors,
1784 * Discards need a mutable bio_vec to accommodate the payload 1783 * Discards need a mutable bio_vec to accommodate the payload
1785 * required by the DSM TRIM and UNMAP commands. 1784 * required by the DSM TRIM and UNMAP commands.
1786 */ 1785 */
1787 if (bio->bi_rw & REQ_DISCARD) 1786 if (bio_op(bio) == REQ_OP_DISCARD)
1788 split = bio_clone_bioset(bio, gfp, bs); 1787 split = bio_clone_bioset(bio, gfp, bs);
1789 else 1788 else
1790 split = bio_clone_fast(bio, gfp, bs); 1789 split = bio_clone_fast(bio, gfp, bs);
diff --git a/block/blk-core.c b/block/blk-core.c
index e8e5865a53e2..7e943dce781c 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1973,14 +1973,14 @@ generic_make_request_checks(struct bio *bio)
1973 } 1973 }
1974 } 1974 }
1975 1975
1976 if ((bio->bi_rw & REQ_DISCARD) && 1976 if ((bio_op(bio) == REQ_OP_DISCARD) &&
1977 (!blk_queue_discard(q) || 1977 (!blk_queue_discard(q) ||
1978 ((bio->bi_rw & REQ_SECURE) && !blk_queue_secdiscard(q)))) { 1978 ((bio->bi_rw & REQ_SECURE) && !blk_queue_secdiscard(q)))) {
1979 err = -EOPNOTSUPP; 1979 err = -EOPNOTSUPP;
1980 goto end_io; 1980 goto end_io;
1981 } 1981 }
1982 1982
1983 if (bio->bi_rw & REQ_WRITE_SAME && !bdev_write_same(bio->bi_bdev)) { 1983 if (bio_op(bio) == REQ_OP_WRITE_SAME && !bdev_write_same(bio->bi_bdev)) {
1984 err = -EOPNOTSUPP; 1984 err = -EOPNOTSUPP;
1985 goto end_io; 1985 goto end_io;
1986 } 1986 }
@@ -2110,7 +2110,7 @@ blk_qc_t submit_bio(struct bio *bio)
2110 if (bio_has_data(bio)) { 2110 if (bio_has_data(bio)) {
2111 unsigned int count; 2111 unsigned int count;
2112 2112
2113 if (unlikely(bio->bi_rw & REQ_WRITE_SAME)) 2113 if (unlikely(bio_op(bio) == REQ_OP_WRITE_SAME))
2114 count = bdev_logical_block_size(bio->bi_bdev) >> 9; 2114 count = bdev_logical_block_size(bio->bi_bdev) >> 9;
2115 else 2115 else
2116 count = bio_sectors(bio); 2116 count = bio_sectors(bio);
diff --git a/block/blk-flush.c b/block/blk-flush.c
index 3af4a5ad46f5..9fd1f63a6348 100644
--- a/block/blk-flush.c
+++ b/block/blk-flush.c
@@ -485,7 +485,7 @@ int blkdev_issue_flush(struct block_device *bdev, gfp_t gfp_mask,
485 485
486 bio = bio_alloc(gfp_mask, 0); 486 bio = bio_alloc(gfp_mask, 0);
487 bio->bi_bdev = bdev; 487 bio->bi_bdev = bdev;
488 bio->bi_rw = WRITE_FLUSH; 488 bio_set_op_attrs(bio, REQ_OP_WRITE, WRITE_FLUSH);
489 489
490 ret = submit_bio_wait(bio); 490 ret = submit_bio_wait(bio);
491 491
diff --git a/block/blk-lib.c b/block/blk-lib.c
index 1f6dec5e0975..c614eaa7b853 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -155,7 +155,7 @@ int blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
155 bio->bi_io_vec->bv_page = page; 155 bio->bi_io_vec->bv_page = page;
156 bio->bi_io_vec->bv_offset = 0; 156 bio->bi_io_vec->bv_offset = 0;
157 bio->bi_io_vec->bv_len = bdev_logical_block_size(bdev); 157 bio->bi_io_vec->bv_len = bdev_logical_block_size(bdev);
158 bio->bi_rw = REQ_WRITE | REQ_WRITE_SAME; 158 bio_set_op_attrs(bio, REQ_OP_WRITE_SAME, 0);
159 159
160 if (nr_sects > max_write_same_sectors) { 160 if (nr_sects > max_write_same_sectors) {
161 bio->bi_iter.bi_size = max_write_same_sectors << 9; 161 bio->bi_iter.bi_size = max_write_same_sectors << 9;
@@ -196,7 +196,7 @@ static int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector,
196 gfp_mask); 196 gfp_mask);
197 bio->bi_iter.bi_sector = sector; 197 bio->bi_iter.bi_sector = sector;
198 bio->bi_bdev = bdev; 198 bio->bi_bdev = bdev;
199 bio->bi_rw = REQ_WRITE; 199 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
200 200
201 while (nr_sects != 0) { 201 while (nr_sects != 0) {
202 sz = min((sector_t) PAGE_SIZE >> 9 , nr_sects); 202 sz = min((sector_t) PAGE_SIZE >> 9 , nr_sects);
diff --git a/block/blk-map.c b/block/blk-map.c
index b9f88b7751fb..61733a660c3a 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -224,7 +224,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,
224 return PTR_ERR(bio); 224 return PTR_ERR(bio);
225 225
226 if (!reading) 226 if (!reading)
227 bio->bi_rw |= REQ_WRITE; 227 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
228 228
229 if (do_copy) 229 if (do_copy)
230 rq->cmd_flags |= REQ_COPY_USER; 230 rq->cmd_flags |= REQ_COPY_USER;
diff --git a/block/blk-merge.c b/block/blk-merge.c
index b198070c5bc4..5a03f967557a 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -172,9 +172,9 @@ void blk_queue_split(struct request_queue *q, struct bio **bio,
172 struct bio *split, *res; 172 struct bio *split, *res;
173 unsigned nsegs; 173 unsigned nsegs;
174 174
175 if ((*bio)->bi_rw & REQ_DISCARD) 175 if (bio_op(*bio) == REQ_OP_DISCARD)
176 split = blk_bio_discard_split(q, *bio, bs, &nsegs); 176 split = blk_bio_discard_split(q, *bio, bs, &nsegs);
177 else if ((*bio)->bi_rw & REQ_WRITE_SAME) 177 else if (bio_op(*bio) == REQ_OP_WRITE_SAME)
178 split = blk_bio_write_same_split(q, *bio, bs, &nsegs); 178 split = blk_bio_write_same_split(q, *bio, bs, &nsegs);
179 else 179 else
180 split = blk_bio_segment_split(q, *bio, q->bio_split, &nsegs); 180 split = blk_bio_segment_split(q, *bio, q->bio_split, &nsegs);
@@ -213,10 +213,10 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
213 * This should probably be returning 0, but blk_add_request_payload() 213 * This should probably be returning 0, but blk_add_request_payload()
214 * (Christoph!!!!) 214 * (Christoph!!!!)
215 */ 215 */
216 if (bio->bi_rw & REQ_DISCARD) 216 if (bio_op(bio) == REQ_OP_DISCARD)
217 return 1; 217 return 1;
218 218
219 if (bio->bi_rw & REQ_WRITE_SAME) 219 if (bio_op(bio) == REQ_OP_WRITE_SAME)
220 return 1; 220 return 1;
221 221
222 fbio = bio; 222 fbio = bio;
@@ -385,7 +385,7 @@ static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
385 nsegs = 0; 385 nsegs = 0;
386 cluster = blk_queue_cluster(q); 386 cluster = blk_queue_cluster(q);
387 387
388 if (bio->bi_rw & REQ_DISCARD) { 388 if (bio_op(bio) == REQ_OP_DISCARD) {
389 /* 389 /*
390 * This is a hack - drivers should be neither modifying the 390 * This is a hack - drivers should be neither modifying the
391 * biovec, nor relying on bi_vcnt - but because of 391 * biovec, nor relying on bi_vcnt - but because of
@@ -400,7 +400,7 @@ static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio,
400 return 0; 400 return 0;
401 } 401 }
402 402
403 if (bio->bi_rw & REQ_WRITE_SAME) { 403 if (bio_op(bio) == REQ_OP_WRITE_SAME) {
404single_segment: 404single_segment:
405 *sg = sglist; 405 *sg = sglist;
406 bvec = bio_iovec(bio); 406 bvec = bio_iovec(bio);
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index c04bd9bc39fd..f5b0d6f4e09f 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -339,7 +339,7 @@ static blk_qc_t brd_make_request(struct request_queue *q, struct bio *bio)
339 if (bio_end_sector(bio) > get_capacity(bdev->bd_disk)) 339 if (bio_end_sector(bio) > get_capacity(bdev->bd_disk))
340 goto io_error; 340 goto io_error;
341 341
342 if (unlikely(bio->bi_rw & REQ_DISCARD)) { 342 if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) {
343 if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) || 343 if (sector & ((PAGE_SIZE >> SECTOR_SHIFT) - 1) ||
344 bio->bi_iter.bi_size & ~PAGE_MASK) 344 bio->bi_iter.bi_size & ~PAGE_MASK)
345 goto io_error; 345 goto io_error;
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 73ded25b82c4..f9bfecd733a8 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3822,7 +3822,7 @@ static int __floppy_read_block_0(struct block_device *bdev, int drive)
3822 bio.bi_flags |= (1 << BIO_QUIET); 3822 bio.bi_flags |= (1 << BIO_QUIET);
3823 bio.bi_private = &cbdata; 3823 bio.bi_private = &cbdata;
3824 bio.bi_end_io = floppy_rb0_cb; 3824 bio.bi_end_io = floppy_rb0_cb;
3825 bio.bi_rw = READ; 3825 bio_set_op_attrs(&bio, REQ_OP_READ, 0);
3826 3826
3827 submit_bio(&bio); 3827 submit_bio(&bio);
3828 process_fd_request(); 3828 process_fd_request();
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index d06c62eccdf0..9393bc730acf 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -1074,7 +1074,7 @@ static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt)
1074 BUG(); 1074 BUG();
1075 1075
1076 atomic_inc(&pkt->io_wait); 1076 atomic_inc(&pkt->io_wait);
1077 bio->bi_rw = READ; 1077 bio_set_op_attrs(bio, REQ_OP_READ, 0);
1078 pkt_queue_bio(pd, bio); 1078 pkt_queue_bio(pd, bio);
1079 frames_read++; 1079 frames_read++;
1080 } 1080 }
@@ -1336,7 +1336,7 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
1336 1336
1337 /* Start the write request */ 1337 /* Start the write request */
1338 atomic_set(&pkt->io_wait, 1); 1338 atomic_set(&pkt->io_wait, 1);
1339 pkt->w_bio->bi_rw = WRITE; 1339 bio_set_op_attrs(pkt->w_bio, REQ_OP_WRITE, 0);
1340 pkt_queue_bio(pd, pkt->w_bio); 1340 pkt_queue_bio(pd, pkt->w_bio);
1341} 1341}
1342 1342
diff --git a/drivers/block/rsxx/dma.c b/drivers/block/rsxx/dma.c
index cf8cd293abb5..5a20385f87d0 100644
--- a/drivers/block/rsxx/dma.c
+++ b/drivers/block/rsxx/dma.c
@@ -705,7 +705,7 @@ int rsxx_dma_queue_bio(struct rsxx_cardinfo *card,
705 dma_cnt[i] = 0; 705 dma_cnt[i] = 0;
706 } 706 }
707 707
708 if (bio->bi_rw & REQ_DISCARD) { 708 if (bio_op(bio) == REQ_OP_DISCARD) {
709 bv_len = bio->bi_iter.bi_size; 709 bv_len = bio->bi_iter.bi_size;
710 710
711 while (bv_len > 0) { 711 while (bv_len > 0) {
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 8fcad8b761f1..e5e5d19f2172 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -874,7 +874,7 @@ static void __zram_make_request(struct zram *zram, struct bio *bio)
874 offset = (bio->bi_iter.bi_sector & 874 offset = (bio->bi_iter.bi_sector &
875 (SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT; 875 (SECTORS_PER_PAGE - 1)) << SECTOR_SHIFT;
876 876
877 if (unlikely(bio->bi_rw & REQ_DISCARD)) { 877 if (unlikely(bio_op(bio) == REQ_OP_DISCARD)) {
878 zram_bio_discard(zram, index, offset, bio); 878 zram_bio_discard(zram, index, offset, bio);
879 bio_endio(bio); 879 bio_endio(bio);
880 return; 880 return;
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index 2103e97a974f..de86d72dcdf0 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -342,7 +342,7 @@ try:
342 342
343 /* Perform read to do GC */ 343 /* Perform read to do GC */
344 bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr); 344 bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr);
345 bio->bi_rw = READ; 345 bio_set_op_attrs(bio, REQ_OP_READ, 0);
346 bio->bi_private = &wait; 346 bio->bi_private = &wait;
347 bio->bi_end_io = rrpc_end_sync_bio; 347 bio->bi_end_io = rrpc_end_sync_bio;
348 348
@@ -364,7 +364,7 @@ try:
364 reinit_completion(&wait); 364 reinit_completion(&wait);
365 365
366 bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr); 366 bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr);
367 bio->bi_rw = WRITE; 367 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
368 bio->bi_private = &wait; 368 bio->bi_private = &wait;
369 bio->bi_end_io = rrpc_end_sync_bio; 369 bio->bi_end_io = rrpc_end_sync_bio;
370 370
@@ -908,7 +908,7 @@ static blk_qc_t rrpc_make_rq(struct request_queue *q, struct bio *bio)
908 struct nvm_rq *rqd; 908 struct nvm_rq *rqd;
909 int err; 909 int err;
910 910
911 if (bio->bi_rw & REQ_DISCARD) { 911 if (bio_op(bio) == REQ_OP_DISCARD) {
912 rrpc_discard(rrpc, bio); 912 rrpc_discard(rrpc, bio);
913 return BLK_QC_T_NONE; 913 return BLK_QC_T_NONE;
914 } 914 }
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
index 14ed39b32bfc..daa4dc17f172 100644
--- a/drivers/scsi/osd/osd_initiator.c
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -726,7 +726,7 @@ static int _osd_req_list_objects(struct osd_request *or,
726 return PTR_ERR(bio); 726 return PTR_ERR(bio);
727 } 727 }
728 728
729 bio->bi_rw &= ~REQ_WRITE; 729 bio_set_op_attrs(bio, REQ_OP_READ, 0);
730 or->in.bio = bio; 730 or->in.bio = bio;
731 or->in.total_bytes = bio->bi_iter.bi_size; 731 or->in.total_bytes = bio->bi_iter.bi_size;
732 return 0; 732 return 0;
@@ -839,7 +839,7 @@ int osd_req_write_kern(struct osd_request *or,
839 if (IS_ERR(bio)) 839 if (IS_ERR(bio))
840 return PTR_ERR(bio); 840 return PTR_ERR(bio);
841 841
842 bio->bi_rw |= REQ_WRITE; /* FIXME: bio_set_dir() */ 842 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
843 osd_req_write(or, obj, offset, bio, len); 843 osd_req_write(or, obj, offset, bio, len);
844 return 0; 844 return 0;
845} 845}
@@ -956,7 +956,7 @@ static int _osd_req_finalize_cdb_cont(struct osd_request *or, const u8 *cap_key)
956 if (IS_ERR(bio)) 956 if (IS_ERR(bio))
957 return PTR_ERR(bio); 957 return PTR_ERR(bio);
958 958
959 bio->bi_rw |= REQ_WRITE; 959 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
960 960
961 /* integrity check the continuation before the bio is linked 961 /* integrity check the continuation before the bio is linked
962 * with the other data segments since the continuation 962 * with the other data segments since the continuation
@@ -1077,7 +1077,7 @@ int osd_req_write_sg_kern(struct osd_request *or,
1077 if (IS_ERR(bio)) 1077 if (IS_ERR(bio))
1078 return PTR_ERR(bio); 1078 return PTR_ERR(bio);
1079 1079
1080 bio->bi_rw |= REQ_WRITE; 1080 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
1081 osd_req_write_sg(or, obj, bio, sglist, numentries); 1081 osd_req_write_sg(or, obj, bio, sglist, numentries);
1082 1082
1083 return 0; 1083 return 0;
diff --git a/drivers/staging/lustre/lustre/llite/lloop.c b/drivers/staging/lustre/lustre/llite/lloop.c
index 813a9a354e5f..b677930a8a3b 100644
--- a/drivers/staging/lustre/lustre/llite/lloop.c
+++ b/drivers/staging/lustre/lustre/llite/lloop.c
@@ -211,9 +211,9 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
211 return io->ci_result; 211 return io->ci_result;
212 io->ci_lockreq = CILR_NEVER; 212 io->ci_lockreq = CILR_NEVER;
213 213
214 rw = head->bi_rw; 214 rw = bio_data_dir(head);
215 for (bio = head; bio ; bio = bio->bi_next) { 215 for (bio = head; bio ; bio = bio->bi_next) {
216 LASSERT(rw == bio->bi_rw); 216 LASSERT(rw == bio_data_dir(bio));
217 217
218 offset = (pgoff_t)(bio->bi_iter.bi_sector << 9) + lo->lo_offset; 218 offset = (pgoff_t)(bio->bi_iter.bi_sector << 9) + lo->lo_offset;
219 bio_for_each_segment(bvec, bio, iter) { 219 bio_for_each_segment(bvec, bio, iter) {
@@ -305,7 +305,7 @@ static unsigned int loop_get_bio(struct lloop_device *lo, struct bio **req)
305 /* TODO: need to split the bio, too bad. */ 305 /* TODO: need to split the bio, too bad. */
306 LASSERT(first->bi_vcnt <= LLOOP_MAX_SEGMENTS); 306 LASSERT(first->bi_vcnt <= LLOOP_MAX_SEGMENTS);
307 307
308 rw = first->bi_rw; 308 rw = bio_data_dir(first);
309 bio = &lo->lo_bio; 309 bio = &lo->lo_bio;
310 while (*bio && (*bio)->bi_rw == rw) { 310 while (*bio && (*bio)->bi_rw == rw) {
311 CDEBUG(D_INFO, "bio sector %llu size %u count %u vcnt%u\n", 311 CDEBUG(D_INFO, "bio sector %llu size %u count %u vcnt%u\n",
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 5b758566199e..c502c116924c 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -318,7 +318,7 @@ int fscrypt_zeroout_range(struct inode *inode, pgoff_t lblk,
318 bio->bi_bdev = inode->i_sb->s_bdev; 318 bio->bi_bdev = inode->i_sb->s_bdev;
319 bio->bi_iter.bi_sector = 319 bio->bi_iter.bi_sector =
320 pblk << (inode->i_sb->s_blocksize_bits - 9); 320 pblk << (inode->i_sb->s_blocksize_bits - 9);
321 bio->bi_rw = WRITE; 321 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
322 ret = bio_add_page(bio, ciphertext_page, 322 ret = bio_add_page(bio, ciphertext_page,
323 inode->i_sb->s_blocksize, 0); 323 inode->i_sb->s_blocksize, 0);
324 if (ret != inode->i_sb->s_blocksize) { 324 if (ret != inode->i_sb->s_blocksize) {
diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c
index 7bd8ac8dfb28..8bb72807e70d 100644
--- a/fs/exofs/ore.c
+++ b/fs/exofs/ore.c
@@ -878,7 +878,7 @@ static int _write_mirror(struct ore_io_state *ios, int cur_comp)
878 } else { 878 } else {
879 bio = master_dev->bio; 879 bio = master_dev->bio;
880 /* FIXME: bio_set_dir() */ 880 /* FIXME: bio_set_dir() */
881 bio->bi_rw |= REQ_WRITE; 881 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
882 } 882 }
883 883
884 osd_req_write(or, _ios_obj(ios, cur_comp), 884 osd_req_write(or, _ios_obj(ios, cur_comp),
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index a72dbcc7a43e..5185fed40fab 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -340,9 +340,9 @@ void ext4_io_submit(struct ext4_io_submit *io)
340 struct bio *bio = io->io_bio; 340 struct bio *bio = io->io_bio;
341 341
342 if (bio) { 342 if (bio) {
343 int io_op = io->io_wbc->sync_mode == WB_SYNC_ALL ? 343 int io_op_flags = io->io_wbc->sync_mode == WB_SYNC_ALL ?
344 WRITE_SYNC : WRITE; 344 WRITE_SYNC : 0;
345 io->io_bio->bi_rw = io_op; 345 bio_set_op_attrs(io->io_bio, REQ_OP_WRITE, io_op_flags);
346 submit_bio(io->io_bio); 346 submit_bio(io->io_bio);
347 } 347 }
348 io->io_bio = NULL; 348 io->io_bio = NULL;
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c
index 130bd45f4a99..2ced5a823354 100644
--- a/fs/ext4/readpage.c
+++ b/fs/ext4/readpage.c
@@ -294,7 +294,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
294 bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9); 294 bio->bi_iter.bi_sector = blocks[0] << (blkbits - 9);
295 bio->bi_end_io = mpage_end_io; 295 bio->bi_end_io = mpage_end_io;
296 bio->bi_private = ctx; 296 bio->bi_private = ctx;
297 bio->bi_rw = READ; 297 bio_set_op_attrs(bio, REQ_OP_READ, 0);
298 } 298 }
299 299
300 length = first_hole << blkbits; 300 length = first_hole << blkbits;
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
index 3ee3f32562f9..a74752146ec9 100644
--- a/fs/jfs/jfs_logmgr.c
+++ b/fs/jfs/jfs_logmgr.c
@@ -2002,7 +2002,7 @@ static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp)
2002 2002
2003 bio->bi_end_io = lbmIODone; 2003 bio->bi_end_io = lbmIODone;
2004 bio->bi_private = bp; 2004 bio->bi_private = bp;
2005 bio->bi_rw = READ_SYNC; 2005 bio_set_op_attrs(bio, REQ_OP_READ, READ_SYNC);
2006 /*check if journaling to disk has been disabled*/ 2006 /*check if journaling to disk has been disabled*/
2007 if (log->no_integrity) { 2007 if (log->no_integrity) {
2008 bio->bi_iter.bi_size = 0; 2008 bio->bi_iter.bi_size = 0;
@@ -2146,7 +2146,7 @@ static void lbmStartIO(struct lbuf * bp)
2146 2146
2147 bio->bi_end_io = lbmIODone; 2147 bio->bi_end_io = lbmIODone;
2148 bio->bi_private = bp; 2148 bio->bi_private = bp;
2149 bio->bi_rw = WRITE_SYNC; 2149 bio_set_op_attrs(bio, REQ_OP_WRITE, WRITE_SYNC);
2150 2150
2151 /* check if journaling to disk has been disabled */ 2151 /* check if journaling to disk has been disabled */
2152 if (log->no_integrity) { 2152 if (log->no_integrity) {
diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c
index 97254436a4ed..e7fa9e513040 100644
--- a/fs/jfs/jfs_metapage.c
+++ b/fs/jfs/jfs_metapage.c
@@ -434,7 +434,7 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc)
434 bio->bi_iter.bi_sector = pblock << (inode->i_blkbits - 9); 434 bio->bi_iter.bi_sector = pblock << (inode->i_blkbits - 9);
435 bio->bi_end_io = metapage_write_end_io; 435 bio->bi_end_io = metapage_write_end_io;
436 bio->bi_private = page; 436 bio->bi_private = page;
437 bio->bi_rw = WRITE; 437 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
438 438
439 /* Don't call bio_add_page yet, we may add to this vec */ 439 /* Don't call bio_add_page yet, we may add to this vec */
440 bio_offset = offset; 440 bio_offset = offset;
@@ -515,7 +515,7 @@ static int metapage_readpage(struct file *fp, struct page *page)
515 pblock << (inode->i_blkbits - 9); 515 pblock << (inode->i_blkbits - 9);
516 bio->bi_end_io = metapage_read_end_io; 516 bio->bi_end_io = metapage_read_end_io;
517 bio->bi_private = page; 517 bio->bi_private = page;
518 bio->bi_rw = READ; 518 bio_set_op_attrs(bio, REQ_OP_READ, 0);
519 len = xlen << inode->i_blkbits; 519 len = xlen << inode->i_blkbits;
520 offset = block_offset << inode->i_blkbits; 520 offset = block_offset << inode->i_blkbits;
521 if (bio_add_page(bio, page, len, offset) < len) 521 if (bio_add_page(bio, page, len, offset) < len)
diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c
index 29704bda6394..a8329cc47dec 100644
--- a/fs/logfs/dev_bdev.c
+++ b/fs/logfs/dev_bdev.c
@@ -14,7 +14,7 @@
14 14
15#define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1)) 15#define PAGE_OFS(ofs) ((ofs) & (PAGE_SIZE-1))
16 16
17static int sync_request(struct page *page, struct block_device *bdev, int rw) 17static int sync_request(struct page *page, struct block_device *bdev, int op)
18{ 18{
19 struct bio bio; 19 struct bio bio;
20 struct bio_vec bio_vec; 20 struct bio_vec bio_vec;
@@ -29,7 +29,7 @@ static int sync_request(struct page *page, struct block_device *bdev, int rw)
29 bio.bi_bdev = bdev; 29 bio.bi_bdev = bdev;
30 bio.bi_iter.bi_sector = page->index * (PAGE_SIZE >> 9); 30 bio.bi_iter.bi_sector = page->index * (PAGE_SIZE >> 9);
31 bio.bi_iter.bi_size = PAGE_SIZE; 31 bio.bi_iter.bi_size = PAGE_SIZE;
32 bio.bi_rw = rw; 32 bio_set_op_attrs(&bio, op, 0);
33 33
34 return submit_bio_wait(&bio); 34 return submit_bio_wait(&bio);
35} 35}
@@ -96,7 +96,7 @@ static int __bdev_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
96 bio->bi_iter.bi_sector = ofs >> 9; 96 bio->bi_iter.bi_sector = ofs >> 9;
97 bio->bi_private = sb; 97 bio->bi_private = sb;
98 bio->bi_end_io = writeseg_end_io; 98 bio->bi_end_io = writeseg_end_io;
99 bio->bi_rw = WRITE; 99 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
100 atomic_inc(&super->s_pending_writes); 100 atomic_inc(&super->s_pending_writes);
101 submit_bio(bio); 101 submit_bio(bio);
102 102
@@ -124,7 +124,7 @@ static int __bdev_writeseg(struct super_block *sb, u64 ofs, pgoff_t index,
124 bio->bi_iter.bi_sector = ofs >> 9; 124 bio->bi_iter.bi_sector = ofs >> 9;
125 bio->bi_private = sb; 125 bio->bi_private = sb;
126 bio->bi_end_io = writeseg_end_io; 126 bio->bi_end_io = writeseg_end_io;
127 bio->bi_rw = WRITE; 127 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
128 atomic_inc(&super->s_pending_writes); 128 atomic_inc(&super->s_pending_writes);
129 submit_bio(bio); 129 submit_bio(bio);
130 return 0; 130 return 0;
@@ -188,7 +188,7 @@ static int do_erase(struct super_block *sb, u64 ofs, pgoff_t index,
188 bio->bi_iter.bi_sector = ofs >> 9; 188 bio->bi_iter.bi_sector = ofs >> 9;
189 bio->bi_private = sb; 189 bio->bi_private = sb;
190 bio->bi_end_io = erase_end_io; 190 bio->bi_end_io = erase_end_io;
191 bio->bi_rw = WRITE; 191 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
192 atomic_inc(&super->s_pending_writes); 192 atomic_inc(&super->s_pending_writes);
193 submit_bio(bio); 193 submit_bio(bio);
194 194
@@ -210,7 +210,7 @@ static int do_erase(struct super_block *sb, u64 ofs, pgoff_t index,
210 bio->bi_iter.bi_sector = ofs >> 9; 210 bio->bi_iter.bi_sector = ofs >> 9;
211 bio->bi_private = sb; 211 bio->bi_private = sb;
212 bio->bi_end_io = erase_end_io; 212 bio->bi_end_io = erase_end_io;
213 bio->bi_rw = WRITE; 213 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
214 atomic_inc(&super->s_pending_writes); 214 atomic_inc(&super->s_pending_writes);
215 submit_bio(bio); 215 submit_bio(bio);
216 return 0; 216 return 0;
diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index 4c79f4ddb052..f55a4e756047 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -107,7 +107,7 @@ bl_submit_bio(struct bio *bio)
107 if (bio) { 107 if (bio) {
108 get_parallel(bio->bi_private); 108 get_parallel(bio->bi_private);
109 dprintk("%s submitting %s bio %u@%llu\n", __func__, 109 dprintk("%s submitting %s bio %u@%llu\n", __func__,
110 bio->bi_rw == READ ? "read" : "write", 110 bio_op(bio) == READ ? "read" : "write",
111 bio->bi_iter.bi_size, 111 bio->bi_iter.bi_size,
112 (unsigned long long)bio->bi_iter.bi_sector); 112 (unsigned long long)bio->bi_iter.bi_sector);
113 submit_bio(bio); 113 submit_bio(bio);
@@ -175,7 +175,7 @@ retry:
175 disk_addr >> SECTOR_SHIFT, end_io, par); 175 disk_addr >> SECTOR_SHIFT, end_io, par);
176 if (!bio) 176 if (!bio)
177 return ERR_PTR(-ENOMEM); 177 return ERR_PTR(-ENOMEM);
178 bio->bi_rw = rw; 178 bio_set_op_attrs(bio, rw, 0);
179 } 179 }
180 if (bio_add_page(bio, page, *len, offset) < *len) { 180 if (bio_add_page(bio, page, *len, offset) < *len) {
181 bio = bl_submit_bio(bio); 181 bio = bl_submit_bio(bio);
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 09c5308494a6..4568647269a7 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -109,18 +109,23 @@ static inline bool bio_has_data(struct bio *bio)
109{ 109{
110 if (bio && 110 if (bio &&
111 bio->bi_iter.bi_size && 111 bio->bi_iter.bi_size &&
112 !(bio->bi_rw & REQ_DISCARD)) 112 bio_op(bio) != REQ_OP_DISCARD)
113 return true; 113 return true;
114 114
115 return false; 115 return false;
116} 116}
117 117
118static inline bool bio_no_advance_iter(struct bio *bio)
119{
120 return bio_op(bio) == REQ_OP_DISCARD || bio_op(bio) == REQ_OP_WRITE_SAME;
121}
122
118static inline bool bio_is_rw(struct bio *bio) 123static inline bool bio_is_rw(struct bio *bio)
119{ 124{
120 if (!bio_has_data(bio)) 125 if (!bio_has_data(bio))
121 return false; 126 return false;
122 127
123 if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) 128 if (bio_no_advance_iter(bio))
124 return false; 129 return false;
125 130
126 return true; 131 return true;
@@ -228,7 +233,7 @@ static inline void bio_advance_iter(struct bio *bio, struct bvec_iter *iter,
228{ 233{
229 iter->bi_sector += bytes >> 9; 234 iter->bi_sector += bytes >> 9;
230 235
231 if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) 236 if (bio_no_advance_iter(bio))
232 iter->bi_size -= bytes; 237 iter->bi_size -= bytes;
233 else 238 else
234 bvec_iter_advance(bio->bi_io_vec, iter, bytes); 239 bvec_iter_advance(bio->bi_io_vec, iter, bytes);
@@ -256,10 +261,10 @@ static inline unsigned bio_segments(struct bio *bio)
256 * differently: 261 * differently:
257 */ 262 */
258 263
259 if (bio->bi_rw & REQ_DISCARD) 264 if (bio_op(bio) == REQ_OP_DISCARD)
260 return 1; 265 return 1;
261 266
262 if (bio->bi_rw & REQ_WRITE_SAME) 267 if (bio_op(bio) == REQ_OP_WRITE_SAME)
263 return 1; 268 return 1;
264 269
265 bio_for_each_segment(bv, bio, iter) 270 bio_for_each_segment(bv, bio, iter)
diff --git a/mm/page_io.c b/mm/page_io.c
index 5a5fd66d7bd5..dcc5d3769608 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -317,7 +317,7 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc,
317 ret = -ENOMEM; 317 ret = -ENOMEM;
318 goto out; 318 goto out;
319 } 319 }
320 bio->bi_rw = WRITE; 320 bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
321 if (wbc->sync_mode == WB_SYNC_ALL) 321 if (wbc->sync_mode == WB_SYNC_ALL)
322 bio->bi_rw |= REQ_SYNC; 322 bio->bi_rw |= REQ_SYNC;
323 count_vm_event(PSWPOUT); 323 count_vm_event(PSWPOUT);
@@ -370,7 +370,7 @@ int swap_readpage(struct page *page)
370 ret = -ENOMEM; 370 ret = -ENOMEM;
371 goto out; 371 goto out;
372 } 372 }
373 bio->bi_rw = READ; 373 bio_set_op_attrs(bio, REQ_OP_READ, 0);
374 count_vm_event(PSWPIN); 374 count_vm_event(PSWPIN);
375 submit_bio(bio); 375 submit_bio(bio);
376out: 376out: