[PATCH] generic_file_buffered_write fixes
[linux-block.git] / mm / filemap.c
index 93595c327bbdc43fcea91b513fd750d1a73edfec..9b74674e36adff14a1977dcc4055f9e9c3be115b 100644 (file)
@@ -1949,7 +1949,7 @@ generic_file_buffered_write(struct kiocb *iocb, const struct iovec *iov,
                buf = iov->iov_base + written;
        else {
                filemap_set_next_iovec(&cur_iov, &iov_base, written);
-               buf = iov->iov_base + iov_base;
+               buf = cur_iov->iov_base + iov_base;
        }
 
        do {
@@ -2007,9 +2007,11 @@ generic_file_buffered_write(struct kiocb *iocb, const struct iovec *iov,
                                count -= status;
                                pos += status;
                                buf += status;
-                               if (unlikely(nr_segs > 1))
+                               if (unlikely(nr_segs > 1)) {
                                        filemap_set_next_iovec(&cur_iov,
                                                        &iov_base, status);
+                                       buf = cur_iov->iov_base + iov_base;
+                               }
                        }
                }
                if (unlikely(copied != bytes))