diff options
author | Dave Chinner <david@fromorbit.com> | 2016-01-19 08:28:36 +1100 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-01-19 08:28:36 +1100 |
commit | ee3804d9f94c5a391c66386b70b9fe5a58775507 (patch) | |
tree | 014d74ffa1cdda8f7db8e3fcd185ccb31e625724 /fs | |
parent | 4c931f770d327f4851917828a1682d030b53d021 (diff) | |
parent | 85bec5460ad8e05e0a8d70fb0f6750eb719ad092 (diff) |
Merge branch 'xfs-misc-fixes-for-4.5-3' into for-next
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_buf.c | 10 | ||||
-rw-r--r-- | fs/xfs/xfs_trans_ail.c | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index ae86b16f9025..e143c7b66e35 100644 --- a/fs/xfs/xfs_buf.c +++ b/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, diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c index aa67339b9537..4f18fd92ca13 100644 --- a/fs/xfs/xfs_trans_ail.c +++ b/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) |