From: Omar Sandoval <osandov@osandov.com> To: Alexander Viro <viro@zeniv.linux.org.uk>, Andrew Morton <akpm@linux-foundation.org>, Trond Myklebust <trond.myklebust@primarydata.com>, Christoph Hellwig <hch@infradead.org>, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Omar Sandoval <osandov@osandov.com> Subject: [PATCH v2 1/5] iov_iter: add ITER_BVEC helpers Date: Fri, 19 Dec 2014 19:18:25 -0800 [thread overview] Message-ID: <9523f2373dd40ac35760f3fb926a81a321fa4139.1419044605.git.osandov@osandov.com> (raw) In-Reply-To: <cover.1419044605.git.osandov@osandov.com> In-Reply-To: <cover.1419044605.git.osandov@osandov.com> Add iov_iter_is_bvec and iov_iter_bvec and convert callers. Signed-off-by: Omar Sandoval <osandov@osandov.com> --- fs/splice.c | 7 ++----- include/linux/uio.h | 7 +++++++ mm/iov_iter.c | 12 ++++++++++++ mm/page_io.c | 14 +++++--------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 75c6058..7c7176f 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1006,11 +1006,8 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, } /* ... iov_iter */ - from.type = ITER_BVEC | WRITE; - from.bvec = array; - from.nr_segs = n; - from.count = sd.total_len - left; - from.iov_offset = 0; + iov_iter_bvec(&from, ITER_BVEC | WRITE, array, n, + sd.total_len - left); /* ... and iocb */ init_sync_kiocb(&kiocb, out); diff --git a/include/linux/uio.h b/include/linux/uio.h index 1c5e453..23bb5e4 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -63,6 +63,11 @@ static inline struct iovec iov_iter_iovec(const struct iov_iter *iter) }; } +static inline int iov_iter_is_bvec(const struct iov_iter *iter) +{ + return (iter->type & ITER_BVEC) != 0; +} + #define iov_for_each(iov, iter, start) \ if (!((start).type & ITER_BVEC)) \ for (iter = (start); \ @@ -90,6 +95,8 @@ void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov, unsigned long nr_segs, size_t count); void iov_iter_kvec(struct iov_iter *i, int direction, const struct kvec *iov, unsigned long nr_segs, size_t count); +void iov_iter_bvec(struct iov_iter *i, int direction, const struct bio_vec *bv, + unsigned long nr_segs, size_t count); ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages, size_t maxsize, unsigned maxpages, size_t *start); ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages, diff --git a/mm/iov_iter.c b/mm/iov_iter.c index a1599ca..c975bc4 100644 --- a/mm/iov_iter.c +++ b/mm/iov_iter.c @@ -513,6 +513,18 @@ void iov_iter_kvec(struct iov_iter *i, int direction, } EXPORT_SYMBOL(iov_iter_kvec); +void iov_iter_bvec(struct iov_iter *i, int direction, const struct bio_vec *bv, + unsigned long nr_segs, size_t count) +{ + BUG_ON(!(direction & ITER_BVEC)); + i->type = direction; + i->bvec = bv; + i->nr_segs = nr_segs; + i->iov_offset = 0; + i->count = count; +} +EXPORT_SYMBOL(iov_iter_bvec); + unsigned long iov_iter_alignment(const struct iov_iter *i) { unsigned long res = 0; diff --git a/mm/page_io.c b/mm/page_io.c index 955db8b..532a39b 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -264,18 +264,14 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, struct kiocb kiocb; struct file *swap_file = sis->swap_file; struct address_space *mapping = swap_file->f_mapping; + struct iov_iter from; struct bio_vec bv = { .bv_page = page, - .bv_len = PAGE_SIZE, - .bv_offset = 0 + .bv_len = PAGE_SIZE, + .bv_offset = 0, }; - struct iov_iter from = { - .type = ITER_BVEC | WRITE, - .count = PAGE_SIZE, - .iov_offset = 0, - .nr_segs = 1, - }; - from.bvec = &bv; /* older gcc versions are broken */ + + iov_iter_bvec(&from, ITER_BVEC | WRITE, &bv, 1, PAGE_SIZE); init_sync_kiocb(&kiocb, swap_file); kiocb.ki_pos = page_file_offset(page); -- 2.2.1
WARNING: multiple messages have this Message-ID (diff)
From: Omar Sandoval <osandov@osandov.com> To: Alexander Viro <viro@zeniv.linux.org.uk>, Andrew Morton <akpm@linux-foundation.org>, Trond Myklebust <trond.myklebust@primarydata.com>, Christoph Hellwig <hch@infradead.org>, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Omar Sandoval <osandov@osandov.com> Subject: [PATCH v2 1/5] iov_iter: add ITER_BVEC helpers Date: Fri, 19 Dec 2014 19:18:25 -0800 [thread overview] Message-ID: <9523f2373dd40ac35760f3fb926a81a321fa4139.1419044605.git.osandov@osandov.com> (raw) In-Reply-To: <cover.1419044605.git.osandov@osandov.com> In-Reply-To: <cover.1419044605.git.osandov@osandov.com> Add iov_iter_is_bvec and iov_iter_bvec and convert callers. Signed-off-by: Omar Sandoval <osandov@osandov.com> --- fs/splice.c | 7 ++----- include/linux/uio.h | 7 +++++++ mm/iov_iter.c | 12 ++++++++++++ mm/page_io.c | 14 +++++--------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 75c6058..7c7176f 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1006,11 +1006,8 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, } /* ... iov_iter */ - from.type = ITER_BVEC | WRITE; - from.bvec = array; - from.nr_segs = n; - from.count = sd.total_len - left; - from.iov_offset = 0; + iov_iter_bvec(&from, ITER_BVEC | WRITE, array, n, + sd.total_len - left); /* ... and iocb */ init_sync_kiocb(&kiocb, out); diff --git a/include/linux/uio.h b/include/linux/uio.h index 1c5e453..23bb5e4 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -63,6 +63,11 @@ static inline struct iovec iov_iter_iovec(const struct iov_iter *iter) }; } +static inline int iov_iter_is_bvec(const struct iov_iter *iter) +{ + return (iter->type & ITER_BVEC) != 0; +} + #define iov_for_each(iov, iter, start) \ if (!((start).type & ITER_BVEC)) \ for (iter = (start); \ @@ -90,6 +95,8 @@ void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov, unsigned long nr_segs, size_t count); void iov_iter_kvec(struct iov_iter *i, int direction, const struct kvec *iov, unsigned long nr_segs, size_t count); +void iov_iter_bvec(struct iov_iter *i, int direction, const struct bio_vec *bv, + unsigned long nr_segs, size_t count); ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages, size_t maxsize, unsigned maxpages, size_t *start); ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages, diff --git a/mm/iov_iter.c b/mm/iov_iter.c index a1599ca..c975bc4 100644 --- a/mm/iov_iter.c +++ b/mm/iov_iter.c @@ -513,6 +513,18 @@ void iov_iter_kvec(struct iov_iter *i, int direction, } EXPORT_SYMBOL(iov_iter_kvec); +void iov_iter_bvec(struct iov_iter *i, int direction, const struct bio_vec *bv, + unsigned long nr_segs, size_t count) +{ + BUG_ON(!(direction & ITER_BVEC)); + i->type = direction; + i->bvec = bv; + i->nr_segs = nr_segs; + i->iov_offset = 0; + i->count = count; +} +EXPORT_SYMBOL(iov_iter_bvec); + unsigned long iov_iter_alignment(const struct iov_iter *i) { unsigned long res = 0; diff --git a/mm/page_io.c b/mm/page_io.c index 955db8b..532a39b 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -264,18 +264,14 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, struct kiocb kiocb; struct file *swap_file = sis->swap_file; struct address_space *mapping = swap_file->f_mapping; + struct iov_iter from; struct bio_vec bv = { .bv_page = page, - .bv_len = PAGE_SIZE, - .bv_offset = 0 + .bv_len = PAGE_SIZE, + .bv_offset = 0, }; - struct iov_iter from = { - .type = ITER_BVEC | WRITE, - .count = PAGE_SIZE, - .iov_offset = 0, - .nr_segs = 1, - }; - from.bvec = &bv; /* older gcc versions are broken */ + + iov_iter_bvec(&from, ITER_BVEC | WRITE, &bv, 1, PAGE_SIZE); init_sync_kiocb(&kiocb, swap_file); kiocb.ki_pos = page_file_offset(page); -- 2.2.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-12-20 3:20 UTC|newest] Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-12-20 3:18 [PATCH v2 0/5] clean up and generalize swap-over-NFS Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval [this message] 2014-12-20 3:18 ` [PATCH v2 1/5] iov_iter: add ITER_BVEC helpers Omar Sandoval 2014-12-20 3:18 ` [PATCH v2 2/5] direct-io: don't dirty ITER_BVEC pages on read Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval 2014-12-20 6:01 ` Al Viro 2014-12-20 6:01 ` Al Viro 2014-12-22 7:12 ` Omar Sandoval 2014-12-22 7:12 ` Omar Sandoval 2014-12-20 3:18 ` [PATCH v2 3/5] nfs: don't dirty ITER_BVEC pages read through direct I/O Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval 2015-01-05 14:41 ` Anna Schumaker 2015-01-05 14:41 ` Anna Schumaker 2015-01-05 14:41 ` Anna Schumaker 2015-01-08 9:25 ` Omar Sandoval 2015-01-08 9:25 ` Omar Sandoval 2015-01-08 9:25 ` Omar Sandoval 2014-12-20 3:18 ` [PATCH v2 4/5] swapfile: use ->read_iter and ->write_iter Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval 2014-12-20 6:13 ` Al Viro 2014-12-20 6:13 ` Al Viro 2014-12-22 7:32 ` Omar Sandoval 2014-12-22 7:32 ` Omar Sandoval 2014-12-22 7:32 ` Omar Sandoval 2014-12-20 3:18 ` [PATCH v2 5/5] vfs: update swap_{,de}activate documentation Omar Sandoval 2014-12-20 3:18 ` Omar Sandoval 2015-01-14 3:18 ` [PATCH v2 0/5] clean up and generalize swap-over-NFS Omar Sandoval 2015-01-14 3:18 ` Omar Sandoval 2015-01-14 3:18 ` Omar Sandoval 2015-01-21 19:14 ` Omar Sandoval 2015-01-21 19:14 ` Omar Sandoval 2015-01-21 19:14 ` Omar Sandoval
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=9523f2373dd40ac35760f3fb926a81a321fa4139.1419044605.git.osandov@osandov.com \ --to=osandov@osandov.com \ --cc=akpm@linux-foundation.org \ --cc=hch@infradead.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-nfs@vger.kernel.org \ --cc=trond.myklebust@primarydata.com \ --cc=viro@zeniv.linux.org.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.