Linux SCSI subsystem development
 help / color / mirror / Atom feed
From: tarunsahu@google.com
To: David Jeffery <djeffery@redhat.com>,
	linux-kernel@vger.kernel.org,  driver-core@lists.linux.dev,
	linux-pci@vger.kernel.org,  linux-scsi@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	 "Rafael J. Wysocki" <rafael@kernel.org>,
	Danilo Krummrich <dakr@kernel.org>
Cc: "Pasha Tatashin" <tatashin@google.com>,
	"Michał Cłapiński" <mclapinski@google.com>,
	"Jordan Richards" <jordanrichards@google.com>,
	"Ewan Milne" <emilne@redhat.com>,
	"John Meneghini" <jmeneghi@redhat.com>,
	"Lombardi, Maurizio" <mlombard@redhat.com>,
	"Stuart Hayes" <stuart.w.hayes@gmail.com>,
	"Laurence Oberman" <loberman@redhat.com>,
	"Bart Van Assche" <bvanassche@acm.org>,
	"Bjorn Helgaas" <helgaas@kernel.org>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	"John Garry" <john.g.garry@oracle.com>,
	kexec@lists.infradead.org, "David Jeffery" <djeffery@redhat.com>
Subject: Re: [PATCH v15 0/5] shut down devices asynchronously
Date: Tue, 12 May 2026 16:21:44 +0000	[thread overview]
Message-ID: <9huzh5ocmwdj.fsf@tarunix.c.googlers.com> (raw)
In-Reply-To: <20260429175016.7915-1-djeffery@redhat.com>

David Jeffery <djeffery@redhat.com> writes:

FWIW,
I have tested this series by opting it for NVMe devices and observed
significant performance benefit (from 9 sec to 2 sec).

Please feel free to use
Tested-by: Tarun Sahu <tarunsahu@google.com>

