mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Yu Kuai <yukuai1@huaweicloud.com>
To: Xiao Ni <xni@redhat.com>, Yu Kuai <yukuai1@huaweicloud.com>
Cc: mpatocka@redhat.com, heinzm@redhat.com,
	blazej.kucman@linux.intel.com, agk@redhat.com,
	snitzer@kernel.org, dm-devel@lists.linux.dev, song@kernel.org,
	neilb@suse.de, shli@fb.com, akpm@osdl.org,
	linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org,
	yi.zhang@huawei.com, yangerkun@huawei.com,
	Jonathan Brassow <jbrassow@redhat.com>,
	"yukuai (C)" <yukuai3@huawei.com>
Subject: Re: [PATCH v5 01/14] md: don't ignore suspended array in md_check_recovery()
Date: Sun, 18 Feb 2024 16:47:49 +0800	[thread overview]
Message-ID: <ed1fc73d-57f8-6862-76f4-2e6ff0cd5fc8@huaweicloud.com> (raw)
In-Reply-To: <CALTww2-_uvkB7M=_J_6DgW1kfzW2rpQgp0vyKt7EYvON41adGw@mail.gmail.com>

Hi,

在 2024/02/18 16:07, Xiao Ni 写道:
> On Sun, Feb 18, 2024 at 2:22 PM Yu Kuai <yukuai1@huaweicloud.com> wrote:
>>
>> Hi,
>>
>> 在 2024/02/18 13:07, Xiao Ni 写道:
>>> On Sun, Feb 18, 2024 at 11:24 AM Yu Kuai <yukuai1@huaweicloud.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> 在 2024/02/18 11:15, Xiao Ni 写道:
>>>>> On Sun, Feb 18, 2024 at 10:34 AM Yu Kuai <yukuai1@huaweicloud.com> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> 在 2024/02/18 10:27, Xiao Ni 写道:
>>>>>>> On Sun, Feb 18, 2024 at 9:46 AM Yu Kuai <yukuai1@huaweicloud.com> wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> 在 2024/02/18 9:33, Xiao Ni 写道:
>>>>>>>>> The deadlock problem mentioned in this patch should not be right?
>>>>>>>>
>>>>>>>> No, I think it's right. Looks like you are expecting other problems,
>>>>>>>> like mentioned in patch 6, to be fixed by this patch.
>>>>>>>
>>>>>>> Hi Kuai
>>>>>>>
>>>>>>> Could you explain why step1 and step2 from this comment can happen
>>>>>>> simultaneously? From the log, the process should be
>>>>>>> The process is :
>>>>>>> dev_remove->dm_destroy->__dm_destroy->dm_table_postsuspend_targets(raid_postsuspend)
>>>>>>> -> dm_table_destroy(raid_dtr).
>>>>>>> After suspending the array, it calls raid_dtr. So these two functions
>>>>>>> can't happen simultaneously.
>>>>>>
>>>>>> You're removing the target directly, however, dm can suspend the disk
>>>>>> directly, you can simplily:
>>>>>>
>>>>>> 1) dmsetup suspend xxx
>>>>>> 2) dmsetup remove xxx
>>>>>
>>>>> For dm-raid, the design of suspend stops sync thread first and then it
>>>>> calls mddev_suspend to suspend array. So I'm curious why the sync
>>>>> thread can still exit when array is suspended. I know the reason now.
>>>>> Because before f52f5c71f (md: fix stopping sync thread), the process
>>>>> is raid_postsuspend->md_stop_writes->__md_stop_writes
>>>>> (__md_stop_writes sets MD_RECOVERY_FROZEN). In patch f52f5c71f, it
>>>>> doesn't set MD_RECOVERY_FROZEN in __md_stop_writes anymore.
>>>>>
>>>>> The process changes to
>>>>> 1. raid_postsuspend->md_stop_writes->__md_stop_writes->stop_sync_thread
>>>>> (wait until MD_RECOVERY_RUNNING clears)
>>>>> 2. md thread -> md_check_recovery -> unregister_sync_thread ->
>>>>> md_reap_sync_thread (clears MD_RECOVERY_RUNNING, stop_sync_thread
>>>>> returns, md_reap_sync_thread sets MD_RECOVERY_NEEDED)
>>>>> 3. raid_postsuspend->mddev_suspend
>>>>> 4. md sync thread starts again because __md_stop_writes doesn't set
>>>>> MD_RECOVERY_FROZEN.
>>>>> It's the reason why we can see sync thread still happens when raid is suspended.
>>>>>
>>>>> So the patch fix this problem should:
>>>>
>>>> As I said, this is really a different problem from this patch, and it is
>>>> fixed seperately by patch 9. Please take a look at that patch.
>>>
>>> I think we're talking about the same problem. In patch07 it has a new
>>> api md_frozen_sync_thread. It sets MD_RECOVERY_FROZEN before
>>> stop_sync_thread. This is right. If we use this api in
>>> raid_postsuspend, sync thread can't restart. So the deadlock can't
>>> happen anymore?
>>
>> We are not talking about the same problem at all. This patch just fix a
>> simple problem in md/raid(not dm-raid). And the deadlock can also be
>> triggered for md/raid the same.
>>
>> - mddev_suspend() doesn't handle sync_thread at all;
>> - md_check_recovery() ignore suspended array;
>>
>> Please keep in mind this patch just fix the above case. The deadlock in
>> dm-raid is just an example of problems caused by this. Fix the deadlock
>> other way doesn't mean this case is fine.
> 
> Because this patch set is used to fix dm raid deadlocks. But this
> patch changes logic, it looks like more a feature - "we can start/stop
> sync thread when array is suspended". Because this patch is added many
> years ago and dm raid works well. If we change this, there is
> possibilities to introduce new problems. Now we should try to walk
> slowly.

