On (23/04/04 17:05), Christoph Hellwig wrote: > > writeback_store always reads a full page, so just call zram_read_page > directly and bypass the boune buffer handling. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx> > --- > drivers/block/zram/zram_drv.c | 16 +++++----------- > 1 file changed, 5 insertions(+), 11 deletions(-) > > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c > index 6187e41a346fd8..9d2b6ef4638903 100644 > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -54,9 +54,8 @@ static size_t huge_class_size; > static const struct block_device_operations zram_devops; > > static void zram_free_page(struct zram *zram, size_t index); > -static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, > - u32 index, int offset, struct bio *bio); > - > +static int zram_read_page(struct zram *zram, struct page *page, u32 index, > + struct bio *bio, bool partial_io); > > static int zram_slot_trylock(struct zram *zram, u32 index) > { > @@ -671,10 +670,6 @@ static ssize_t writeback_store(struct device *dev, > } > > for (; nr_pages != 0; index++, nr_pages--) { > - struct bio_vec bvec; > - > - bvec_set_page(&bvec, page, PAGE_SIZE, 0); > - > spin_lock(&zram->wb_limit_lock); > if (zram->wb_limit_enable && !zram->bd_wb_limit) { > spin_unlock(&zram->wb_limit_lock); > @@ -718,7 +713,7 @@ static ssize_t writeback_store(struct device *dev, > /* Need for hugepage writeback racing */ > zram_set_flag(zram, index, ZRAM_IDLE); > zram_slot_unlock(zram, index); > - if (zram_bvec_read(zram, &bvec, index, 0, NULL)) { > + if (zram_read_page(zram, page, index, NULL, false)) { In theory we can call zram_read_from_zspool() here, but zram_read_page() is fine with me. > zram_slot_lock(zram, index); > zram_clear_flag(zram, index, ZRAM_UNDER_WB); > zram_clear_flag(zram, index, ZRAM_IDLE); > @@ -729,9 +724,8 @@ static ssize_t writeback_store(struct device *dev, > bio_init(&bio, zram->bdev, &bio_vec, 1, > REQ_OP_WRITE | REQ_SYNC); > bio.bi_iter.bi_sector = blk_idx * (PAGE_SIZE >> 9); > - > - bio_add_page(&bio, bvec.bv_page, bvec.bv_len, > - bvec.bv_offset); > + bio_add_page(&bio, page, PAGE_SIZE, 0); > + > /* > * XXX: A single page IO would be inefficient for write > * but it would be not bad as starter. > -- > 2.39.2 >