xfs
[Top] [All Lists]

Re: 2.6.30-06725: xfs_fsr: Assertion failed: ip->i_delayed_blks == 0, fi

To: Alexander Beregalov <a.beregalov@xxxxxxxxx>
Subject: Re: 2.6.30-06725: xfs_fsr: Assertion failed: ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c, line: 5991
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Thu, 18 Jun 2009 16:51:02 -0400
Cc: xfs@xxxxxxxxxxx
In-reply-to: <a4423d670906181231r7388df5am394bc55508272b3@xxxxxxxxxxxxxx>
References: <a4423d670906181231r7388df5am394bc55508272b3@xxxxxxxxxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
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

<Prev in Thread] Current Thread [Next in Thread>