diff options
Diffstat (limited to 'fs/cifs/file.c')
| -rw-r--r-- | fs/cifs/file.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 802564196510..dd26e2759b17 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
| @@ -130,7 +130,9 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file, | |||
| 130 | if (file->f_path.dentry->d_inode->i_mapping) { | 130 | if (file->f_path.dentry->d_inode->i_mapping) { |
| 131 | /* BB no need to lock inode until after invalidate | 131 | /* BB no need to lock inode until after invalidate |
| 132 | since namei code should already have it locked? */ | 132 | since namei code should already have it locked? */ |
| 133 | filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping); | 133 | rc = filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping); |
| 134 | if (rc != 0) | ||
| 135 | CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc; | ||
| 134 | } | 136 | } |
| 135 | cFYI(1, ("invalidating remote inode since open detected it " | 137 | cFYI(1, ("invalidating remote inode since open detected it " |
| 136 | "changed")); | 138 | "changed")); |
| @@ -425,7 +427,9 @@ reopen_error_exit: | |||
| 425 | pCifsInode = CIFS_I(inode); | 427 | pCifsInode = CIFS_I(inode); |
| 426 | if (pCifsInode) { | 428 | if (pCifsInode) { |
| 427 | if (can_flush) { | 429 | if (can_flush) { |
| 428 | filemap_write_and_wait(inode->i_mapping); | 430 | rc = filemap_write_and_wait(inode->i_mapping); |
| 431 | if (rc != 0) | ||
| 432 | CIFS_I(inode)->write_behind_rc = rc; | ||
| 429 | /* temporarily disable caching while we | 433 | /* temporarily disable caching while we |
| 430 | go to server to get inode info */ | 434 | go to server to get inode info */ |
| 431 | pCifsInode->clientCanCacheAll = FALSE; | 435 | pCifsInode->clientCanCacheAll = FALSE; |
| @@ -1367,7 +1371,10 @@ retry: | |||
| 1367 | rc, bytes_written)); | 1371 | rc, bytes_written)); |
| 1368 | /* BB what if continued retry is | 1372 | /* BB what if continued retry is |
| 1369 | requested via mount flags? */ | 1373 | requested via mount flags? */ |
| 1370 | set_bit(AS_EIO, &mapping->flags); | 1374 | if (rc == -ENOSPC) |
| 1375 | set_bit(AS_ENOSPC, &mapping->flags); | ||
| 1376 | else | ||
| 1377 | set_bit(AS_EIO, &mapping->flags); | ||
| 1371 | } else { | 1378 | } else { |
| 1372 | cifs_stats_bytes_written(cifs_sb->tcon, | 1379 | cifs_stats_bytes_written(cifs_sb->tcon, |
| 1373 | bytes_written); | 1380 | bytes_written); |
| @@ -1499,9 +1506,11 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync) | |||
| 1499 | cFYI(1, ("Sync file - name: %s datasync: 0x%x", | 1506 | cFYI(1, ("Sync file - name: %s datasync: 0x%x", |
| 1500 | dentry->d_name.name, datasync)); | 1507 | dentry->d_name.name, datasync)); |
| 1501 | 1508 | ||
| 1502 | rc = filemap_fdatawrite(inode->i_mapping); | 1509 | rc = filemap_write_and_wait(inode->i_mapping); |
| 1503 | if (rc == 0) | 1510 | if (rc == 0) { |
| 1511 | rc = CIFS_I(inode)->write_behind_rc; | ||
| 1504 | CIFS_I(inode)->write_behind_rc = 0; | 1512 | CIFS_I(inode)->write_behind_rc = 0; |
| 1513 | } | ||
| 1505 | FreeXid(xid); | 1514 | FreeXid(xid); |
| 1506 | return rc; | 1515 | return rc; |
| 1507 | } | 1516 | } |
| @@ -1553,8 +1562,11 @@ int cifs_flush(struct file *file, fl_owner_t id) | |||
| 1553 | filemapfdatawrite appears easier for the time being */ | 1562 | filemapfdatawrite appears easier for the time being */ |
| 1554 | 1563 | ||
| 1555 | rc = filemap_fdatawrite(inode->i_mapping); | 1564 | rc = filemap_fdatawrite(inode->i_mapping); |
| 1556 | if (!rc) /* reset wb rc if we were able to write out dirty pages */ | 1565 | /* reset wb rc if we were able to write out dirty pages */ |
| 1566 | if (!rc) { | ||
| 1567 | rc = CIFS_I(inode)->write_behind_rc; | ||
| 1557 | CIFS_I(inode)->write_behind_rc = 0; | 1568 | CIFS_I(inode)->write_behind_rc = 0; |
| 1569 | } | ||
| 1558 | 1570 | ||
| 1559 | cFYI(1, ("Flush inode %p file %p rc %d", inode, file, rc)); | 1571 | cFYI(1, ("Flush inode %p file %p rc %d", inode, file, rc)); |
| 1560 | 1572 | ||
