Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
        pgoff_t index;
        int is_range = 0;
        struct kvec iov[32];
+       int len;
        int n_iov = 0;
        pgoff_t next;
        int nr_pages;
                                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;