On Wed, 10 Dec 2008 08:42:09 +0100 Nick Piggin <npiggin@xxxxxxx> wrote: > This patch fixes fsync starvation problems in the presence of concurrent > dirtiers. One reject in xfs, which now does: int xfs_flush_pages( xfs_inode_t *ip, xfs_off_t first, xfs_off_t last, uint64_t flags, int fiopt) { struct address_space *mapping = VFS_I(ip)->i_mapping; int ret = 0; int ret2; if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) { xfs_iflags_clear(ip, XFS_ITRUNCATED); ret = filemap_fdatawrite(mapping); if (flags & XFS_B_ASYNC) return -ret; ret2 = filemap_fdatawait(mapping); if (!ret) ret = ret2; } return -ret; } ie: it returns a +ve integer on error, heaven knows why. So I did int xfs_flush_pages( xfs_inode_t *ip, xfs_off_t first, xfs_off_t last, uint64_t flags, int fiopt) { struct address_space *mapping = VFS_I(ip)->i_mapping; int ret = 0; if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) { xfs_iflags_clear(ip, XFS_ITRUNCATED); if (flags & XFS_B_ASYNC) { ret = __filemap_fdatawrite_range(mapping, 0, LLONG_MAX, WB_SYNC_NONE); } else { int ret2; mapping_fsync_lock(mapping); ret = filemap_fdatawrite(mapping); ret2 = filemap_fdatawait_fsync(mapping); if (!ret) ret = ret2; mapping_fsync_unlock(mapping); } } return -ret; } -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html