All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.