zram_bvec_read() is called with the bio set to NULL only in writeback_store() function. When a writeback is triggered, zram_bvec_read() is called only if ZRAM_WB flag is not set. That will result only calling zram_read_from_zspool() in __zram_bvec_read(). rw_page callback used to call read_from_bdev_async with a NULL parent bio but that has been removed since commit 3222d8c2a7f8 ("block: remove ->rw_page"). We can now safely always call bio_chain() as read_from_bdev_async() will be called with a parent bio set. A WARN_ON_ONCE is added if this function is called with parent set to NULL. Signed-off-by: Pankaj Raghav <p.raghav@xxxxxxxxxxx> --- drivers/block/zram/zram_drv.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 3feadfb96114..d16d0630b178 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -606,15 +606,6 @@ static void free_block_bdev(struct zram *zram, unsigned long blk_idx) atomic64_dec(&zram->stats.bd_count); } -static void zram_page_end_io(struct bio *bio) -{ - struct page *page = bio_first_page_all(bio); - - page_endio(page, op_is_write(bio_op(bio)), - blk_status_to_errno(bio->bi_status)); - bio_put(bio); -} - /* * Returns 1 if the submission is successful. */ @@ -634,11 +625,10 @@ static int read_from_bdev_async(struct zram *zram, struct bio_vec *bvec, return -EIO; } - if (!parent) - bio->bi_end_io = zram_page_end_io; - else - bio_chain(bio, parent); + if (WARN_ON_ONCE(!parent)) + return -EINVAL; + bio_chain(bio, parent); submit_bio(bio); return 1; } -- 2.34.1