* [PATCH] cifs: convert readpages_fill_pages to use iter
@ 2021-02-04 6:49 Steve French
2021-02-25 18:44 ` Steve French
0 siblings, 1 reply; 3+ messages in thread
From: Steve French @ 2021-02-04 6:49 UTC (permalink / raw)
To: CIFS; +Cc: linux-fsdevel, David Howells
[-- Attachment #1: Type: text/plain, Size: 2669 bytes --]
(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@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
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
[-- Attachment #2: 0001-cifs-convert-readpages_fill_pages-to-use-iter.patch --]
[-- Type: text/x-patch, Size: 2854 bytes --]
From a4c963803ddf8c17f36913089965f0348e536330 Mon Sep 17 00:00:00 2001
From: David Howells <dhowells@redhat.com>
Date: Thu, 4 Feb 2021 00:44:04 -0600
Subject: [PATCH] cifs: convert readpages_fill_pages to use iter
Optimize read_page_from_socket by using an iov_iter
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
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;
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] cifs: convert readpages_fill_pages to use iter
2021-02-04 6:49 [PATCH] cifs: convert readpages_fill_pages to use iter Steve French
@ 2021-02-25 18:44 ` Steve French
2021-02-26 2:24 ` Steve French
0 siblings, 1 reply; 3+ messages in thread
From: Steve French @ 2021-02-25 18:44 UTC (permalink / raw)
To: CIFS; +Cc: linux-fsdevel, David Howells
Tentatively merged into cifs-2.6.git for-next, pending testing
On Thu, Feb 4, 2021 at 12:49 AM Steve French <smfrench@gmail.com> 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@redhat.com>
> Signed-off-by: Steve French <stfrench@microsoft.com>
> ---
> 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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] cifs: convert readpages_fill_pages to use iter
2021-02-25 18:44 ` Steve French
@ 2021-02-26 2:24 ` Steve French
0 siblings, 0 replies; 3+ messages in thread
From: Steve French @ 2021-02-26 2:24 UTC (permalink / raw)
To: CIFS; +Cc: linux-fsdevel, David Howells
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@gmail.com> wrote:
>
> Tentatively merged into cifs-2.6.git for-next, pending testing
>
> On Thu, Feb 4, 2021 at 12:49 AM Steve French <smfrench@gmail.com> 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@redhat.com>
> > Signed-off-by: Steve French <stfrench@microsoft.com>
> > ---
> > 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-02-26 2:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-04 6:49 [PATCH] cifs: convert readpages_fill_pages to use iter Steve French
2021-02-25 18:44 ` Steve French
2021-02-26 2:24 ` Steve French
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.