Re: [PATCH] cifs: convert readpages_fill_pages to use iter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux