[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y+n0n2UE8BQa/OwW@infradead.org>
Date: Mon, 13 Feb 2023 00:28:15 -0800
From: Christoph Hellwig <hch@...radead.org>
To: David Howells <dhowells@...hat.com>
Cc: Jens Axboe <axboe@...nel.dk>, Al Viro <viro@...iv.linux.org.uk>,
Christoph Hellwig <hch@...radead.org>,
Matthew Wilcox <willy@...radead.org>, Jan Kara <jack@...e.cz>,
Jeff Layton <jlayton@...nel.org>,
David Hildenbrand <david@...hat.com>,
Jason Gunthorpe <jgg@...dia.com>,
Logan Gunthorpe <logang@...tatee.com>,
Hillf Danton <hdanton@...a.com>, linux-fsdevel@...r.kernel.org,
linux-block@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-mm@...ck.org, Christoph Hellwig <hch@....de>,
John Hubbard <jhubbard@...dia.com>
Subject: Re: [PATCH v13 03/12] splice: Do splice read from a buffered file
without using ITER_PIPE
> The code is loosely based on filemap_read() and might belong in
> mm/filemap.c with that as it needs to use filemap_get_pages().
Yes, I thunk it should go into filemap.c
> + while (spliced < size &&
> + !pipe_full(pipe->head, pipe->tail, pipe->max_usage)) {
> + struct pipe_buffer *buf = &pipe->bufs[pipe->head & (pipe->ring_size - 1)];
Can you please facto this calculation, that is also duplicated in patch
one into a helper?
static inline struct pipe_buffer *pipe_head_buf(struct pipe_inode_info *pipe)
{
return &pipe->bufs[pipe->head & (pipe->ring_size - 1)];
}
> + struct folio_batch fbatch;
> + size_t total_spliced = 0, used, npages;
> + loff_t isize, end_offset;
> + bool writably_mapped;
> + int i, error = 0;
> +
> + struct kiocb iocb = {
Why the empty line before this declaration?
> + .ki_filp = in,
> + .ki_pos = *ppos,
> + };
Also why doesn't this use init_sync_kiocb?
> if (in->f_flags & O_DIRECT)
> return generic_file_direct_splice_read(in, ppos, pipe, len, flags);
> + return generic_file_buffered_splice_read(in, ppos, pipe, len, flags);
Btw, can we drop the verbose generic_file_ prefix here?
generic_file_buffered_splice_read really should be filemap_splice_read
and be in filemap.c. generic_file_direct_splice_read I'd just name
direct_splice_read.
Powered by blists - more mailing lists