Skip to content

Commit 777025e

Browse files
Chris MasonBrian Maly
authored andcommitted
xfs: give all workqueues rescuer threads
Orabug: 28518694 We're consistently hitting deadlocks here with XFS on recent kernels. After some digging through the crash files, it looks like everyone in the system is waiting for XFS to reclaim memory. Something like this: PID: 2733434 TASK: ffff8808cd242800 CPU: 19 COMMAND: "java" #0 [ffff880019c53588] __schedule at ffffffff818c4df2 #1 [ffff880019c535d8] schedule at ffffffff818c5517 #2 [ffff880019c535f8] _xfs_log_force_lsn at ffffffff81316348 #3 [ffff880019c53688] xfs_log_force_lsn at ffffffff813164fb #4 [ffff880019c536b8] xfs_iunpin_wait at ffffffff8130835e #5 [ffff880019c53728] xfs_reclaim_inode at ffffffff812fd453 #6 [ffff880019c53778] xfs_reclaim_inodes_ag at ffffffff812fd8c7 #7 [ffff880019c53928] xfs_reclaim_inodes_nr at ffffffff812fe433 #8 [ffff880019c53958] xfs_fs_free_cached_objects at ffffffff8130d3b9 #9 [ffff880019c53968] super_cache_scan at ffffffff811a6f73 xfs_log_force_lsn is waiting for logs to get cleaned, which is waiting for IO, which is waiting for workers to complete the IO which is waiting for worker threads that don't exist yet: PID: 2752451 TASK: ffff880bd6bdda00 CPU: 37 COMMAND: "kworker/37:1" #0 [ffff8808d20abbb0] __schedule at ffffffff818c4df2 #1 [ffff8808d20abc00] schedule at ffffffff818c5517 #2 [ffff8808d20abc20] schedule_timeout at ffffffff818c7c6c #3 [ffff8808d20abcc0] wait_for_completion_killable at ffffffff818c6495 #4 [ffff8808d20abd30] kthread_create_on_node at ffffffff8106ec82 #5 [ffff8808d20abdf0] create_worker at ffffffff8106752f #6 [ffff8808d20abe40] worker_thread at ffffffff810699be #7 [ffff8808d20abec0] kthread at ffffffff8106ef59 #8 [ffff8808d20abf50] ret_from_fork at ffffffff818c8ac8 I think we should be using WQ_MEM_RECLAIM to make sure this thread pool makes progress when we're not able to allocate new workers. [dchinner: make all workqueues WQ_MEM_RECLAIM] Signed-off-by: Chris Mason <clm@fb.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com> (cherry picked from commit 7a29ac4) Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com> Reviewed-by: Shan Hai <shan.hai@oracle.com> Signed-off-by: Brian Maly <brian.maly@oracle.com>
1 parent 6a9757c commit 777025e

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

‎fs/xfs/xfs_super.c‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -846,17 +846,18 @@ xfs_init_mount_workqueues(
846846
goto out_destroy_unwritten;
847847

848848
mp->m_reclaim_workqueue = alloc_workqueue("xfs-reclaim/%s",
849-
WQ_FREEZABLE, 0, mp->m_fsname);
849+
WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
850850
if (!mp->m_reclaim_workqueue)
851851
goto out_destroy_cil;
852852

853853
mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
854-
WQ_FREEZABLE|WQ_HIGHPRI, 0, mp->m_fsname);
854+
WQ_MEM_RECLAIM|WQ_FREEZABLE|WQ_HIGHPRI, 0,
855+
mp->m_fsname);
855856
if (!mp->m_log_workqueue)
856857
goto out_destroy_reclaim;
857858

858859
mp->m_eofblocks_workqueue = alloc_workqueue("xfs-eofblocks/%s",
859-
WQ_FREEZABLE, 0, mp->m_fsname);
860+
WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
860861
if (!mp->m_eofblocks_workqueue)
861862
goto out_destroy_log;
862863

0 commit comments

Comments
 (0)