summaryrefslogtreecommitdiffstats
path: root/drivers/nvdimm/pmem.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2016-08-05 10:11:04 -0400
committerJens Axboe <axboe@fb.com>2016-08-07 16:41:02 -0400
commitc11f0c0b5bb949673e4fc16c742f0316ae4ced20 (patch)
tree86b0c6102a4b01c4609a199b783f990e78959b72 /drivers/nvdimm/pmem.c
parent52ddb7e9dd735c1a10722c58d3e069af4d3e6df2 (diff)
block/mm: make bdev_ops->rw_page() take a bool for read/write
Commit abf545484d31 changed it from an 'rw' flags type to the newer ops based interface, but now we're effectively leaking some bdev internals to the rest of the kernel. Since we only care about whether it's a read or a write at that level, just pass in a bool 'is_write' parameter instead. Then we can also move op_is_write() and friends back under CONFIG_BLOCK protection. Reviewed-by: Mike Christie <mchristi@redhat.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/nvdimm/pmem.c')
-rw-r--r--drivers/nvdimm/pmem.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index d64d92481c1d..20bae50c231d 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -67,7 +67,7 @@ static void pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset,
67} 67}
68 68
69static int pmem_do_bvec(struct pmem_device *pmem, struct page *page, 69static int pmem_do_bvec(struct pmem_device *pmem, struct page *page,
70 unsigned int len, unsigned int off, int op, 70 unsigned int len, unsigned int off, bool is_write,
71 sector_t sector) 71 sector_t sector)
72{ 72{
73 int rc = 0; 73 int rc = 0;
@@ -79,7 +79,7 @@ static int pmem_do_bvec(struct pmem_device *pmem, struct page *page,
79 if (unlikely(is_bad_pmem(&pmem->bb, sector, len))) 79 if (unlikely(is_bad_pmem(&pmem->bb, sector, len)))
80 bad_pmem = true; 80 bad_pmem = true;
81 81
82 if (!op_is_write(op)) { 82 if (!is_write) {
83 if (unlikely(bad_pmem)) 83 if (unlikely(bad_pmem))
84 rc = -EIO; 84 rc = -EIO;
85 else { 85 else {
@@ -134,7 +134,7 @@ static blk_qc_t pmem_make_request(struct request_queue *q, struct bio *bio)
134 do_acct = nd_iostat_start(bio, &start); 134 do_acct = nd_iostat_start(bio, &start);
135 bio_for_each_segment(bvec, bio, iter) { 135 bio_for_each_segment(bvec, bio, iter) {
136 rc = pmem_do_bvec(pmem, bvec.bv_page, bvec.bv_len, 136 rc = pmem_do_bvec(pmem, bvec.bv_page, bvec.bv_len,
137 bvec.bv_offset, bio_op(bio), 137 bvec.bv_offset, op_is_write(bio_op(bio)),
138 iter.bi_sector); 138 iter.bi_sector);
139 if (rc) { 139 if (rc) {
140 bio->bi_error = rc; 140 bio->bi_error = rc;
@@ -152,12 +152,12 @@ static blk_qc_t pmem_make_request(struct request_queue *q, struct bio *bio)
152} 152}
153 153
154static int pmem_rw_page(struct block_device *bdev, sector_t sector, 154static int pmem_rw_page(struct block_device *bdev, sector_t sector,
155 struct page *page, int op) 155 struct page *page, bool is_write)
156{ 156{
157 struct pmem_device *pmem = bdev->bd_queue->queuedata; 157 struct pmem_device *pmem = bdev->bd_queue->queuedata;
158 int rc; 158 int rc;
159 159
160 rc = pmem_do_bvec(pmem, page, PAGE_SIZE, 0, op, sector); 160 rc = pmem_do_bvec(pmem, page, PAGE_SIZE, 0, is_write, sector);
161 161
162 /* 162 /*
163 * The ->rw_page interface is subtle and tricky. The core 163 * 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,
166 * caused by double completion. 166 * caused by double completion.
167 */ 167 */
168 if (rc == 0) 168 if (rc == 0)
169 page_endio(page, op, 0); 169 page_endio(page, is_write, 0);
170 170
171 return rc; 171 return rc;
172} 172}