]> err.no Git - linux-2.6/commitdiff
[XFS] xfssyncd is responsible for flushing inode or device's data by
authorYingping Lu <yingping@sgi.com>
Wed, 11 Jan 2006 10:02:29 +0000 (21:02 +1100)
committerNathan Scott <nathans@sgi.com>
Wed, 11 Jan 2006 10:02:29 +0000 (21:02 +1100)
extracting the work from its queue. In addition, this processing also
decrement the inode's i_count. If there are any remaining works in queue
before this process terminates, we have unbalanced increment and decrement
of i_count. Thus it can cause assertion failure of vn_count. The fix
allows xyssyncd to process any remaining work before it is shutdown.

SGI-PV: 945935
SGI-Modid: xfs-linux-melb:xfs-kern:203970a

Signed-off-by: Yingping Lu <yingping@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/linux-2.6/xfs_super.c

index 556c1437b17d0a14aff3e162b07df34732634dba..f22e426d9e4293731be1bdecf43c015c88e7bbdd 100644 (file)
@@ -579,7 +579,7 @@ xfssyncd(
                timeleft = schedule_timeout_interruptible(timeleft);
                /* swsusp */
                try_to_freeze();
-               if (kthread_should_stop())
+               if (kthread_should_stop() && list_empty(&vfsp->vfs_sync_list))
                        break;
 
                spin_lock(&vfsp->vfs_sync_lock);