From: illofspeed <volvo.mail@gmail.com>
To: dm-devel@lists.linux.dev
Cc: agk@redhat.com, snitzer@kernel.org, mpatocka@redhat.com,
bmarzins@redhat.com, hare@suse.de, dlemoal@kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 3/3] dm zoned: keep polling for idle reclaim after a reclaim pass
Date: Sat, 10 Oct 2026 12:51:22 +0200 [thread overview]
Message-ID: <20261010105122.398-4-volvo.mail@gmail.com> (raw)
In-Reply-To: <20261010105122.398-1-volvo.mail@gmail.com>
dmz_reclaim_work() re-arms its DMZ_IDLE_PERIOD poll only when
dmz_should_reclaim() returns false at the start of a pass. After a pass
it calls dmz_schedule_reclaim(), which queues the work only if reclaim
is needed right now. When a pass ends while the target is still busy and
has enough free zones, nothing is queued at all. Once the target goes
idle, nothing re-evaluates dmz_should_reclaim() until new I/O arrives or
user space sends a "reclaim" message, so the random or cache zones that
filled up under load stay full.
Seen on md RAID5 members on 27 TB host-managed drives: after heavy
writes the random zones stayed full for hours on idle targets; the
workaround was a timer sending "dmsetup message <dev> 0 reclaim". With
this patch the emptied and filled zones were reclaimed within minutes of
the targets going idle, without the timer.
After a pass, requeue the work immediately if reclaim is still needed,
otherwise re-arm the idle poll.
Fixes: 3b1a94c88b79 ("dm zoned: drive-managed zoned block device target")
Assisted-by: LLM
Signed-off-by: illofspeed <volvo.mail@gmail.com>
---
drivers/md/dm-zoned-reclaim.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/md/dm-zoned-reclaim.c b/drivers/md/dm-zoned-reclaim.c
index 2bcc163d209..7feb2628bd0 100644
--- a/drivers/md/dm-zoned-reclaim.c
+++ b/drivers/md/dm-zoned-reclaim.c
@@ -557,7 +557,16 @@ static void dmz_reclaim_work(struct work_struct *work)
}
}
- dmz_schedule_reclaim(zrc);
+ /*
+ * Keep the worker alive: when a pass ends while the target is busy
+ * with enough free zones, dmz_schedule_reclaim() queues nothing and
+ * the idle poll is never re-armed, so zones filled under load are not
+ * reclaimed once the target goes idle.
+ */
+ if (dmz_should_reclaim(zrc, dmz_reclaim_percentage(zrc)))
+ mod_delayed_work(zrc->wq, &zrc->work, 0);
+ else
+ mod_delayed_work(zrc->wq, &zrc->work, DMZ_IDLE_PERIOD);
}
/*
--
2.43.0
prev parent reply other threads:[~2026-10-10 10:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-10 10:51 [PATCH 0/3] dm zoned: fix two idle reclaim problems illofspeed
2026-10-10 10:51 ` [PATCH 1/3] dm zoned: back off when reclaim finds no destination zone illofspeed
2026-10-13 7:15 ` Hannes Reinecke
2026-10-13 8:01 ` Kyrylo Biryuk
2026-10-10 10:51 ` [PATCH 2/3] dm zoned: do not reclaim a random zone into another random zone illofspeed
2026-10-10 10:51 ` illofspeed [this message]
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=20261010105122.398-4-volvo.mail@gmail.com \
--to=volvo.mail@gmail.com \
--cc=agk@redhat.com \
--cc=bmarzins@redhat.com \
--cc=dlemoal@kernel.org \
--cc=dm-devel@lists.linux.dev \
--cc=hare@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mpatocka@redhat.com \
--cc=snitzer@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.