All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Luis R. Rodriguez" <mcgrof@kernel.org>
To: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Jens Axboe <axboe@kernel.dk>,
	linux-block@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	=Oleksandr Natalenko <oleksandr@natalenko.name>,
	"Luis R . Rodriguez" <mcgrof@kernel.org>,
	Shaohua Li <shli@kernel.org>,
	linux-raid@vger.kernel.org, Ming Lei <ming.lei@redhat.com>,
	Hannes Reinecke <hare@suse.com>,
	Johannes Thumshirn <jthumshirn@suse.de>
Subject: Re: [PATCH v5 2/8] md: Neither resync nor reshape while the system is frozen
Date: Wed, 4 Oct 2017 03:16:10 +0200	[thread overview]
Message-ID: <20171004011610.GP2294@wotan.suse.de> (raw)
In-Reply-To: <20171002225218.18548-3-bart.vanassche@wdc.com>

On Mon, Oct 02, 2017 at 03:52:12PM -0700, Bart Van Assche wrote:
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 3f7426120a3b..a2cf2a93b0cb 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -8961,6 +8963,37 @@ static void md_stop_all_writes(void)
>  		mdelay(1000*1);
>  }
>  
> +/*
> + * Ensure that neither resyncing nor reshaping occurs while the system is
> + * frozen.
> + */
> +static int md_notify_pm(struct notifier_block *bl, unsigned long state,
> +			void *unused)
> +{
> +	struct mddev *mddev;
> +	struct list_head *tmp;
> +
> +	pr_debug("%s: state = %ld; system_freezing_cnt = %d\n", __func__, state,
> +		 atomic_read(&system_freezing_cnt));
> +
> +	switch (state) {
> +	case PM_HIBERNATION_PREPARE:

Hm, why not also include and use this for PM_SUSPEND_PREPARE and/or
a PM_RESTORE_PREPARE.

        case PM_HIBERNATION_PREPARE:
        case PM_SUSPEND_PREPARE:
        case PM_RESTORE_PREPARE:

> +		md_stop_all_writes();
> +		break;
> +	case PM_POST_HIBERNATION:

Likewise here:

        case PM_POST_SUSPEND:
        case PM_POST_HIBERNATION:
        case PM_POST_RESTORE:

I have revised the kernel suspend ordering and indeed things issued
with the pm notifier should suffice to be processed given we actually
call the pm ops (dpm_prepare()) for device drivers *after* the notifier
is called and then after userspace is frozen. That is:

   pm_suspend() --> enter_state() -->
     sys_sync()
     suspend_prepare() -->
             __pm_notifier_call_chain(PM_SUSPEND_PREPARE, ...);
             suspend_freeze_processes() -->
                     freeze_processes() -->
                             __usermodehelper_set_disable_depth(UMH_DISABLED);
                             freeze all tasks ...
                     freeze_kernel_threads()
     suspend_devices_and_enter() -->
             dpm_suspend_start() -->
                             dpm_prepare()
                             dpm_suspend()
             suspend_enter()  -->
                     platform_suspend_prepare()
                     dpm_suspend_late()
                     freeze_enter()
                     syscore_suspend()

On our way back up:

     enter_state() -->
     suspend_devices_and_enter() --> (bail from loop)
             dpm_resume_end() -->
                     dpm_resume()
                     dpm_complete()
     suspend_finish() -->
             suspend_thaw_processes() -->
                     thaw_processes() -->
                             __usermodehelper_set_disable_depth(UMH_FREEZING);
                             thaw_workqueues();
                             thaw all processes ...
                             usermodehelper_enable();
             pm_notifier_call_chain(PM_POST_SUSPEND);

So notifier would indeed be the right tooling to use here.

  Luis

  reply	other threads:[~2017-10-04  1:16 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-02 22:52 [PATCH v5 0/8] block, scsi, md: Improve suspend and resume Bart Van Assche
2017-10-02 22:52 ` [PATCH v5 1/8] md: Introduce md_stop_all_writes() Bart Van Assche
2017-10-04  1:07   ` Luis R. Rodriguez
2017-10-02 22:52 ` [PATCH v5 2/8] md: Neither resync nor reshape while the system is frozen Bart Van Assche
2017-10-04  1:16   ` Luis R. Rodriguez [this message]
2017-10-04 16:58     ` Bart Van Assche
2017-10-04 16:58       ` Bart Van Assche
2017-10-04 11:30   ` Ming Lei
2017-10-04 15:38     ` Bart Van Assche
2017-10-04 15:38       ` Bart Van Assche
2017-10-02 22:52 ` [PATCH v5 3/8] block: Make q_usage_counter also track legacy requests Bart Van Assche
2017-10-02 22:52 ` [PATCH v5 4/8] block: Convert RQF_PREEMPT into REQ_PREEMPT Bart Van Assche
2017-10-04  6:57   ` Christoph Hellwig
2017-10-02 22:52 ` [PATCH v5 5/8] block: Add the QUEUE_FLAG_PREEMPT_ONLY request queue flag Bart Van Assche
2017-10-04  6:58   ` Christoph Hellwig
2017-10-02 22:52 ` [PATCH v5 6/8] scsi: Reduce suspend latency Bart Van Assche
2017-10-04  7:04   ` Christoph Hellwig
2017-10-04 15:41     ` Bart Van Assche
2017-10-02 22:52 ` [PATCH v5 7/8] scsi: Set QUEUE_FLAG_PREEMPT_ONLY while quiesced Bart Van Assche
2017-10-04  7:06   ` Christoph Hellwig
2017-10-04 15:44     ` Bart Van Assche
2017-10-02 22:52 ` [PATCH v5 8/8] block: Make SCSI device suspend and resume work reliably Bart Van Assche
2017-10-04  7:06   ` Christoph Hellwig
2017-10-04 15:45     ` Bart Van Assche
2017-10-03 16:01 ` [PATCH v5 0/8] block, scsi, md: Improve suspend and resume Oleksandr Natalenko
2017-10-04  6:56 ` Christoph Hellwig
2017-10-04  7:53   ` Ming Lei
2017-10-04  7:56     ` Ming Lei
2017-10-04 15:18     ` Bart Van Assche
2017-10-04 15:31       ` Ming Lei
2017-10-04 22:36         ` Bart Van Assche
2017-10-04 15:21   ` Bart Van Assche

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=20171004011610.GP2294@wotan.suse.de \
    --to=mcgrof@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=bart.vanassche@wdc.com \
    --cc=hare@suse.com \
    --cc=hch@lst.de \
    --cc=jthumshirn@suse.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=ming.lei@redhat.com \
    --cc=oleksandr@natalenko.name \
    --cc=shli@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.