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:
Родитель
47c786e79b
Коммит
84d2f07e8e
|
@ -1011,6 +1011,7 @@ static int cifs_writepages(struct address_space *mapping,
|
||||||
pgoff_t index;
|
pgoff_t index;
|
||||||
int is_range = 0;
|
int is_range = 0;
|
||||||
struct kvec iov[32];
|
struct kvec iov[32];
|
||||||
|
int len;
|
||||||
int n_iov = 0;
|
int n_iov = 0;
|
||||||
pgoff_t next;
|
pgoff_t next;
|
||||||
int nr_pages;
|
int nr_pages;
|
||||||
|
@ -1124,16 +1125,26 @@ retry:
|
||||||
unlock_page(page);
|
unlock_page(page);
|
||||||
break;
|
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
|
* BB can we get rid of this? pages are held by pvec
|
||||||
*/
|
*/
|
||||||
page_cache_get(page);
|
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 */
|
/* reserve iov[0] for the smb header */
|
||||||
n_iov++;
|
n_iov++;
|
||||||
iov[n_iov].iov_base = kmap(page);
|
iov[n_iov].iov_base = kmap(page);
|
||||||
iov[n_iov].iov_len = PAGE_CACHE_SIZE;
|
iov[n_iov].iov_len = len;
|
||||||
bytes_to_write += PAGE_CACHE_SIZE;
|
bytes_to_write += len;
|
||||||
|
|
||||||
if (first < 0) {
|
if (first < 0) {
|
||||||
first = i;
|
first = i;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче