It regressed when buildbot tests run on it (hundreds of signing error messages logged as well) - so backed this patch out of for-next On Thu, Feb 25, 2021 at 12:44 PM Steve French <smfrench@xxxxxxxxx> wrote: > > Tentatively merged into cifs-2.6.git for-next, pending testing > > On Thu, Feb 4, 2021 at 12:49 AM Steve French <smfrench@xxxxxxxxx> wrote: > > > > (Another patch to make conversion to new netfs interfaces easier) > > > > Optimize read_page_from_socket by using an iov_iter > > > > Signed-off-by: David Howells <dhowells@xxxxxxxxxx> > > Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx> > > --- > > fs/cifs/cifsglob.h | 1 + > > fs/cifs/cifsproto.h | 3 +++ > > fs/cifs/connect.c | 16 ++++++++++++++++ > > fs/cifs/file.c | 3 +-- > > 4 files changed, 21 insertions(+), 2 deletions(-) > > > > diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h > > index 50fcb65920e8..73f80cc38316 100644 > > --- a/fs/cifs/cifsglob.h > > +++ b/fs/cifs/cifsglob.h > > @@ -1301,6 +1301,7 @@ struct cifs_readdata { > > int (*copy_into_pages)(struct TCP_Server_Info *server, > > struct cifs_readdata *rdata, > > struct iov_iter *iter); > > + struct iov_iter iter; > > struct kvec iov[2]; > > struct TCP_Server_Info *server; > > #ifdef CONFIG_CIFS_SMB_DIRECT > > diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h > > index 75ce6f742b8d..64eb5c817712 100644 > > --- a/fs/cifs/cifsproto.h > > +++ b/fs/cifs/cifsproto.h > > @@ -239,6 +239,9 @@ extern int cifs_read_page_from_socket(struct > > TCP_Server_Info *server, > > unsigned int page_offset, > > unsigned int to_read); > > extern int cifs_setup_cifs_sb(struct cifs_sb_info *cifs_sb); > > +extern int cifs_read_iter_from_socket(struct TCP_Server_Info *server, > > + struct iov_iter *iter, > > + unsigned int to_read); > > extern int cifs_match_super(struct super_block *, void *); > > extern int cifs_mount(struct cifs_sb_info *cifs_sb, struct > > smb3_fs_context *ctx); > > extern void cifs_umount(struct cifs_sb_info *); > > diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c > > index 943f4eba027d..7c8db233fba4 100644 > > --- a/fs/cifs/connect.c > > +++ b/fs/cifs/connect.c > > @@ -585,6 +585,22 @@ cifs_read_page_from_socket(struct TCP_Server_Info > > *server, struct page *page, > > return cifs_readv_from_socket(server, &smb_msg); > > } > > > > +int > > +cifs_read_iter_from_socket(struct TCP_Server_Info *server, struct > > iov_iter *iter, > > + unsigned int to_read) > > +{ > > + struct msghdr smb_msg; > > + int ret; > > + > > + smb_msg.msg_iter = *iter; > > + if (smb_msg.msg_iter.count > to_read) > > + smb_msg.msg_iter.count = to_read; > > + ret = cifs_readv_from_socket(server, &smb_msg); > > + if (ret > 0) > > + iov_iter_advance(iter, ret); > > + return ret; > > +} > > + > > static bool > > is_smb_response(struct TCP_Server_Info *server, unsigned char type) > > { > > diff --git a/fs/cifs/file.c b/fs/cifs/file.c > > index 6d001905c8e5..4b8c1ac58f00 100644 > > --- a/fs/cifs/file.c > > +++ b/fs/cifs/file.c > > @@ -4261,8 +4261,7 @@ readpages_fill_pages(struct TCP_Server_Info *server, > > result = n; > > #endif > > else > > - result = cifs_read_page_from_socket( > > - server, page, page_offset, n); > > + result = cifs_read_iter_from_socket(server, &rdata->iter, n); > > if (result < 0) > > break; > > > > > > -- > > Thanks, > > > > Steve > > > > -- > Thanks, > > Steve -- Thanks, Steve