mm/filemap.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
---- linux-2.6.17.1.orig/mm/filemap.c
-+++ linux-2.6.17.1/mm/filemap.c
+--- linux-2.6.17.6.orig/mm/filemap.c
++++ linux-2.6.17.6/mm/filemap.c
@@ -2004,14 +2004,21 @@ generic_file_buffered_write(struct kiocb
do {
unsigned long index;
mm/filemap.h | 4 ++--
2 files changed, 10 insertions(+), 3 deletions(-)
-diff --git a/mm/filemap.c b/mm/filemap.c
-index 4082b3b..648f2c0 100644
---- a/mm/filemap.c
-+++ b/mm/filemap.c
-@@ -2125,6 +2125,12 @@ generic_file_buffered_write(struct kiocb
+--- linux-2.6.17.6.orig/mm/filemap.c
++++ linux-2.6.17.6/mm/filemap.c
+@@ -2034,6 +2034,12 @@ generic_file_buffered_write(struct kiocb
break;
}
status = a_ops->prepare_write(file, page, offset, offset+bytes);
if (unlikely(status)) {
loff_t isize = i_size_read(inode);
-@@ -2154,7 +2160,8 @@ generic_file_buffered_write(struct kiocb
+@@ -2063,7 +2069,8 @@ generic_file_buffered_write(struct kiocb
page_cache_release(page);
continue;
}
if (!status)
status = copied;
-diff --git a/mm/filemap.h b/mm/filemap.h
-index 536979f..3f2a343 100644
---- a/mm/filemap.h
-+++ b/mm/filemap.h
-@@ -88,7 +88,7 @@ filemap_set_next_iovec(const struct iove
+--- linux-2.6.17.6.orig/mm/filemap.h
++++ linux-2.6.17.6/mm/filemap.h
+@@ -78,7 +78,7 @@ filemap_set_next_iovec(const struct iove
const struct iovec *iov = *iovp;
size_t base = *basep;
int copy = min(bytes, iov->iov_len - base);
bytes -= copy;
-@@ -97,7 +97,7 @@ filemap_set_next_iovec(const struct iove
+@@ -87,7 +87,7 @@ filemap_set_next_iovec(const struct iove
iov++;
base = 0;
}
*iovp = iov;
*basep = base;
}
-
cdrom-fix-bad-cgc.buflen-assignment.patch
splice-fix-problems-with-sys_tee.patch
USB-serial-ftdi_sio-Prevent-userspace-DoS.patch
+generic_file_buffered_write-deadlock-on-vectored-write.patch
+generic_file_buffered_write-handle-zero-length-iovec-segments.patch