> This patchset allows the kernel to shutdown devices asynchronously and
> unrelated async devices to be shut down in parallel to each other.
>
> Only devices which explicitly enable it are shut down asynchronously. The
> default is for a device to be shut down from the synchronous shutdown loop.
>
> This can dramatically reduce system shutdown/reboot time on systems that
> have multiple devices that take many seconds to shut down (like certain
> NVMe drives). On one system tested, the shutdown time went from 11 minutes
> without this patch to 55 seconds with the patch. And on another system from
> 80 seconds to 11.
>
> And thank you to everyone who has spent some of their valuable time
> providing reviews, suggestions, criticisms, or tests on the various
> iterations of this patchset.
>
>
> Changes from V14:
>
> Remove unneeded use of '!!' with boolean type
>
> Changes from V13:
>
> Remove duplicate flagging of async shutdown on scsi hosts/targets/devices
>
> Changes from V12:
>
> Only acquire a parent reference if acquiring the parent's lock
> device_enable_async_shutdown should return void
> Minor comment and description cleanups
>
> Changes from V11:
>
>   * Swap the order of the first two patches
>   * Rework conditional parent locking so that lock and unlock no longer use
>     separate conditional checks
>   * Remove an used variable
>   * Comment and description text cleanups
>
> Changes from V10:
>
> Reworked to more closely match the design used for async suspend
>   * No longer uses async subsystem cookies for synchronization
>   * Minimized changes to struct device
>   * Enable async shutdown for pci and scsi devices which support async suspend
>
> Changes from V9:
>
> Address resource and timing issues when spawning a unique async thread
> for every device during shutdown:
>   * Make the asynchronous threads able to shut down multiple devices,
>     instead of spawning a unique thread for every device.
>   * Modify core kernel async code with a custom wake function so it
>     doesn't wake up a thread waiting to synchronize on a cookie until
>     the cookie has reached the desired value, instead of waking up
>     every waiting thread to check the cookie every time an async thread
>     ends.
>
> Changes from V8:
>
> Deal with shutdown hangs resulting when a parent/supplier device is
>   later in the devices_kset list than its children/consumers:
>   * Ignore sync_state_only devlinks for shutdown dependencies
>   * Ignore shutdown_after for devices that don't want async shutdown
>   * Add a sanity check to revert to sync shutdown for any device that
>     would otherwise wait for a child/consumer shutdown that hasn't
>     already been scheduled
>
> Changes from V7:
>
> Do not expose driver async_shutdown_enable in sysfs.
> Wrapped a long line.
>
> Changes from V6:
>
> Removed a sysfs attribute that allowed the async device shutdown to be
> "on" (with driver opt-out), "safe" (driver opt-in), or "off"... what was
> previously "safe" is now the only behavior, so drivers now only need to
> have the option to enable or disable async shutdown.
>
> Changes from V5:
>
> Separated into multiple patches to make review easier.
> Reworked some code to make it more readable
> Made devices wait for consumers to shut down, not just children
>   (suggested by David Jeffery)
>
> Changes from V4:
>
> Change code to use cookies for synchronization rather than async domains
> Allow async shutdown to be disabled via sysfs, and allow driver opt-in or
>   opt-out of async shutdown (when not disabled), with ability to control
>   driver opt-in/opt-out via sysfs
>   
> Changes from V3:
>
> Bug fix (used "parent" not "dev->parent" in device_shutdown)
>  
> Changes from V2:
>  
> Removed recursive functions to schedule children to be shutdown before
>   parents, since existing device_shutdown loop will already do this
>  
> Changes from V1:
>
> Rewritten using kernel async code (suggested by Lukas Wunner)
>
>
> Stuart Hayes (2):
>   driver core: separate function to shutdown one device
>   driver core: do not always lock parent in shutdown
>
> David Jeffery (3):
>   driver core: async device shutdown infrastructure
>   PCI: Enable async shutdown support
>   scsi: Enable async shutdown support
>
>  drivers/base/base.h       |   2 +
>  drivers/base/core.c       | 180 ++++++++++++++++++++++++++++++--------
>  drivers/pci/probe.c       |   2 +
>  drivers/scsi/hosts.c      |   2 +
>  drivers/scsi/scsi_sysfs.c |   3 +
>  include/linux/device.h    |  14 ++-
>  6 files changed, 166 insertions(+), 37 deletions(-)
>
> -- 
> 2.53.0

      parent reply	other threads:[~2026-05-12 16:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-29 17:50 [PATCH v15 0/5] shut down devices asynchronously David Jeffery
2026-04-29 17:50 ` [PATCH 1/5] driver core: separate function to shutdown one device David Jeffery
2026-04-29 17:50 ` [PATCH 2/5] driver core: do not always lock parent in shutdown David Jeffery
2026-04-29 17:50 ` [PATCH 3/5] driver core: async device shutdown infrastructure David Jeffery
2026-04-29 17:50 ` [PATCH 4/5] PCI: Enable async shutdown support David Jeffery
2026-05-06 18:28   ` Bjorn Helgaas
2026-05-06 21:10     ` David Jeffery
2026-05-06 21:24       ` Bjorn Helgaas
2026-04-29 17:50 ` [PATCH 5/5] scsi: " David Jeffery
2026-05-12 16:21 ` tarunsahu [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=9huzh5ocmwdj.fsf@tarunix.c.googlers.com \
    --to=tarunsahu@google.com \
    --cc=bvanassche@acm.org \
    --cc=dakr@kernel.org \
    --cc=djeffery@redhat.com \
    --cc=driver-core@lists.linux.dev \
    --cc=emilne@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=helgaas@kernel.org \
    --cc=jmeneghi@redhat.com \
    --cc=john.g.garry@oracle.com \
    --cc=jordanrichards@google.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=loberman@redhat.com \
    --cc=martin.petersen@oracle.com \
    --cc=mclapinski@google.com \
    --cc=mlombard@redhat.com \
    --cc=rafael@kernel.org \
    --cc=stuart.w.hayes@gmail.com \
    --cc=tatashin@google.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