|
@@ -843,15 +843,15 @@ static void zram_bio_discard(struct zram *zram, u32 index,
|
|
|
}
|
|
|
|
|
|
static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
|
|
|
- int offset, int rw)
|
|
|
+ int offset, int op)
|
|
|
{
|
|
|
unsigned long start_time = jiffies;
|
|
|
int ret;
|
|
|
|
|
|
- generic_start_io_acct(rw, bvec->bv_len >> SECTOR_SHIFT,
|
|
|
+ generic_start_io_acct(op, bvec->bv_len >> SECTOR_SHIFT,
|
|
|
&zram->disk->part0);
|
|
|
|
|
|
- if (rw == READ) {
|
|
|
+ if (!op_is_write(op)) {
|
|
|
atomic64_inc(&zram->stats.num_reads);
|
|
|
ret = zram_bvec_read(zram, bvec, index, offset);
|
|
|
} else {
|
|
@@ -859,10 +859,10 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
|
|
|
ret = zram_bvec_write(zram, bvec, index, offset);
|
|
|
}
|
|
|
|
|
|
- generic_end_io_acct(rw, &zram->disk->part0, start_time);
|
|
|
+ generic_end_io_acct(op, &zram->disk->part0, start_time);
|
|
|
|
|
|
if (unlikely(ret)) {
|
|
|
- if (rw == READ)
|
|
|
+ if (!op_is_write(op))
|
|
|
atomic64_inc(&zram->stats.failed_reads);
|
|
|
else
|
|
|
atomic64_inc(&zram->stats.failed_writes);
|
|
@@ -873,7 +873,7 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
|
|
|
|
|
|
static void __zram_make_request(struct zram *zram, struct bio *bio)
|
|
|
{
|
|
|
- int offset, rw;
|
|
|
+ int offset;
|
|
|
u32 index;
|
|
|
struct bio_vec bvec;
|
|
|
struct bvec_iter iter;
|
|
@@ -888,7 +888,6 @@ static void __zram_make_request(struct zram *zram, struct bio *bio)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- rw = bio_data_dir(bio);
|
|
|
bio_for_each_segment(bvec, bio, iter) {
|
|
|
int max_transfer_size = PAGE_SIZE - offset;
|
|
|
|
|
@@ -903,15 +902,18 @@ static void __zram_make_request(struct zram *zram, struct bio *bio)
|
|
|
bv.bv_len = max_transfer_size;
|
|
|
bv.bv_offset = bvec.bv_offset;
|
|
|
|
|
|
- if (zram_bvec_rw(zram, &bv, index, offset, rw) < 0)
|
|
|
+ if (zram_bvec_rw(zram, &bv, index, offset,
|
|
|
+ bio_op(bio)) < 0)
|
|
|
goto out;
|
|
|
|
|
|
bv.bv_len = bvec.bv_len - max_transfer_size;
|
|
|
bv.bv_offset += max_transfer_size;
|
|
|
- if (zram_bvec_rw(zram, &bv, index + 1, 0, rw) < 0)
|
|
|
+ if (zram_bvec_rw(zram, &bv, index + 1, 0,
|
|
|
+ bio_op(bio)) < 0)
|
|
|
goto out;
|
|
|
} else
|
|
|
- if (zram_bvec_rw(zram, &bvec, index, offset, rw) < 0)
|
|
|
+ if (zram_bvec_rw(zram, &bvec, index, offset,
|
|
|
+ bio_op(bio)) < 0)
|
|
|
goto out;
|
|
|
|
|
|
update_position(&index, &offset, &bvec);
|
|
@@ -968,7 +970,7 @@ static void zram_slot_free_notify(struct block_device *bdev,
|
|
|
}
|
|
|
|
|
|
static int zram_rw_page(struct block_device *bdev, sector_t sector,
|
|
|
- struct page *page, int rw)
|
|
|
+ struct page *page, int op)
|
|
|
{
|
|
|
int offset, err = -EIO;
|
|
|
u32 index;
|
|
@@ -992,7 +994,7 @@ static int zram_rw_page(struct block_device *bdev, sector_t sector,
|
|
|
bv.bv_len = PAGE_SIZE;
|
|
|
bv.bv_offset = 0;
|
|
|
|
|
|
- err = zram_bvec_rw(zram, &bv, index, offset, rw);
|
|
|
+ err = zram_bvec_rw(zram, &bv, index, offset, op);
|
|
|
put_zram:
|
|
|
zram_meta_put(zram);
|
|
|
out:
|
|
@@ -1005,7 +1007,7 @@ out:
|
|
|
* (e.g., SetPageError, set_page_dirty and extra works).
|
|
|
*/
|
|
|
if (err == 0)
|
|
|
- page_endio(page, rw, 0);
|
|
|
+ page_endio(page, op, 0);
|
|
|
return err;
|
|
|
}
|
|
|
|