Re: [RFC PATCH 1/3] filemap: convert page_endio to folio_endio

From: Christoph Hellwig
Date: Thu Mar 16 2023 - 11:24:27 EST


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.