Skip to content

Commit abf5454

Browse files
Mike Christieaxboe
authored andcommitted
mm/block: convert rw_page users to bio op use
The rw_page users were not converted to use bio/req ops. As a result bdev_write_page is not passing down REQ_OP_WRITE and the IOs will be sent down as reads. Signed-off-by: Mike Christie <[email protected]> Fixes: 4e1b2d5 ("block, fs, drivers: remove REQ_OP compat defs and related code") Modified by me to: 1) Drop op_flags passing into ->rw_page(), as we don't use it. 2) Make op_is_write() and friends safe to use for !CONFIG_BLOCK Signed-off-by: Jens Axboe <[email protected]>
1 parent c1c87c2 commit abf5454

File tree

11 files changed

+60
-59
lines changed

11 files changed

+60
-59
lines changed

drivers/block/brd.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -300,20 +300,20 @@ static void copy_from_brd(void *dst, struct brd_device *brd,
300300
* Process a single bvec of a bio.
301301
*/
302302
static int brd_do_bvec(struct brd_device *brd, struct page *page,
303-
unsigned int len, unsigned int off, int rw,
303+
unsigned int len, unsigned int off, int op,
304304
sector_t sector)
305305
{
306306
void *mem;
307307
int err = 0;
308308

309-
if (rw != READ) {
309+
if (op_is_write(op)) {
310310
err = copy_to_brd_setup(brd, sector, len);
311311
if (err)
312312
goto out;
313313
}
314314

315315
mem = kmap_atomic(page);
316-
if (rw == READ) {
316+
if (!op_is_write(op)) {
317317
copy_from_brd(mem + off, brd, sector, len);
318318
flush_dcache_page(page);
319319
} else {
@@ -330,7 +330,6 @@ static blk_qc_t brd_make_request(struct request_queue *q, struct bio *bio)
330330
{
331331
struct block_device *bdev = bio->bi_bdev;
332332
struct brd_device *brd = bdev->bd_disk->private_data;
333-
int rw;
334333
struct bio_vec bvec;
335334
sector_t sector;
336335
struct bvec_iter iter;
@@ -347,14 +346,12 @@ static blk_qc_t brd_make_request(struct request_queue *q, struct bio *bio)
347346
goto out;
348347
}
349348

350-
rw = bio_data_dir(bio);
351-
352349
bio_for_each_segment(bvec, bio, iter) {
353350
unsigned int len = bvec.bv_len;
354351
int err;
355352

356353
err = brd_do_bvec(brd, bvec.bv_page, len,
357-
bvec.bv_offset, rw, sector);
354+
bvec.bv_offset, bio_op(bio), sector);
358355
if (err)
359356
goto io_error;
360357
sector += len >> SECTOR_SHIFT;
@@ -369,11 +366,11 @@ static blk_qc_t brd_make_request(struct request_queue *q, struct bio *bio)
369366
}
370367

371368
static int brd_rw_page(struct block_device *bdev, sector_t sector,
372-
struct page *page, int rw)
369+
struct page *page, int op)
373370
{
374371
struct brd_device *brd = bdev->bd_disk->private_data;
375-
int err = brd_do_bvec(brd, page, PAGE_SIZE, 0, rw, sector);
376-
page_endio(page, rw & WRITE, err);
372+
int err = brd_do_bvec(brd, page, PAGE_SIZE, 0, op, sector);
373+
page_endio(page, op, err);
377374
return err;
378375
}
379376

drivers/block/zram/zram_drv.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -843,26 +843,26 @@ static void zram_bio_discard(struct zram *zram, u32 index,
843843
}
844844

845845
static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
846-
int offset, int rw)
846+
int offset, int op)
847847
{
848848
unsigned long start_time = jiffies;
849849
int ret;
850850

851-
generic_start_io_acct(rw, bvec->bv_len >> SECTOR_SHIFT,
851+
generic_start_io_acct(op, bvec->bv_len >> SECTOR_SHIFT,
852852
&zram->disk->part0);
853853

854-
if (rw == READ) {
854+
if (!op_is_write(op)) {
855855
atomic64_inc(&zram->stats.num_reads);
856856
ret = zram_bvec_read(zram, bvec, index, offset);
857857
} else {
858858
atomic64_inc(&zram->stats.num_writes);
859859
ret = zram_bvec_write(zram, bvec, index, offset);
860860
}
861861

862-
generic_end_io_acct(rw, &zram->disk->part0, start_time);
862+
generic_end_io_acct(op, &zram->disk->part0, start_time);
863863

864864
if (unlikely(ret)) {
865-
if (rw == READ)
865+
if (!op_is_write(op))
866866
atomic64_inc(&zram->stats.failed_reads);
867867
else
868868
atomic64_inc(&zram->stats.failed_writes);
@@ -873,7 +873,7 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
873873

874874
static void __zram_make_request(struct zram *zram, struct bio *bio)
875875
{
876-
int offset, rw;
876+
int offset;
877877
u32 index;
878878
struct bio_vec bvec;
879879
struct bvec_iter iter;
@@ -888,7 +888,6 @@ static void __zram_make_request(struct zram *zram, struct bio *bio)
888888
return;
889889
}
890890

891-
rw = bio_data_dir(bio);
892891
bio_for_each_segment(bvec, bio, iter) {
893892
int max_transfer_size = PAGE_SIZE - offset;
894893

@@ -903,15 +902,18 @@ static void __zram_make_request(struct zram *zram, struct bio *bio)
903902
bv.bv_len = max_transfer_size;
904903
bv.bv_offset = bvec.bv_offset;
905904

906-
if (zram_bvec_rw(zram, &bv, index, offset, rw) < 0)
905+
if (zram_bvec_rw(zram, &bv, index, offset,
906+
bio_op(bio)) < 0)
907907
goto out;
908908

909909
bv.bv_len = bvec.bv_len - max_transfer_size;
910910
bv.bv_offset += max_transfer_size;
911-
if (zram_bvec_rw(zram, &bv, index + 1, 0, rw) < 0)
911+
if (zram_bvec_rw(zram, &bv, index + 1, 0,
912+
bio_op(bio)) < 0)
912913
goto out;
913914
} else
914-
if (zram_bvec_rw(zram, &bvec, index, offset, rw) < 0)
915+
if (zram_bvec_rw(zram, &bvec, index, offset,
916+
bio_op(bio)) < 0)
915917
goto out;
916918

917919
update_position(&index, &offset, &bvec);
@@ -968,7 +970,7 @@ static void zram_slot_free_notify(struct block_device *bdev,
968970
}
969971

970972
static int zram_rw_page(struct block_device *bdev, sector_t sector,
971-
struct page *page, int rw)
973+
struct page *page, int op)
972974
{
973975
int offset, err = -EIO;
974976
u32 index;
@@ -992,7 +994,7 @@ static int zram_rw_page(struct block_device *bdev, sector_t sector,
992994
bv.bv_len = PAGE_SIZE;
993995
bv.bv_offset = 0;
994996

995-
err = zram_bvec_rw(zram, &bv, index, offset, rw);
997+
err = zram_bvec_rw(zram, &bv, index, offset, op);
996998
put_zram:
997999
zram_meta_put(zram);
9981000
out:
@@ -1005,7 +1007,7 @@ static int zram_rw_page(struct block_device *bdev, sector_t sector,
10051007
* (e.g., SetPageError, set_page_dirty and extra works).
10061008
*/
10071009
if (err == 0)
1008-
page_endio(page, rw, 0);
1010+
page_endio(page, op, 0);
10091011
return err;
10101012
}
10111013

drivers/nvdimm/btt.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,11 +1133,11 @@ static int btt_write_pg(struct btt *btt, struct bio_integrity_payload *bip,
11331133

11341134
static int btt_do_bvec(struct btt *btt, struct bio_integrity_payload *bip,
11351135
struct page *page, unsigned int len, unsigned int off,
1136-
int rw, sector_t sector)
1136+
int op, sector_t sector)
11371137
{
11381138
int ret;
11391139

1140-
if (rw == READ) {
1140+
if (!op_is_write(op)) {
11411141
ret = btt_read_pg(btt, bip, page, off, sector, len);
11421142
flush_dcache_page(page);
11431143
} else {
@@ -1155,7 +1155,7 @@ static blk_qc_t btt_make_request(struct request_queue *q, struct bio *bio)
11551155
struct bvec_iter iter;
11561156
unsigned long start;
11571157
struct bio_vec bvec;
1158-
int err = 0, rw;
1158+
int err = 0;
11591159
bool do_acct;
11601160

11611161
/*
@@ -1170,7 +1170,6 @@ static blk_qc_t btt_make_request(struct request_queue *q, struct bio *bio)
11701170
}
11711171

11721172
do_acct = nd_iostat_start(bio, &start);
1173-
rw = bio_data_dir(bio);
11741173
bio_for_each_segment(bvec, bio, iter) {
11751174
unsigned int len = bvec.bv_len;
11761175

@@ -1181,11 +1180,12 @@ static blk_qc_t btt_make_request(struct request_queue *q, struct bio *bio)
11811180
BUG_ON(len % btt->sector_size);
11821181

11831182
err = btt_do_bvec(btt, bip, bvec.bv_page, len, bvec.bv_offset,
1184-
rw, iter.bi_sector);
1183+
bio_op(bio), iter.bi_sector);
11851184
if (err) {
11861185
dev_info(&btt->nd_btt->dev,
11871186
"io error in %s sector %lld, len %d,\n",
1188-
(rw == READ) ? "READ" : "WRITE",
1187+
(op_is_write(bio_op(bio))) ? "WRITE" :
1188+
"READ",
11891189
(unsigned long long) iter.bi_sector, len);
11901190
bio->bi_error = err;
11911191
break;
@@ -1200,12 +1200,12 @@ static blk_qc_t btt_make_request(struct request_queue *q, struct bio *bio)
12001200
}
12011201

12021202
static int btt_rw_page(struct block_device *bdev, sector_t sector,
1203-
struct page *page, int rw)
1203+
struct page *page, int op)
12041204
{
12051205
struct btt *btt = bdev->bd_disk->private_data;
12061206

1207-
btt_do_bvec(btt, NULL, page, PAGE_SIZE, 0, rw, sector);
1208-
page_endio(page, rw & WRITE, 0);
1207+
btt_do_bvec(btt, NULL, page, PAGE_SIZE, 0, op, sector);
1208+
page_endio(page, op, 0);
12091209
return 0;
12101210
}
12111211

drivers/nvdimm/pmem.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static void pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset,
6767
}
6868

6969
static int pmem_do_bvec(struct pmem_device *pmem, struct page *page,
70-
unsigned int len, unsigned int off, int rw,
70+
unsigned int len, unsigned int off, int op,
7171
sector_t sector)
7272
{
7373
int rc = 0;
@@ -79,7 +79,7 @@ static int pmem_do_bvec(struct pmem_device *pmem, struct page *page,
7979
if (unlikely(is_bad_pmem(&pmem->bb, sector, len)))
8080
bad_pmem = true;
8181

82-
if (rw == READ) {
82+
if (!op_is_write(op)) {
8383
if (unlikely(bad_pmem))
8484
rc = -EIO;
8585
else {
@@ -134,7 +134,7 @@ static blk_qc_t pmem_make_request(struct request_queue *q, struct bio *bio)
134134
do_acct = nd_iostat_start(bio, &start);
135135
bio_for_each_segment(bvec, bio, iter) {
136136
rc = pmem_do_bvec(pmem, bvec.bv_page, bvec.bv_len,
137-
bvec.bv_offset, bio_data_dir(bio),
137+
bvec.bv_offset, bio_op(bio),
138138
iter.bi_sector);
139139
if (rc) {
140140
bio->bi_error = rc;
@@ -152,12 +152,12 @@ static blk_qc_t pmem_make_request(struct request_queue *q, struct bio *bio)
152152
}
153153

154154
static int pmem_rw_page(struct block_device *bdev, sector_t sector,
155-
struct page *page, int rw)
155+
struct page *page, int op)
156156
{
157157
struct pmem_device *pmem = bdev->bd_queue->queuedata;
158158
int rc;
159159

160-
rc = pmem_do_bvec(pmem, page, PAGE_SIZE, 0, rw, sector);
160+
rc = pmem_do_bvec(pmem, page, PAGE_SIZE, 0, op, sector);
161161

162162
/*
163163
* The ->rw_page interface is subtle and tricky. The core
@@ -166,7 +166,7 @@ static int pmem_rw_page(struct block_device *bdev, sector_t sector,
166166
* caused by double completion.
167167
*/
168168
if (rc == 0)
169-
page_endio(page, rw & WRITE, 0);
169+
page_endio(page, op, 0);
170170

171171
return rc;
172172
}

fs/block_dev.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ int bdev_read_page(struct block_device *bdev, sector_t sector,
416416
result = blk_queue_enter(bdev->bd_queue, false);
417417
if (result)
418418
return result;
419-
result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, READ);
419+
result = ops->rw_page(bdev, sector + get_start_sect(bdev), page,
420+
REQ_OP_READ);
420421
blk_queue_exit(bdev->bd_queue);
421422
return result;
422423
}
@@ -445,7 +446,6 @@ int bdev_write_page(struct block_device *bdev, sector_t sector,
445446
struct page *page, struct writeback_control *wbc)
446447
{
447448
int result;
448-
int rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE;
449449
const struct block_device_operations *ops = bdev->bd_disk->fops;
450450

451451
if (!ops->rw_page || bdev_get_integrity(bdev))
@@ -455,7 +455,8 @@ int bdev_write_page(struct block_device *bdev, sector_t sector,
455455
return result;
456456

457457
set_page_writeback(page);
458-
result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, rw);
458+
result = ops->rw_page(bdev, sector + get_start_sect(bdev), page,
459+
REQ_OP_WRITE);
459460
if (result)
460461
end_page_writeback(page);
461462
else

fs/mpage.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static void mpage_end_io(struct bio *bio)
5050

5151
bio_for_each_segment_all(bv, bio, i) {
5252
struct page *page = bv->bv_page;
53-
page_endio(page, bio_data_dir(bio), bio->bi_error);
53+
page_endio(page, bio_op(bio), bio->bi_error);
5454
}
5555

5656
bio_put(bio);

include/linux/blk_types.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@ struct cgroup_subsys_state;
1818
typedef void (bio_end_io_t) (struct bio *);
1919
typedef void (bio_destructor_t) (struct bio *);
2020

21+
enum req_op {
22+
REQ_OP_READ,
23+
REQ_OP_WRITE,
24+
REQ_OP_DISCARD, /* request to discard sectors */
25+
REQ_OP_SECURE_ERASE, /* request to securely erase sectors */
26+
REQ_OP_WRITE_SAME, /* write same block many times */
27+
REQ_OP_FLUSH, /* request for cache flush */
28+
};
29+
30+
#define REQ_OP_BITS 3
31+
2132
#ifdef CONFIG_BLOCK
2233
/*
2334
* main unit of I/O for the block layer and lower layers (ie drivers and
@@ -228,17 +239,6 @@ enum rq_flag_bits {
228239
#define REQ_HASHED (1ULL << __REQ_HASHED)
229240
#define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT)
230241

231-
enum req_op {
232-
REQ_OP_READ,
233-
REQ_OP_WRITE,
234-
REQ_OP_DISCARD, /* request to discard sectors */
235-
REQ_OP_SECURE_ERASE, /* request to securely erase sectors */
236-
REQ_OP_WRITE_SAME, /* write same block many times */
237-
REQ_OP_FLUSH, /* request for cache flush */
238-
};
239-
240-
#define REQ_OP_BITS 3
241-
242242
typedef unsigned int blk_qc_t;
243243
#define BLK_QC_T_NONE -1U
244244
#define BLK_QC_T_SHIFT 16

include/linux/blkdev.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,7 @@ struct blk_dax_ctl {
16721672
struct block_device_operations {
16731673
int (*open) (struct block_device *, fmode_t);
16741674
void (*release) (struct gendisk *, fmode_t);
1675-
int (*rw_page)(struct block_device *, sector_t, struct page *, int rw);
1675+
int (*rw_page)(struct block_device *, sector_t, struct page *, int op);
16761676
int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
16771677
int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
16781678
long (*direct_access)(struct block_device *, sector_t, void **, pfn_t *,

include/linux/fs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2480,12 +2480,13 @@ extern void init_special_inode(struct inode *, umode_t, dev_t);
24802480
extern void make_bad_inode(struct inode *);
24812481
extern bool is_bad_inode(struct inode *);
24822482

2483-
#ifdef CONFIG_BLOCK
24842483
static inline bool op_is_write(unsigned int op)
24852484
{
24862485
return op == REQ_OP_READ ? false : true;
24872486
}
24882487

2488+
#ifdef CONFIG_BLOCK
2489+
24892490
/*
24902491
* return data direction, READ or WRITE
24912492
*/

include/linux/pagemap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ static inline void wait_on_page_writeback(struct page *page)
510510
extern void end_page_writeback(struct page *page);
511511
void wait_for_stable_page(struct page *page);
512512

513-
void page_endio(struct page *page, int rw, int err);
513+
void page_endio(struct page *page, int op, int err);
514514

515515
/*
516516
* Add an arbitrary waiter to a page's wait queue

0 commit comments

Comments
 (0)