* [PATCH] md: don't print the same repeated messages about delayed sync operation
@ 2016-08-16 12:26 Artur Paszkiewicz
2016-08-17 17:19 ` Shaohua Li
0 siblings, 1 reply; 2+ messages in thread
From: Artur Paszkiewicz @ 2016-08-16 12:26 UTC (permalink / raw)
To: shli; +Cc: linux-raid, Artur Paszkiewicz
This fixes a long-standing bug that caused a flood of messages like:
"md: delaying data-check of md1 until md2 has finished (they share one
or more physical units)"
It can be reproduced like this:
1. Create at least 3 raid1 arrays on a pair of disks, each on different
partitions.
2. Request a sync operation like 'check' or 'repair' on 2 arrays by
writing to their md/sync_action attribute files. One operation should
start and one should be delayed and a message like the above will be
printed.
3. Issue a write to the third array. Each write will cause 2 copies of
the message to be printed.
This happens when wake_up(&resync_wait) is called, usually by
md_check_recovery(). Then the delayed sync thread again prints the
message and is put to sleep. This patch adds a check in md_do_sync() to
prevent printing this message more than once for the same pair of
devices.
Reported-by: Sven Koehler <sven.koehler@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=151801
Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
---
drivers/md/md.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 2c3ab6f..5096b48 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7862,6 +7862,7 @@ void md_do_sync(struct md_thread *thread)
*/
do {
+ int mddev2_minor = -1;
mddev->curr_resync = 2;
try_again:
@@ -7891,10 +7892,14 @@ void md_do_sync(struct md_thread *thread)
prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
mddev2->curr_resync >= mddev->curr_resync) {
- printk(KERN_INFO "md: delaying %s of %s"
- " until %s has finished (they"
- " share one or more physical units)\n",
- desc, mdname(mddev), mdname(mddev2));
+ if (mddev2_minor != mddev2->md_minor) {
+ mddev2_minor = mddev2->md_minor;
+ printk(KERN_INFO "md: delaying %s of %s"
+ " until %s has finished (they"
+ " share one or more physical units)\n",
+ desc, mdname(mddev),
+ mdname(mddev2));
+ }
mddev_put(mddev2);
if (signal_pending(current))
flush_signals(current);
--
2.9.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] md: don't print the same repeated messages about delayed sync operation
2016-08-16 12:26 [PATCH] md: don't print the same repeated messages about delayed sync operation Artur Paszkiewicz
@ 2016-08-17 17:19 ` Shaohua Li
0 siblings, 0 replies; 2+ messages in thread
From: Shaohua Li @ 2016-08-17 17:19 UTC (permalink / raw)
To: Artur Paszkiewicz; +Cc: linux-raid
On Tue, Aug 16, 2016 at 02:26:08PM +0200, Artur Paszkiewicz wrote:
> This fixes a long-standing bug that caused a flood of messages like:
> "md: delaying data-check of md1 until md2 has finished (they share one
> or more physical units)"
>
> It can be reproduced like this:
> 1. Create at least 3 raid1 arrays on a pair of disks, each on different
> partitions.
> 2. Request a sync operation like 'check' or 'repair' on 2 arrays by
> writing to their md/sync_action attribute files. One operation should
> start and one should be delayed and a message like the above will be
> printed.
> 3. Issue a write to the third array. Each write will cause 2 copies of
> the message to be printed.
>
> This happens when wake_up(&resync_wait) is called, usually by
> md_check_recovery(). Then the delayed sync thread again prints the
> message and is put to sleep. This patch adds a check in md_do_sync() to
> prevent printing this message more than once for the same pair of
> devices.
>
> Reported-by: Sven Koehler <sven.koehler@gmail.com>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=151801
> Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
> ---
> drivers/md/md.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 2c3ab6f..5096b48 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -7862,6 +7862,7 @@ void md_do_sync(struct md_thread *thread)
> */
>
> do {
> + int mddev2_minor = -1;
> mddev->curr_resync = 2;
>
> try_again:
> @@ -7891,10 +7892,14 @@ void md_do_sync(struct md_thread *thread)
> prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
> if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
> mddev2->curr_resync >= mddev->curr_resync) {
> - printk(KERN_INFO "md: delaying %s of %s"
> - " until %s has finished (they"
> - " share one or more physical units)\n",
> - desc, mdname(mddev), mdname(mddev2));
> + if (mddev2_minor != mddev2->md_minor) {
> + mddev2_minor = mddev2->md_minor;
> + printk(KERN_INFO "md: delaying %s of %s"
> + " until %s has finished (they"
> + " share one or more physical units)\n",
> + desc, mdname(mddev),
> + mdname(mddev2));
> + }
> mddev_put(mddev2);
> if (signal_pending(current))
> flush_signals(current);
applied, thanks!
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-08-17 17:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-16 12:26 [PATCH] md: don't print the same repeated messages about delayed sync operation Artur Paszkiewicz
2016-08-17 17:19 ` Shaohua Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).