mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
47c786e79b
commit
84d2f07e8e
|
@ -1011,6 +1011,7 @@ static int cifs_writepages(struct address_space *mapping,
|
|||
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 @@ static int cifs_writepages(struct address_space *mapping,
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue