Re: [PATCH v14 01/12] splice: Fix O_DIRECT file read splice to avoid reversion of ITER_PIPE

From: Christoph Hellwig
Date: Mon Feb 13 2023 - 03:22:55 EST


> + if (!bv)
> + return -ENOMEM;
> +
> + pages = (void *)(bv + npages);

I think this cast should be to struct page **… not void *.

> + npages = alloc_pages_bulk_array(GFP_USER, npages, pages);
> + if (!npages) {
> + kfree(bv);
> + return -ENOMEM;
> + }

> + reclaim = npages * PAGE_SIZE;
> + remain = 0;
> + if (ret > 0) {
> + reclaim -= ret;
> + remain = ret;

...

> + /* Free any pages that didn't get touched at all. */
> + reclaim /= PAGE_SIZE;

Any reason not to keep reclaim in PAGE_SIZE units to start with?