This patch itself really is quite simple, it fixes problems for md/raid,
and can be triggered by dm-raid as well. This patch will be needed
regardless of dm-raid, and it's absolutely not a feature.

For dm-raid, there is no doubt that sync_thread should be stopped before
suspend, and keep frozen until resume, and this behaviour is not changed
at all and will never change. Other patches actually tries to gurantee
this. If you think this patch can introduce new problems for dm-raid,
please be more specific.

The problem in dm-raid is that it relies on __md_stop_writes() to stop
and frozen sync_thread, while it also relies that MD_RECOVERY_FROZEN is
not set, and this is abuse of MD_RECOVERY_FROZEN. And if you still think
there are problems with considering of the entire patchset, feel free to
discuss. :)

Thanks,
Kuai


  reply	other threads:[~2024-02-18  8:47 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-01  9:25 [PATCH v5 00/14] dm-raid/md/raid: fix v6.7 regressions Yu Kuai
2024-02-01  9:25 ` [PATCH v5 01/14] md: don't ignore suspended array in md_check_recovery() Yu Kuai
2024-02-16  6:58   ` Xiao Ni
2024-02-18  1:14     ` Yu Kuai
2024-02-18  1:33       ` Xiao Ni
2024-02-18  1:46         ` Yu Kuai
2024-02-18  2:27           ` Xiao Ni
2024-02-18  2:34             ` Yu Kuai
2024-02-18  3:15               ` Xiao Ni
2024-02-18  3:24                 ` Yu Kuai
2024-02-18  5:07                   ` Xiao Ni
2024-02-18  6:22                     ` Yu Kuai
2024-02-18  8:07                       ` Xiao Ni
2024-02-18  8:47                         ` Yu Kuai [this message]
2024-02-19  7:10                           ` Xiao Ni
2024-02-19  8:19                             ` Yu Kuai
2024-02-01  9:25 ` [PATCH v5 02/14] md: don't ignore read-only " Yu Kuai
2024-02-01  9:25 ` [PATCH v5 03/14] md: make sure md_do_sync() will set MD_RECOVERY_DONE Yu Kuai
2024-02-18  5:56   ` Xiao Ni
2024-02-18  6:51     ` Yu Kuai
2024-02-18  8:41       ` Xiao Ni
2024-02-18  8:59         ` Yu Kuai
2024-02-01  9:25 ` [PATCH v5 04/14] md: don't register sync_thread for reshape directly Yu Kuai
2024-02-28 12:07   ` Xiao Ni
2024-02-28 12:44     ` Yu Kuai
2024-02-28 12:57       ` Xiao Ni
2024-02-01  9:25 ` [PATCH v5 05/14] md: don't suspend the array for interrupted reshape Yu Kuai
2024-02-29  2:10   ` Xiao Ni
2024-02-29  2:14     ` Yu Kuai
2024-02-01  9:25 ` [PATCH v5 06/14] md: fix missing release of 'active_io' for flush Yu Kuai
2024-02-08  7:47   ` Song Liu
2024-02-01  9:25 ` [PATCH v5 07/14] md: export helpers to stop sync_thread Yu Kuai
2024-02-15 22:27   ` Song Liu
2024-02-18  2:35     ` Yu Kuai
2024-02-01  9:25 ` [PATCH v5 08/14] md: export helper md_is_rdwr() Yu Kuai
2024-02-01  9:25 ` [PATCH v5 09/14] dm-raid: really frozen sync_thread during suspend Yu Kuai
2024-02-18  4:53   ` Xiao Ni
2024-02-18  6:34     ` Yu Kuai
2024-02-19  7:27       ` Xiao Ni
2024-02-19  7:53         ` Yu Kuai
2024-02-19  8:45           ` Xiao Ni
2024-02-01  9:25 ` [PATCH v5 10/14] md/dm-raid: don't call md_reap_sync_thread() directly Yu Kuai
2024-02-01  9:25 ` [PATCH v5 11/14] dm-raid: add a new helper prepare_suspend() in md_personality Yu Kuai
2024-02-01  9:25 ` [PATCH v5 12/14] md/raid456: fix a deadlock for dm-raid456 while io concurrent with reshape Yu Kuai
2024-02-01  9:25 ` [PATCH v5 13/14] dm-raid: fix lockdep waring in "pers->hot_add_disk" Yu Kuai
2024-02-01  9:25 ` [PATCH v5 14/14] dm-raid: remove mddev_suspend/resume() Yu Kuai
2024-02-03  3:19 ` [PATCH v5 00/14] dm-raid/md/raid: fix v6.7 regressions Benjamin Marzinski
2024-02-04  1:35   ` Yu Kuai
2024-02-04  7:00     ` Yu Kuai
2024-02-05 19:35     ` Benjamin Marzinski
2024-02-06  1:36       ` Yu Kuai
2024-02-06  3:57         ` Benjamin Marzinski
2024-02-06  7:03           ` Yu Kuai
2024-02-08  8:04           ` Song Liu
2024-02-08 23:17             ` Benjamin Marzinski
2024-02-09 22:37               ` Song Liu
2024-02-26  7:58                 ` Su Yue
2024-02-12 22:30 ` Song Liu
2024-02-15 22:24 ` Song Liu
2024-02-16  5:46   ` Benjamin Marzinski
2024-02-18  1:24     ` Yu Kuai
2024-02-19 16:05       ` Benjamin Marzinski
2024-02-20  3:09         ` Yu Kuai
2024-02-22  9:00     ` Yu Kuai
2024-02-28  1:19       ` Benjamin Marzinski
2024-02-28  1:35         ` Yu Kuai

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=ed1fc73d-57f8-6862-76f4-2e6ff0cd5fc8@huaweicloud.com \
    --to=yukuai1@huaweicloud.com \
    --cc=agk@redhat.com \
    --cc=akpm@osdl.org \
    --cc=blazej.kucman@linux.intel.com \
    --cc=dm-devel@lists.linux.dev \
    --cc=heinzm@redhat.com \
    --cc=jbrassow@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=mpatocka@redhat.com \
    --cc=neilb@suse.de \
    --cc=shli@fb.com \
    --cc=snitzer@kernel.org \
    --cc=song@kernel.org \
    --cc=xni@redhat.com \
    --cc=yangerkun@huawei.com \
    --cc=yi.zhang@huawei.com \
    --cc=yukuai3@huawei.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®