2.6.30-06725: xfs_fsr: Assertion failed: ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c, line: 5991

Christoph Hellwig hch at infradead.org
Thu Jun 18 15:51:02 CDT 2009


Did this happens once or multiple times?  It seems that for some
reason xfs_flush_pages didn't flush all delalloc space and then
we rightfully hit this assertation.

I really hate the code in xfs_flush_pages with the optimizations it
tries to apply.  Can you give the patch below which removes the
optimizations and uses some more core VM code instead of doing our
own thing?


Index: xfs/fs/xfs/linux-2.6/xfs_fs_subr.c
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_fs_subr.c	2009-06-18 22:48:01.469815342 +0200
+++ xfs/fs/xfs/linux-2.6/xfs_fs_subr.c	2009-06-18 22:49:08.296815058 +0200
@@ -68,20 +68,12 @@ xfs_flush_pages(
 	uint64_t	flags,
 	int		fiopt)
 {
-	struct address_space *mapping = VFS_I(ip)->i_mapping;
-	int		ret = 0;
-	int		ret2;
+	xfs_iflags_clear(ip, XFS_ITRUNCATED);
 
-	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 = xfs_wait_on_pages(ip, first, last);
-	if (!ret)
-		ret = ret2;
-	return ret;
+		return -filemap_fdatawrite(VFS_I(ip)->i_mapping);
+	else
+		return -filemap_write_and_wait(VFS_I(ip)->i_mapping);
 }
 
 int




More information about the xfs mailing list