|
|
@@ -58,31 +58,15 @@ static void pmem_do_bvec(struct pmem_device *pmem, struct page *page,
|
|
|
|
|
|
static void pmem_make_request(struct request_queue *q, struct bio *bio)
|
|
|
{
|
|
|
- struct block_device *bdev = bio->bi_bdev;
|
|
|
- struct pmem_device *pmem = bdev->bd_disk->private_data;
|
|
|
- int rw;
|
|
|
struct bio_vec bvec;
|
|
|
- sector_t sector;
|
|
|
struct bvec_iter iter;
|
|
|
- int err = 0;
|
|
|
-
|
|
|
- if (bio_end_sector(bio) > get_capacity(bdev->bd_disk)) {
|
|
|
- err = -EIO;
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- BUG_ON(bio->bi_rw & REQ_DISCARD);
|
|
|
+ struct block_device *bdev = bio->bi_bdev;
|
|
|
+ struct pmem_device *pmem = bdev->bd_disk->private_data;
|
|
|
|
|
|
- rw = bio_data_dir(bio);
|
|
|
- sector = bio->bi_iter.bi_sector;
|
|
|
- bio_for_each_segment(bvec, bio, iter) {
|
|
|
+ bio_for_each_segment(bvec, bio, iter)
|
|
|
pmem_do_bvec(pmem, bvec.bv_page, bvec.bv_len, bvec.bv_offset,
|
|
|
- rw, sector);
|
|
|
- sector += bvec.bv_len >> 9;
|
|
|
- }
|
|
|
-
|
|
|
-out:
|
|
|
- bio_endio(bio, err);
|
|
|
+ bio_data_dir(bio), iter.bi_sector);
|
|
|
+ bio_endio(bio, 0);
|
|
|
}
|
|
|
|
|
|
static int pmem_rw_page(struct block_device *bdev, sector_t sector,
|