From: Mike Snitzer <snitzer@kernel.org>
To: linux-xfs@vger.kernel.org
Cc: Dave Chinner <david@fromorbit.com>,
Brian Foster <bfoster@redhat.com>,
linux-nfs@vger.kernel.org
Subject: [PATCH v2] xfs: enable WQ_MEM_RECLAIM on m_sync_workqueue
Date: Sun, 30 Jun 2024 12:35:17 -0400 [thread overview]
Message-ID: <ZoGJRSe98wZFDK36@kernel.org> (raw)
In-Reply-To: <Zn7icFF_NxqkoOHR@kernel.org>
The need for this fix was exposed while developing a new NFS feature
called "localio" which bypasses the network, if both the client and
server are on the same host, see:
https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/log/?h=nfs-localio-for-6.11
Because NFS's nfsiod_workqueue enables WQ_MEM_RECLAIM, writeback will
call into NFS and if localio is enabled the NFS client will call
directly into xfs_file_write_iter, this causes the following
backtrace when running xfstest generic/476 against NFS with localio:
workqueue: WQ_MEM_RECLAIM writeback:wb_workfn is flushing !WQ_MEM_RECLAIM xfs-sync/vdc:xfs_flush_inodes_worker
WARNING: CPU: 6 PID: 8525 at kernel/workqueue.c:3706 check_flush_dependency+0x2a4/0x328
Modules linked in:
CPU: 6 PID: 8525 Comm: kworker/u71:5 Not tainted 6.10.0-rc3-ktest-00032-g2b0a133403ab #18502
Hardware name: linux,dummy-virt (DT)
Workqueue: writeback wb_workfn (flush-0:33)
pstate: 400010c5 (nZcv daIF -PAN -UAO -TCO -DIT +SSBS BTYPE=--)
pc : check_flush_dependency+0x2a4/0x328
lr : check_flush_dependency+0x2a4/0x328
sp : ffff0000c5f06bb0
x29: ffff0000c5f06bb0 x28: ffff0000c998a908 x27: 1fffe00019331521
x26: ffff0000d0620900 x25: ffff0000c5f06ca0 x24: ffff8000828848c0
x23: 1fffe00018be0d8e x22: ffff0000c1210000 x21: ffff0000c75fde00
x20: ffff800080bfd258 x19: ffff0000cad63400 x18: ffff0000cd3a4810
x17: 0000000000000000 x16: 0000000000000000 x15: ffff800080508d98
x14: 0000000000000000 x13: 204d49414c434552 x12: 1fffe0001b6eeab2
x11: ffff60001b6eeab2 x10: dfff800000000000 x9 : ffff60001b6eeab3
x8 : 0000000000000001 x7 : 00009fffe491154e x6 : ffff0000db775593
x5 : ffff0000db775590 x4 : ffff0000db775590 x3 : 0000000000000000
x2 : 0000000000000027 x1 : ffff600018be0d62 x0 : dfff800000000000
Call trace:
check_flush_dependency+0x2a4/0x328
__flush_work+0x184/0x5c8
flush_work+0x18/0x28
xfs_flush_inodes+0x68/0x88
xfs_file_buffered_write+0x128/0x6f0
xfs_file_write_iter+0x358/0x448
nfs_local_doio+0x854/0x1568
nfs_initiate_pgio+0x214/0x418
nfs_generic_pg_pgios+0x304/0x480
nfs_pageio_doio+0xe8/0x240
nfs_pageio_complete+0x160/0x480
nfs_writepages+0x300/0x4f0
do_writepages+0x12c/0x4a0
__writeback_single_inode+0xd4/0xa68
writeback_sb_inodes+0x470/0xcb0
__writeback_inodes_wb+0xb0/0x1d0
wb_writeback+0x594/0x808
wb_workfn+0x5e8/0x9e0
process_scheduled_works+0x53c/0xd90
worker_thread+0x370/0x8c8
kthread+0x258/0x2e8
ret_from_fork+0x10/0x20
Fix this by enabling WQ_MEM_RECLAIM on XFS's m_sync_workqueue.
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
---
fs/xfs/xfs_super.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[v2: dropped RFC, this fixes xfstests generic/476, resubmitting with more feeling]
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 27e9f749c4c7..dbe6af00708b 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -574,7 +574,8 @@ xfs_init_mount_workqueues(
goto out_destroy_blockgc;
mp->m_sync_workqueue = alloc_workqueue("xfs-sync/%s",
- XFS_WQFLAGS(WQ_FREEZABLE), 0, mp->m_super->s_id);
+ XFS_WQFLAGS(WQ_FREEZABLE | WQ_MEM_RECLAIM),
+ 0, mp->m_super->s_id);
if (!mp->m_sync_workqueue)
goto out_destroy_inodegc;
--
2.44.0
next prev parent reply other threads:[~2024-06-30 16:35 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-28 16:18 [RFC PATCH] xfs: enable WQ_MEM_RECLAIM on m_sync_workqueue Mike Snitzer
2024-06-30 16:35 ` Mike Snitzer [this message]
2024-06-30 23:46 ` [PATCH v2] " Dave Chinner
2024-07-01 4:45 ` Christoph Hellwig
2024-07-02 23:51 ` Dave Chinner
2024-07-03 11:29 ` NeilBrown
2024-07-03 14:15 ` Christoph Hellwig
2024-07-03 23:02 ` Dave Chinner
2024-07-09 23:12 ` NeilBrown
2024-07-11 11:55 ` Dave Chinner
2024-07-01 14:13 ` Mike Snitzer
2024-07-02 12:33 ` Trond Myklebust
2024-07-02 13:04 ` Dave Chinner
2024-07-02 14:00 ` Trond Myklebust
2024-07-02 23:15 ` Dave Chinner
2024-07-06 0:32 ` NeilBrown
2024-07-06 6:13 ` Christoph Hellwig
2024-07-06 6:37 ` Christoph Hellwig
2024-07-09 23:39 ` NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZoGJRSe98wZFDK36@kernel.org \
--to=snitzer@kernel.org \
--cc=bfoster@redhat.com \
--cc=david@fromorbit.com \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.