Message ID | 20200822042059.1805541-6-jhubbard@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | bio: Direct IO: convert to pin_user_pages_fast() | expand |
On Fri, 2020-08-21 at 21:20 -0700, John Hubbard wrote: > This reduces, by one, the number of callers of iov_iter_get_pages(). > That's helpful because these calls are being audited and converted over > to use iov_iter_pin_user_pages(), where applicable. And this one here is > already known by the caller to be only for ITER_PIPE, so let's just > simplify it now. > > Signed-off-by: John Hubbard <jhubbard@nvidia.com> > --- > fs/ceph/file.c | 3 +-- > include/linux/uio.h | 3 ++- > lib/iov_iter.c | 6 +++--- > 3 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/ceph/file.c b/fs/ceph/file.c > index d51c3f2fdca0..d3d7dd957390 100644 > --- a/fs/ceph/file.c > +++ b/fs/ceph/file.c > @@ -879,8 +879,7 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to, > more = len < iov_iter_count(to); > > if (unlikely(iov_iter_is_pipe(to))) { > - ret = iov_iter_get_pages_alloc(to, &pages, len, > - &page_off); > + ret = pipe_get_pages_alloc(to, &pages, len, &page_off); > if (ret <= 0) { > ceph_osdc_put_request(req); > ret = -ENOMEM; > diff --git a/include/linux/uio.h b/include/linux/uio.h > index 62bcf5e45f2b..76cd47ab3dfd 100644 > --- a/include/linux/uio.h > +++ b/include/linux/uio.h > @@ -227,7 +227,8 @@ ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages, > ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages, > size_t maxsize, size_t *start); > int iov_iter_npages(const struct iov_iter *i, int maxpages); > - > +ssize_t pipe_get_pages_alloc(struct iov_iter *i, struct page ***pages, > + size_t maxsize, size_t *start); > const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags); > > ssize_t iov_iter_pin_user_pages(struct bio *bio, struct iov_iter *i, struct page **pages, > diff --git a/lib/iov_iter.c b/lib/iov_iter.c > index a4bc1b3a3fda..f571fe3ddbe8 100644 > --- a/lib/iov_iter.c > +++ b/lib/iov_iter.c > @@ -1396,9 +1396,8 @@ static struct page **get_pages_array(size_t n) > return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL); > } > > -static ssize_t pipe_get_pages_alloc(struct iov_iter *i, > - struct page ***pages, size_t maxsize, > - size_t *start) > +ssize_t pipe_get_pages_alloc(struct iov_iter *i, struct page ***pages, > + size_t maxsize, size_t *start) > { > struct page **p; > unsigned int iter_head, npages; > @@ -1428,6 +1427,7 @@ static ssize_t pipe_get_pages_alloc(struct iov_iter *i, > kvfree(p); > return n; > } > +EXPORT_SYMBOL(pipe_get_pages_alloc); > > ssize_t iov_iter_pin_user_pages_alloc(struct bio *bio, struct iov_iter *i, > struct page ***pages, size_t maxsize, This looks fine to me. Let me know if you need this merged via the ceph tree. Thanks! Acked-by: Jeff Layton <jlayton@kernel.org>
On 8/24/20 3:53 AM, Jeff Layton wrote: > > This looks fine to me. Let me know if you need this merged via the ceph > tree. Thanks! > > Acked-by: Jeff Layton <jlayton@kernel.org> > Yes, please! It will get proper testing that way, and it doesn't have any prerequisites, despite being part of this series. So it would be great to go in via the ceph tree. For the main series here, I'll send a v2 with only patches 1-3, once enough feedback has happened. thanks,
On Mon, 2020-08-24 at 10:54 -0700, John Hubbard wrote: > On 8/24/20 3:53 AM, Jeff Layton wrote: > > This looks fine to me. Let me know if you need this merged via the ceph > > tree. Thanks! > > > > Acked-by: Jeff Layton <jlayton@kernel.org> > > > > Yes, please! It will get proper testing that way, and it doesn't have > any prerequisites, despite being part of this series. So it would be > great to go in via the ceph tree. > > For the main series here, I'll send a v2 with only patches 1-3, once > enough feedback has happened. > Ok, I'll plan to pick it up providing no one has issues with exporting that symbol. Thanks!
On Mon, Aug 24, 2020 at 02:47:53PM -0400, Jeff Layton wrote:
> Ok, I'll plan to pick it up providing no one has issues with exporting that symbol.
_GPL, perhaps?
On 8/24/20 11:54 AM, Matthew Wilcox wrote: > On Mon, Aug 24, 2020 at 02:47:53PM -0400, Jeff Layton wrote: >> Ok, I'll plan to pick it up providing no one has issues with exporting that symbol. > > _GPL, perhaps? > DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1598295688; bh=TGtHrKY9YE9vgbD3P6YUTHn7yhP+gCmFr3Z8XIdh17s=; h=X-PGP-Universal:Subject:To:CC:References:From:Message-ID:Date: User-Agent:MIME-Version:In-Reply-To:X-Originating-IP: X-ClientProxiedBy:Content-Type:Content-Language: Content-Transfer-Encoding; b=KWZ+bMZ8RXIxd4CMBL8Dn6hn0ggsojx1vJaaueo+/+Xwe0yKBa+bMZfnn1XUDWvJs KMZJ22FgEdc+HO/8Mx0JKVQsLfKj74dwj3kGjs1z0KA5Vcnx93pzd/iMXDFhClf3uz KmyGEdar0p6poBaBOlsapOb59acP6ot16rhi7ZbTch+7ErO/Rupx6VinU1A2Ydc3OP mBYXZqz35DZ/H5eqhoE84MuOFj8Ti/Wpen637pLLa5dmtXjSMRmYTQXMRygUmQXdaw g9XLuqaxKRxp2lnuoVdFK0T90Hfu/71T+S8asZZYhH9zHY2Wzhgp1VkR07ZtXmMNqI W/lB00RAVtj3Q== I looked at that, and the equivalent iov_iter_get_pages* and related stuff was just EXPORT_SYMBOL, so I tried to match that. But if it needs to be _GPL then that's fine too... thanks,
diff --git a/fs/ceph/file.c b/fs/ceph/file.c index d51c3f2fdca0..d3d7dd957390 100644 --- a/fs/ceph/file.c +++ b/fs/ceph/file.c @@ -879,8 +879,7 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to, more = len < iov_iter_count(to); if (unlikely(iov_iter_is_pipe(to))) { - ret = iov_iter_get_pages_alloc(to, &pages, len, - &page_off); + ret = pipe_get_pages_alloc(to, &pages, len, &page_off); if (ret <= 0) { ceph_osdc_put_request(req); ret = -ENOMEM; diff --git a/include/linux/uio.h b/include/linux/uio.h index 62bcf5e45f2b..76cd47ab3dfd 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -227,7 +227,8 @@ ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages, ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages, size_t maxsize, size_t *start); int iov_iter_npages(const struct iov_iter *i, int maxpages); - +ssize_t pipe_get_pages_alloc(struct iov_iter *i, struct page ***pages, + size_t maxsize, size_t *start); const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags); ssize_t iov_iter_pin_user_pages(struct bio *bio, struct iov_iter *i, struct page **pages, diff --git a/lib/iov_iter.c b/lib/iov_iter.c index a4bc1b3a3fda..f571fe3ddbe8 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -1396,9 +1396,8 @@ static struct page **get_pages_array(size_t n) return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL); } -static ssize_t pipe_get_pages_alloc(struct iov_iter *i, - struct page ***pages, size_t maxsize, - size_t *start) +ssize_t pipe_get_pages_alloc(struct iov_iter *i, struct page ***pages, + size_t maxsize, size_t *start) { struct page **p; unsigned int iter_head, npages; @@ -1428,6 +1427,7 @@ static ssize_t pipe_get_pages_alloc(struct iov_iter *i, kvfree(p); return n; } +EXPORT_SYMBOL(pipe_get_pages_alloc); ssize_t iov_iter_pin_user_pages_alloc(struct bio *bio, struct iov_iter *i, struct page ***pages, size_t maxsize,
This reduces, by one, the number of callers of iov_iter_get_pages(). That's helpful because these calls are being audited and converted over to use iov_iter_pin_user_pages(), where applicable. And this one here is already known by the caller to be only for ITER_PIPE, so let's just simplify it now. Signed-off-by: John Hubbard <jhubbard@nvidia.com> --- fs/ceph/file.c | 3 +-- include/linux/uio.h | 3 ++- lib/iov_iter.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-)