]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/block/zram/zram_drv.c
block/mm: make bdev_ops->rw_page() take a bool for read/write
[karo-tx-linux.git] / drivers / block / zram / zram_drv.c
index 7454cf188c8e24bafe0815b4c289ed01545c1be3..04365b17ee67fe668f4bfc1f5683846af999009a 100644 (file)
@@ -843,15 +843,16 @@ 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, bool is_write)
 {
        unsigned long start_time = jiffies;
+       int rw_acct = is_write ? REQ_OP_WRITE : REQ_OP_READ;
        int ret;
 
-       generic_start_io_acct(rw, bvec->bv_len >> SECTOR_SHIFT,
+       generic_start_io_acct(rw_acct, bvec->bv_len >> SECTOR_SHIFT,
                        &zram->disk->part0);
 
-       if (rw == READ) {
+       if (!is_write) {
                atomic64_inc(&zram->stats.num_reads);
                ret = zram_bvec_read(zram, bvec, index, offset);
        } else {
@@ -859,10 +860,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(rw_acct, &zram->disk->part0, start_time);
 
        if (unlikely(ret)) {
-               if (rw == READ)
+               if (!is_write)
                        atomic64_inc(&zram->stats.failed_reads);
                else
                        atomic64_inc(&zram->stats.failed_writes);
@@ -873,7 +874,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 +889,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 +903,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,
+                                        op_is_write(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,
+                                        op_is_write(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,
+                                        op_is_write(bio_op(bio))) < 0)
                                goto out;
 
                update_position(&index, &offset, &bvec);
@@ -968,7 +971,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, bool is_write)
 {
        int offset, err = -EIO;
        u32 index;
@@ -992,7 +995,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, is_write);
 put_zram:
        zram_meta_put(zram);
 out:
@@ -1005,7 +1008,7 @@ out:
         * (e.g., SetPageError, set_page_dirty and extra works).
         */
        if (err == 0)
-               page_endio(page, rw, 0);
+               page_endio(page, is_write, 0);
        return err;
 }