}
 
 static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec,
-                         u32 index, int offset, struct bio *bio)
+                         u32 index, int offset)
 {
        int ret;
        struct page *page;
 }
 
 static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
-                       int offset, struct bio *bio)
+                       int offset, int rw)
 {
        int ret;
-       int rw = bio_data_dir(bio);
 
        if (rw == READ) {
                atomic64_inc(&zram->stats.num_reads);
-               ret = zram_bvec_read(zram, bvec, index, offset, bio);
+               ret = zram_bvec_read(zram, bvec, index, offset);
        } else {
                atomic64_inc(&zram->stats.num_writes);
                ret = zram_bvec_write(zram, bvec, index, offset);
 
 static void __zram_make_request(struct zram *zram, struct bio *bio)
 {
-       int offset;
+       int offset, rw;
        u32 index;
        struct bio_vec bvec;
        struct bvec_iter iter;
                return;
        }
 
+       rw = bio_data_dir(bio);
        bio_for_each_segment(bvec, bio, iter) {
                int max_transfer_size = PAGE_SIZE - offset;
 
                        bv.bv_len = max_transfer_size;
                        bv.bv_offset = bvec.bv_offset;
 
-                       if (zram_bvec_rw(zram, &bv, index, offset, bio) < 0)
+                       if (zram_bvec_rw(zram, &bv, index, offset, rw) < 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, bio) < 0)
+                       if (zram_bvec_rw(zram, &bv, index + 1, 0, rw) < 0)
                                goto out;
                } else
-                       if (zram_bvec_rw(zram, &bvec, index, offset, bio) < 0)
+                       if (zram_bvec_rw(zram, &bvec, index, offset, rw) < 0)
                                goto out;
 
                update_position(&index, &offset, &bvec);