[PATCH] cifs: Detect errors in cifs_writepages when called from pdflush

Peter Schwenke <[email protected]>
Newsgroups gmane.linux.file-systems.cifs
Message-ID <20090417124438.GB31321@kay>
The return code isn't checked in the case of cifs_writepages being
invoked as a result of pdflush. This results in data integrity
problems when errors such as a network break occur when
CIFSSMBWrite2 is called.  The resulting EAGAIN isn't acted
on.

Signed-off-by: Peter Schwenke <[email protected]>
---
 fs/cifs/file.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 042b122..8cc1094 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1374,6 +1374,17 @@ retry:
 						set_bit(AS_ENOSPC, &mapping->flags);
 					else
 						set_bit(AS_EIO, &mapping->flags);
+					/*
+					 * The return code isn't checked in the
+					 * case of cifs_writepages being
+					 * invoked as a result of pdflush.
+					 * See generic_sync_sb_inodes()
+					 */
+					if (current_is_pdflush())
+						if (rc == -ENOSPC)
+							CIFS_I(mapping->host)->write_behind_rc =  rc;
+						else
+							CIFS_I(mapping->host)->write_behind_rc =  -EIO;
 				} else {
 					cifs_stats_bytes_written(cifs_sb->tcon,
 								 bytes_written);
-- 
1.5.4.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.