diff options
author | Yingping Lu <yingping@sgi.com> | 2006-01-11 21:02:29 +1100 |
---|---|---|
committer | Nathan Scott <nathans@sgi.com> | 2006-01-11 21:02:29 +1100 |
commit | 71df099dc3f9cd17e8564eb647d7c1fb2ee83e2d (patch) | |
tree | cd355dc9b7f89511e27eca3da778a8e52200d7b1 /fs | |
parent | 75e17b3caf29b262000dc7348f1be9a7d5403463 (diff) | |
download | linux-71df099dc3f9cd17e8564eb647d7c1fb2ee83e2d.tar.gz linux-71df099dc3f9cd17e8564eb647d7c1fb2ee83e2d.tar.bz2 linux-71df099dc3f9cd17e8564eb647d7c1fb2ee83e2d.zip |
[XFS] xfssyncd is responsible for flushing inode or device's data by
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 556c1437b17d..f22e426d9e42 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -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); |