[patch 056/104] cifs: Fix error in smb_send2

Greg KH
2008-12-03T20:12:33Z

[-- Attachment #1: cifs-fix-error-in-smb_send2.patch --]
[-- Type: text/plain, Size: 1788 bytes --]

2.6.27-stable review patch. If anyone has any objections, please let us know.

------------------
From: Steve French <sfrench@us.ibm.com>

Backport of upstream commit 61de800d33af585cb7e6f27b5cdd51029c6855cb
for -stable.

[CIFS] fix error in smb_send2

smb_send2 exit logic was strange, and with the previous change
could cause us to fail large
smb writes when all of the smb was not sent as one chunk.

Acked-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Cc: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
fs/cifs/cifssmb.c | 2 +-
fs/cifs/file.c | 2 +-
fs/cifs/transport.c | 7 +++++--
3 files changed, 7 insertions(+), 4 deletions(-)

--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -1534,7 +1534,7 @@ CIFSSMBWrite(const int xid, struct cifsT
__u32 bytes_sent;
__u16 byte_count;

- /* cFYI(1,("write at %lld %d bytes",offset,count));*/
+ /* cFYI(1, ("write at %lld %d bytes",offset,count));*/
if (tcon->ses == NULL)
return -ECONNABORTED;

--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1813,7 +1813,7 @@ static int cifs_readpages(struct file *f
pTcon = cifs_sb->tcon;

pagevec_init(&lru_pvec, 0);
- cFYI(DBG2, ("rpages: num pages %d", num_pages));
+ cFYI(DBG2, ("rpages: num pages %d", num_pages));
for (i = 0; i < num_pages; ) {
unsigned contig_pages;
struct page *tmp_page;
--- a/fs/cifs/transport.c
+++ b/fs/cifs/transport.c
@@ -291,8 +291,11 @@ smb_send2(struct TCP_Server_Info *server
if (rc < 0)
break;

- if (rc >= total_len) {
- WARN_ON(rc > total_len);
+ if (rc == total_len) {
+ total_len = 0;
+ break;
+ } else if (rc > total_len) {
+ cERROR(1, ("sent %d requested %d", rc, total_len));
break;
}
if (rc == 0) {