> Subject: Re: [Patch v2 02/15] CIFS: Add support for direct pages in rdata > > On 6/25/2018 5:01 PM, Jason Gunthorpe wrote: > > On Sat, Jun 23, 2018 at 09:50:20PM -0400, Tom Talpey wrote: > >> On 5/30/2018 3:47 PM, Long Li wrote: > >>> From: Long Li <longli@xxxxxxxxxxxxx> > >>> > >>> Add a function to allocate rdata without allocating pages for data > >>> transfer. This gives the caller an option to pass a number of pages > >>> that point to the data buffer. > >>> > >>> rdata is still reponsible for free those pages after it's done. > >> > >> "Caller" is still responsible? Or is the rdata somehow freeing itself > >> via another mechanism? > >> > >>> > >>> Signed-off-by: Long Li <longli@xxxxxxxxxxxxx> > >>> fs/cifs/cifsglob.h | 2 +- > >>> fs/cifs/file.c | 23 ++++++++++++++++++++--- > >>> 2 files changed, 21 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index > >>> 8d16c3e..56864a87 100644 > >>> +++ b/fs/cifs/cifsglob.h > >>> @@ -1179,7 +1179,7 @@ struct cifs_readdata { > >>> unsigned int tailsz; > >>> unsigned int credits; > >>> unsigned int nr_pages; > >>> - struct page *pages[]; > >>> + struct page **pages; > >> > >> Technically speaking, these are syntactically equivalent. It may not > >> be worth changing this historic definition. > > > > [] is a C99 'flex array', it has a different allocation behavior than > > ** and is not interchangeable.. > > In that case, it's an even better reason to not change the declaration. No, it needs to be declared separately. With Direct I/O, **pages are allocated and returned from iov_iter_get_pages_alloc() when locking those user pages. They can't be allocated as part of struct cifs_readdata. ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f