Commit 6b29b7bc authored by Steve French's avatar Steve French

Remember to free mapping in all writepage paths

parent e61ed9f5
...@@ -393,7 +393,7 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to) ...@@ -393,7 +393,7 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to)
{ {
struct address_space *mapping = page->mapping; struct address_space *mapping = page->mapping;
loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT; loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
char * write_data = kmap(page); char * write_data;
int rc = -EFAULT; int rc = -EFAULT;
int bytes_written = 0; int bytes_written = 0;
struct cifs_sb_info *cifs_sb; struct cifs_sb_info *cifs_sb;
...@@ -411,8 +411,9 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to) ...@@ -411,8 +411,9 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to)
/* figure out which file struct to use /* figure out which file struct to use
if (file->private_data == NULL) { if (file->private_data == NULL) {
FreeXid(xid); kunmap(page);
return -EBADF; FreeXid(xid);
return -EBADF;
} }
*/ */
if (!mapping) { if (!mapping) {
...@@ -424,15 +425,17 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to) ...@@ -424,15 +425,17 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to)
} }
offset += (loff_t)from; offset += (loff_t)from;
write_data = kmap(page);
write_data += from; write_data += from;
if((to > PAGE_CACHE_SIZE) || (from > to) || (offset > mapping->host->i_size)) { if((to > PAGE_CACHE_SIZE) || (from > to) || (offset > mapping->host->i_size)) {
kunmap(page);
FreeXid(xid); FreeXid(xid);
return -EIO; return -EIO;
} }
/* check to make sure that we are not extending the file */ /* check to make sure that we are not extending the file */
if(mapping->host->i_size - offset < (loff_t)to) if(mapping->host->i_size - offset < (loff_t)to)
to = (unsigned)(mapping->host->i_size - offset); to = (unsigned)(mapping->host->i_size - offset);
...@@ -459,6 +462,7 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to) ...@@ -459,6 +462,7 @@ cifs_partialpagewrite(struct page *page,unsigned from, unsigned to)
rc = -EIO; rc = -EIO;
} }
kunmap(page);
FreeXid(xid); FreeXid(xid);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment