cifs: don't fail writepages on -EAGAIN errors
authorJeff Layton <jlayton@redhat.com>
Tue, 11 Jan 2011 12:24:01 +0000 (07:24 -0500)
committerSteve French <sfrench@us.ibm.com>
Wed, 19 Jan 2011 17:52:29 +0000 (17:52 +0000)
commit941b853d779de3298e39f1eb4e252984464eaea8
treea1e41bb06debf22349f010a1c9427c9b89bb79b4
parent12fed00de963433128b5366a21a55808fab2f756
cifs: don't fail writepages on -EAGAIN errors

If CIFSSMBWrite2 returns -EAGAIN, then the error should be considered
temporary. CIFS should retry the write instead of setting an error on
the mapping and returning.

For WB_SYNC_ALL, just retry the write immediately. In the WB_SYNC_NONE
case, call redirty_page_for_writeback on all of the pages that didn't
get written out and then move on.

Also, fix up the handling of a short write with a successful return
code. MS-CIFS says that 0 bytes_written means ENOSPC or EFBIG. It
doesn't mention what a short, but non-zero write means, so for now
treat it as we would an -EAGAIN return.

Reviewed-by: Suresh Jayaraman <sjayaraman@suse.de>
Reviewed-by: Pavel Shilovsky <piastryyy@gmail.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/file.c