Browse Source

Merge branch 'xfs-misc-fixes-for-4.5-3' into for-next

Dave Chinner 10 years ago
parent
commit
ee3804d9f9
2 changed files with 10 additions and 1 deletions
  1. 10 0
      fs/xfs/xfs_buf.c
  2. 0 1
      fs/xfs/xfs_trans_ail.c

+ 10 - 0
fs/xfs/xfs_buf.c

@@ -1527,6 +1527,16 @@ xfs_wait_buftarg(
 	LIST_HEAD(dispose);
 	int loop = 0;
 
+	/*
+	 * We need to flush the buffer workqueue to ensure that all IO
+	 * completion processing is 100% done. Just waiting on buffer locks is
+	 * not sufficient for async IO as the reference count held over IO is
+	 * not released until after the buffer lock is dropped. Hence we need to
+	 * ensure here that all reference counts have been dropped before we
+	 * start walking the LRU list.
+	 */
+	drain_workqueue(btp->bt_mount->m_buf_workqueue);
+
 	/* loop until there is nothing left on the lru list. */
 	while (list_lru_count(&btp->bt_lru)) {
 		list_lru_walk(&btp->bt_lru, xfs_buftarg_wait_rele,

+ 0 - 1
fs/xfs/xfs_trans_ail.c

@@ -497,7 +497,6 @@ xfsaild(
 	long		tout = 0;	/* milliseconds */
 
 	current->flags |= PF_MEMALLOC;
-	set_freezable();
 
 	while (!kthread_should_stop()) {
 		if (tout && tout <= 20)