linux/debian/patches/debian/iovec-fix-abi-change-in-3.1...

59 lines
2.2 KiB
Diff

From: Ben Hutchings <ben@decadent.org.uk>
Date: Mon, 08 Dec 2014 01:22:04 +0000
Subject: iovec: Fix ABI change in 3.16.7-ckt1
Forwarded: not-needed
The combination of 'switch iov_iter_get_pages() to passing maximal
number of pages' and 'fuse: honour max_read and max_write in direct_io
mode' adds a new parameter to iov_iter_get_pages().
I don't think it's very likely to be used OOT, but just in case it is:
- Rename the new version to iov_iter_get_pages_fixed()
- Define and export iov_iter_get_pages() with the old parameters
for ABI compatibility
- Define iov_iter_get_pages as a macro alias for iov_iter_get_pages_fixed
--- a/include/linux/uio.h
+++ b/include/linux/uio.h
@@ -84,7 +84,10 @@ unsigned long iov_iter_alignment(const s
void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov,
unsigned long nr_segs, size_t count);
ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages,
+ size_t maxsize, size_t *start);
+ssize_t iov_iter_get_pages_fixed(struct iov_iter *i, struct page **pages,
size_t maxsize, unsigned maxpages, size_t *start);
+#define iov_iter_get_pages iov_iter_get_pages_fixed
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);
--- a/mm/iov_iter.c
+++ b/mm/iov_iter.c
@@ -714,7 +714,8 @@ unsigned long iov_iter_alignment(const s
}
EXPORT_SYMBOL(iov_iter_alignment);
-ssize_t iov_iter_get_pages(struct iov_iter *i,
+/* Called as iov_iter_get_pages() */
+ssize_t iov_iter_get_pages_fixed(struct iov_iter *i,
struct page **pages, size_t maxsize, unsigned maxpages,
size_t *start)
{
@@ -723,6 +724,17 @@ ssize_t iov_iter_get_pages(struct iov_it
else
return get_pages_iovec(i, pages, maxsize, maxpages, start);
}
+EXPORT_SYMBOL(iov_iter_get_pages_fixed);
+
+/* ABI compatibility wrapper */
+#undef iov_iter_get_pages
+ssize_t iov_iter_get_pages(struct iov_iter *i,
+ struct page **pages, size_t maxsize,
+ size_t *start)
+{
+ return iov_iter_get_pages_fixed(i, pages, maxsize, maxsize / PAGE_SIZE,
+ start);
+}
EXPORT_SYMBOL(iov_iter_get_pages);
ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,