On Thu, Mar 16, 2023 at 11:04:54AM +0100, Pankaj Raghav wrote: > It looks like this endio function is called when alloc_page is used (for > partial IO) to trigger writeback from the user space `echo "idle" > > /sys/block/zram0/writeback`. Yes. > I don't understand when you say the harm might not be horrible if we don't > call folio_endio here. Do you think it is just safe to remove the call to > folio_endio function? I suspect so. It doesn't seem like the involved pages are ever locked or have the writeback set, so it should be fine. > + while ((folio = readahead_folio(rac))) { > + folio_clear_uptodate(folio); > + folio_set_error(folio); > + folio_unlock(folio); > + } > + return; > + } > + > + while ((folio = readahead_folio(rac))) { > + folio_mark_uptodate(folio); > + folio_unlock(folio); > } > } Looks good. > @@ -59,7 +59,8 @@ static void mpage_end_io(struct bio *bio) > static struct bio *mpage_bio_submit(struct bio *bio) > { > - bio->bi_end_io = mpage_end_io; > + bio->bi_end_io = (op_is_write(bio_op(bio))) ? mpage_write_end_io : > + mpage_read_end_io; > guard_bio_eod(bio); > submit_bio(bio); > return NULL; > And mpage_{write,read}_end_io will iterate over the folio and call the > respective functions. Yes, although I'd do it with a good old if/else and with less braces. It might make sense to split mpage_bio_submit as well, though.