[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