CIFS: cifs_writepages should not write beyond end of file

Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 585a62a..23af20d 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1011,6 +1011,7 @@
 	pgoff_t index;
 	int is_range = 0;
 	struct kvec iov[32];
+	int len;
 	int n_iov = 0;
 	pgoff_t next;
 	int nr_pages;
@@ -1124,16 +1125,26 @@
 				unlock_page(page);
 				break;
 			}
+
+			if (page_offset(page) >= mapping->host->i_size) {
+				done = 1;
+				unlock_page(page);
+				break;
+			}
+
 			/*
 			 * BB can we get rid of this?  pages are held by pvec
 			 */
 			page_cache_get(page);
 
+			len = min(mapping->host->i_size - page_offset(page),
+				  (loff_t)PAGE_CACHE_SIZE);
+
 			/* reserve iov[0] for the smb header */
 			n_iov++;
 			iov[n_iov].iov_base = kmap(page);
-			iov[n_iov].iov_len = PAGE_CACHE_SIZE;
-			bytes_to_write += PAGE_CACHE_SIZE;
+			iov[n_iov].iov_len = len;
+			bytes_to_write += len;
 
 			if (first < 0) {
 				first = i;