Commit 086486e4 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.samba.org/sfrench/cifs-2.6

Pull CIFS fixes from Steve French:
 "Two low risk, small fixes, that fix cifs regressions introduced in
  3.7."

* 'for-linus' of git://git.samba.org/sfrench/cifs-2.6:
  CIFS: Fix wrong buffer pointer usage in smb_set_file_info
  cifs: fix writeback race with file that is growing
parents a95251b8 c772aa92
...@@ -1794,7 +1794,6 @@ static int cifs_writepages(struct address_space *mapping, ...@@ -1794,7 +1794,6 @@ static int cifs_writepages(struct address_space *mapping,
struct TCP_Server_Info *server; struct TCP_Server_Info *server;
struct page *page; struct page *page;
int rc = 0; int rc = 0;
loff_t isize = i_size_read(mapping->host);
/* /*
* If wsize is smaller than the page cache size, default to writing * If wsize is smaller than the page cache size, default to writing
...@@ -1899,7 +1898,7 @@ static int cifs_writepages(struct address_space *mapping, ...@@ -1899,7 +1898,7 @@ static int cifs_writepages(struct address_space *mapping,
*/ */
set_page_writeback(page); set_page_writeback(page);
if (page_offset(page) >= isize) { if (page_offset(page) >= i_size_read(mapping->host)) {
done = true; done = true;
unlock_page(page); unlock_page(page);
end_page_writeback(page); end_page_writeback(page);
...@@ -1932,7 +1931,8 @@ static int cifs_writepages(struct address_space *mapping, ...@@ -1932,7 +1931,8 @@ static int cifs_writepages(struct address_space *mapping,
wdata->offset = page_offset(wdata->pages[0]); wdata->offset = page_offset(wdata->pages[0]);
wdata->pagesz = PAGE_CACHE_SIZE; wdata->pagesz = PAGE_CACHE_SIZE;
wdata->tailsz = wdata->tailsz =
min(isize - page_offset(wdata->pages[nr_pages - 1]), min(i_size_read(mapping->host) -
page_offset(wdata->pages[nr_pages - 1]),
(loff_t)PAGE_CACHE_SIZE); (loff_t)PAGE_CACHE_SIZE);
wdata->bytes = ((nr_pages - 1) * PAGE_CACHE_SIZE) + wdata->bytes = ((nr_pages - 1) * PAGE_CACHE_SIZE) +
wdata->tailsz; wdata->tailsz;
......
...@@ -766,7 +766,6 @@ smb_set_file_info(struct inode *inode, const char *full_path, ...@@ -766,7 +766,6 @@ smb_set_file_info(struct inode *inode, const char *full_path,
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
struct tcon_link *tlink = NULL; struct tcon_link *tlink = NULL;
struct cifs_tcon *tcon; struct cifs_tcon *tcon;
FILE_BASIC_INFO info_buf;
/* if the file is already open for write, just use that fileid */ /* if the file is already open for write, just use that fileid */
open_file = find_writable_file(cinode, true); open_file = find_writable_file(cinode, true);
...@@ -817,7 +816,7 @@ smb_set_file_info(struct inode *inode, const char *full_path, ...@@ -817,7 +816,7 @@ smb_set_file_info(struct inode *inode, const char *full_path,
netpid = current->tgid; netpid = current->tgid;
set_via_filehandle: set_via_filehandle:
rc = CIFSSMBSetFileInfo(xid, tcon, &info_buf, netfid, netpid); rc = CIFSSMBSetFileInfo(xid, tcon, buf, netfid, netpid);
if (!rc) if (!rc)
cinode->cifsAttrs = le32_to_cpu(buf->Attributes); cinode->cifsAttrs = le32_to_cpu(buf->Attributes);
......
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