writes: fix spurious fs truncate errors
Subsystems (3)
PATCH 3/3 writes: fix spurious fs truncate errors
Get rid of newly exposed EIO errors from truncate races in filesystems
fs/buffer.c +1 -1
@@ -2625,7 +2625,7 @@*/ block_invalidatepage (page,0 );unlock_page (page); -return -EIO ; +return 0 ;/* don't care */ }/*
fs/cifs/file.c +7 -1
@@ -433,12 +433,18 @@ write_data =kmap (page); write_data += from; -if ((to >PAGE_CACHE_SIZE ) || (from > to) || (offset > mapping->host->i_size)) { +if ((to >PAGE_CACHE_SIZE ) || (from > to)) {kunmap (page);FreeXid (xid);return -EIO ; } +/* racing with truncate? */ +if (offset > mapping->host->i_size) { +FreeXid (xid); +return 0 ;/* don't care */ + } +/* check to make sure that we are not extending the file */ if (mapping->host->i_size - offset < (loff_t )to) to = (unsigned )(mapping->host->i_size - offset);
fs/nfs/write.c +1 -1
@@ -241,7 +241,7 @@ offset = inode->i_size & (PAGE_CACHE_SIZE -1 );/* OK, are we completely out? */ - err = -EIO ; + err =0 ;/* potential race with truncate - ignore */ if (page->index >= end_index+1 || !offset) goto out; do_it:
fs/ntfs/aops.c +2 -2
@@ -811,8 +811,8 @@if (unlikely (page->index >= (vi->i_size +PAGE_CACHE_SIZE -1 ) >>PAGE_CACHE_SHIFT )) {unlock_page (page); -ntfs_debug ("Write outside i_size. Returning i/o error." ); -return -EIO ; +ntfs_debug ("Write outside i_size - truncated?" ); +return 0 ; } ni =NTFS_I (vi);
fs/reiserfs/inode.c +2 -2
@@ -2048,8 +2048,8 @@ last_offset = inode->i_size & (PAGE_CACHE_SIZE -1 ) ;/* no file contents in this page */ if (page->index >= end_index +1 || !last_offset) { - error = -EIO ; - goto fail ; + error =0 ; + goto done ; } kaddr =kmap_atomic (page,KM_USER0 );memset (kaddr + last_offset,0 ,PAGE_CACHE_SIZE -last_offset) ;
fs/smbfs/file.c +1 -1
@@ -193,7 +193,7 @@ offset = inode->i_size & (PAGE_CACHE_SIZE -1 );/* OK, are we completely out? */ if (page->index >= end_index+1 || !offset) -return -EIO ; +return 0 ;/* truncated - don't care */ do_it:page_cache_get (page); err =smb_writepage_sync (inode, page,0 , offset);
Signature · 1 line
"Love the dolphins," she advised him. "Write by W.A.S.T.E.."
Quoted 3 lines · Oliver Xymoron
Get rid of newly exposed EIO errors from truncate races in filesystems
One fix.
The reiserfs change looks OK from a breif scan, but I need to wake up a resierfs developer to take a look at it.
- Missing kunmap in CIFS.
fs/cifs/file.c | 1 + 1 files changed, 1 insertion(+)
fs/cifs/file.c renamed from fs/cifs/file.c~awe-fix-truncate-errors-fixes +1 -0
@@ -456,6 +456,7 @@ cifs_partialpagewrite(struct page *page,/* racing with truncate? */ if (offset > mapping->host->i_size) { +kunmap (page);FreeXid (xid);return 0 ;/* don't care */ }
_