Re: [Patch v2 02/15] CIFS: Add support for direct pages in rdata

From: Tom Talpey
Date: Tue Jun 26 2018 - 11:21:10 EST


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.

Tom.