diff options
author | Christoph Hellwig <hch@lst.de> | 2019-06-29 05:27:25 +0300 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2019-06-29 05:27:25 +0300 |
commit | 1058d0f5eeb422325e2574dbd88927dc821dee57 (patch) | |
tree | 870aee0b516cf2eabe4c5dcfeff4bd50d8cd1e55 /fs/xfs/xfs_log.c | |
parent | 79b54d9bfcdcd0a431bb3501013885f8f00cdb43 (diff) | |
download | linux-1058d0f5eeb422325e2574dbd88927dc821dee57.tar.xz |
xfs: move the log ioend workqueue to struct xlog
Move the workqueue used for log I/O completions from struct xfs_mount
to struct xlog to keep it self contained in the log code.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
[darrick: destroy the log workqueue after ensuring log ios are done]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/xfs_log.c')
-rw-r--r-- | fs/xfs/xfs_log.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 6880e2aee893..8a3b7ccf070a 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1489,11 +1489,19 @@ xlog_alloc_log( *iclogp = log->l_iclog; /* complete ring */ log->l_iclog->ic_prev = prev_iclog; /* re-write 1st prev ptr */ + log->l_ioend_workqueue = alloc_workqueue("xfs-log/%s", + WQ_MEM_RECLAIM | WQ_FREEZABLE | WQ_HIGHPRI, 0, + mp->m_fsname); + if (!log->l_ioend_workqueue) + goto out_free_iclog; + error = xlog_cil_init(log); if (error) - goto out_free_iclog; + goto out_destroy_workqueue; return log; +out_destroy_workqueue: + destroy_workqueue(log->l_ioend_workqueue); out_free_iclog: for (iclog = log->l_iclog; iclog; iclog = prev_iclog) { prev_iclog = iclog->ic_next; @@ -1690,7 +1698,7 @@ xlog_bio_end_io( { struct xlog_in_core *iclog = bio->bi_private; - queue_work(iclog->ic_log->l_mp->m_log_workqueue, + queue_work(iclog->ic_log->l_ioend_workqueue, &iclog->ic_end_io_work); } @@ -1966,6 +1974,7 @@ xlog_dealloc_log( } log->l_mp->m_log = NULL; + destroy_workqueue(log->l_ioend_workqueue); kmem_free(log); } /* xlog_dealloc_log */ |