linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Luis Chamberlain <mcgrof@kernel.org>
To: Hannes Reinecke <hare@suse.de>
Cc: axboe@kernel.dk, bvanassche@acm.org, ming.lei@redhat.com,
	hch@infradead.org, jack@suse.cz, osandov@fb.com,
	linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC 2/6] block: add flag for add_disk() completion notation
Date: Fri, 16 Jul 2021 13:00:45 -0700	[thread overview]
Message-ID: <20210716200045.rqtrfjzegrf726fr@garbanzo> (raw)
In-Reply-To: <cbaa9f73-92f8-d5a2-4fd7-c05bda112c56@suse.de>

On Fri, Jul 16, 2021 at 07:49:49AM +0200, Hannes Reinecke wrote:
> On 7/15/21 10:23 PM, Luis Chamberlain wrote:
> > Often drivers may have complex setups where it is not
> > clear if their disk completed their respective *add_disk*()
> > call. They either have to invent a setting or, they
> > incorrectly use GENHD_FL_UP. Using GENHD_FL_UP however is
> > used internally so we know when we can add / remove
> > partitions safely. We can easily fail along the way
> > prior to add_disk() completing and still have
> > GENHD_FL_UP set, so it would not be correct in that case
> > to call del_gendisk() on the disk.
> > 
> > Provide a new flag then which allows us to check if
> > *add_disk*() completed, and conversely just make
> > del_gendisk() check for this for drivers so that
> > they can safely call del_gendisk() and we'll figure
> > it out if it is safe for you to call this.
> > 
> > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> > ---
> >   block/genhd.c         |  8 ++++++++
> >   include/linux/genhd.h | 11 ++++++++++-
> >   2 files changed, 18 insertions(+), 1 deletion(-)
> > 
> > diff --git a/block/genhd.c b/block/genhd.c
> > index c6c9c196ff27..72703d243b44 100644
> > --- a/block/genhd.c
> > +++ b/block/genhd.c
> > @@ -630,6 +630,8 @@ static int __device_add_disk(struct device *parent, struct gendisk *disk,
> >   	if (ret)
> >   		goto exit_del_events;
> > +	disk->flags |= GENHD_FL_DISK_ADDED;
> > +
> >   	return 0;
> >   exit_del_events:
> >   	disk_del_events(disk);
> > @@ -677,6 +679,9 @@ EXPORT_SYMBOL(device_add_disk_no_queue_reg);
> >    * with put_disk(), which should be called after del_gendisk(), if
> >    * __device_add_disk() was used.
> >    *
> > + * Drivers can safely call this even if they are not sure if the respective
> > + * __device_add_disk() call succeeded.
> > + *
> >    * Drivers exist which depend on the release of the gendisk to be synchronous,
> >    * it should not be deferred.
> >    *
> > @@ -686,6 +691,9 @@ void del_gendisk(struct gendisk *disk)
> >   {
> >   	might_sleep();
> > +	if (!blk_disk_registered(disk))
> > +		return;
> > +
> >   	if (WARN_ON_ONCE(!disk->queue))
> >   		return;
> > diff --git a/include/linux/genhd.h b/include/linux/genhd.h
> > index dc07a957c9e1..73024416d2d5 100644
> > --- a/include/linux/genhd.h
> > +++ b/include/linux/genhd.h
> > @@ -56,6 +56,10 @@ struct partition_meta_info {
> >    * Must not be set for devices which are removed entirely when the
> >    * media is removed.
> >    *
> > + * ``GENHD_FL_DISK_ADDED`` (0x0002): used to clarify that the
> > + * respective add_disk*() call completed successfully, so that
> > + * we know we can safely process del_gendisk() on the disk.
> > + *
> >    * ``GENHD_FL_CD`` (0x0008): the block device is a CD-ROM-style
> >    * device.
> >    * Affects responses to the ``CDROM_GET_CAPABILITY`` ioctl.
> > @@ -94,7 +98,7 @@ struct partition_meta_info {
> >    * Used for multipath devices.
> >    */
> >   #define GENHD_FL_REMOVABLE			0x0001
> > -/* 2 is unused (used to be GENHD_FL_DRIVERFS) */
> > +#define GENHD_FL_DISK_ADDED			0x0002
> >   /* 4 is unused (used to be GENHD_FL_MEDIA_CHANGE_NOTIFY) */
> >   #define GENHD_FL_CD				0x0008
> >   #define GENHD_FL_UP				0x0010
> > @@ -189,6 +193,11 @@ struct gendisk {
> >   #define disk_to_cdi(disk)	NULL
> >   #endif
> > +static inline bool blk_disk_registered(struct gendisk *disk)
> > +{
> > +	return disk && (disk->flags & GENHD_FL_DISK_ADDED);
> > +}
> > +
> >   static inline int disk_max_parts(struct gendisk *disk)
> >   {
> >   	if (disk->flags & GENHD_FL_EXT_DEVT)
> > 
> Bah. The flag is named 'DISK_ADDED', and the wrapper 'disk_registered'.
> Please use the same wording (either 'added' or 'registered') for both to
> avoid confusion.

Indeed, will stick with blk_disk_added() then.

  Luis

  reply	other threads:[~2021-07-16 20:00 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-15 20:23 [RFC 0/6] block: enhance use of GENHD_FL_UP Luis Chamberlain
2021-07-15 20:23 ` [RFC 1/6] genhd: update docs for GENHD_FL_UP Luis Chamberlain
2021-07-16  5:50   ` Hannes Reinecke
2021-07-19  9:52   ` Christoph Hellwig
2021-07-15 20:23 ` [RFC 2/6] block: add flag for add_disk() completion notation Luis Chamberlain
2021-07-16  5:49   ` Hannes Reinecke
2021-07-16 20:00     ` Luis Chamberlain [this message]
2021-07-19 10:00   ` Christoph Hellwig
2021-07-19 22:38     ` Luis Chamberlain
2021-07-15 20:23 ` [RFC 3/6] md: replace GENHD_FL_UP with GENHD_FL_DISK_ADDED on is_mddev_broken() Luis Chamberlain
2021-07-16  5:51   ` Hannes Reinecke
2021-07-16 20:02     ` Luis Chamberlain
2021-07-28 19:20   ` Guilherme G. Piccoli
2021-07-15 20:23 ` [RFC 4/6] mmc/core/block: replace GENHD_FL_UP with GENHD_FL_DISK_ADDED Luis Chamberlain
2021-07-16  5:51   ` Hannes Reinecke
2021-07-15 20:23 ` [RFC 5/6] nvme: " Luis Chamberlain
2021-07-16  5:53   ` Hannes Reinecke
2021-07-15 20:23 ` [RFC 6/6] fs/block_dev: " Luis Chamberlain
2021-07-19  9:56 ` [RFC 0/6] block: enhance use of GENHD_FL_UP Christoph Hellwig

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=20210716200045.rqtrfjzegrf726fr@garbanzo \
    --to=mcgrof@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=bvanassche@acm.org \
    --cc=hare@suse.de \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ming.lei@redhat.com \
    --cc=osandov@fb.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;
as well as URLs for NNTP newsgroup(s).