[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>

authored by Yingping Lu and committed by Nathan Scott 71df099d 75e17b3c

+1 -1
+1 -1
fs/xfs/linux-2.6/xfs_super.c
··· 579 579 timeleft = schedule_timeout_interruptible(timeleft); 580 580 /* swsusp */ 581 581 try_to_freeze(); 582 - if (kthread_should_stop()) 582 + if (kthread_should_stop() && list_empty(&vfsp->vfs_sync_list)) 583 583 break; 584 584 585 585 spin_lock(&vfsp->vfs_sync_lock);