From: Fam Zheng <famz@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Jens Axboe <axboe@kernel.dk>, "Ed L. Cashin" <ed.cashin@acm.org>,
Jiri Kosina <jikos@kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Minchan Kim <minchan@kernel.org>, Nitin Gupta <ngupta@vflare.org>,
Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
Shaohua Li <shli@kernel.org>,
Ulf Hansson <ulf.hansson@linaro.org>,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
Keith Busch <keith.busch@intel.com>,
linuxppc-dev@lists.ozlabs.org, linux-block@vger.kernel.org,
virtualization@lists.linux-foundation.org,
linux-raid@vger.kernel.org, linux-mmc@vger.kernel.org,
linux-mtd@lists.infradead.org, linux-nvme@lists.infradead.org,
Christoph Hellwig <hch@infradead.org>,
famz@redhat.com
Subject: [PATCH v2 00/12] gendisk: Generate uevent after attribute available
Date: Thu, 30 Jun 2016 09:59:41 +0800 [thread overview]
Message-ID: <20160630015953.6888-1-famz@redhat.com> (raw)
The race condition is noticed between disk_add() and disk attributes, on
virtio-blk hotplug.
Userspace listens to the KOBJ_ADD uevent generated in add_disk(). At that
point we haven't created the serial attribute file, therefore depending
on how fast udev reacts, the /dev/disk/by-id/ entry doesn't always get
created.
As pointed out by Christoph Hellwig in the specific fix [1], virtio-blk is not
the only driver that suffers from this, so we cannot count on every driver to
send events manually. Moreover as suggested in uevent documentation, it is
advised to defer the KOBJ_ADD event until all attributes are ready:
Documentation/kobject.txt:
> Use the KOBJ_ADD action for when the kobject is first added to the kernel.
> This should be done only after any attributes or children of the kobject
> have been initialized properly, as userspace will instantly start to look
> for them when this call happens.
Unfortunately it seems impossible to fix this generally without touching the
offending callers. The approach I'm proposing here is adding a flag to
suppress uevent in add_disk(), which is patch 1, then in later patches, convert
any caller to only trigger the uevent when attributes are added.
[1] https://lkml.org/lkml/2016/6/28/550
Fam Zheng (12):
genhd: Add "gen_uevent" parameter to add_disk
genhd: Honor gen_uevent and add disk_gen_uevents
virtio-blk: Generate uevent after attribute available
axonrom: Generate uevent after attribute available
aoeblk: Generate uevent after attribute available
mtip32xx: Generate uevent after attribute available
pktcdvd: Generate uevent after attribute available
zram: Generate uevent after attribute available
md: Generate uevent after attribute available
mmc: Generate uevent after attribute available
mtd: Generate uevent after attribute available
nvme: Generate uevent after attribute available
arch/m68k/emu/nfblock.c | 2 +-
arch/powerpc/sysdev/axonram.c | 3 ++-
arch/um/drivers/ubd_kern.c | 2 +-
arch/xtensa/platforms/iss/simdisk.c | 2 +-
block/genhd.c | 26 +++++++++++++++++++++-----
drivers/block/DAC960.c | 2 +-
drivers/block/amiflop.c | 2 +-
drivers/block/aoe/aoeblk.c | 3 ++-
drivers/block/ataflop.c | 2 +-
drivers/block/brd.c | 4 ++--
drivers/block/cciss.c | 2 +-
drivers/block/drbd/drbd_main.c | 2 +-
drivers/block/floppy.c | 2 +-
drivers/block/hd.c | 2 +-
drivers/block/loop.c | 2 +-
drivers/block/mg_disk.c | 2 +-
drivers/block/mtip32xx/mtip32xx.c | 3 ++-
drivers/block/nbd.c | 2 +-
drivers/block/null_blk.c | 2 +-
drivers/block/osdblk.c | 2 +-
drivers/block/paride/pcd.c | 2 +-
drivers/block/paride/pd.c | 2 +-
drivers/block/paride/pf.c | 2 +-
drivers/block/pktcdvd.c | 4 +++-
drivers/block/ps3disk.c | 2 +-
drivers/block/ps3vram.c | 2 +-
drivers/block/rbd.c | 2 +-
drivers/block/rsxx/dev.c | 2 +-
drivers/block/skd_main.c | 2 +-
drivers/block/sunvdc.c | 2 +-
drivers/block/swim.c | 2 +-
drivers/block/swim3.c | 2 +-
drivers/block/sx8.c | 2 +-
drivers/block/umem.c | 2 +-
drivers/block/virtio_blk.c | 3 ++-
drivers/block/xen-blkfront.c | 2 +-
drivers/block/xsysace.c | 2 +-
drivers/block/z2ram.c | 2 +-
drivers/block/zram/zram_drv.c | 3 ++-
drivers/cdrom/gdrom.c | 2 +-
drivers/ide/ide-cd.c | 2 +-
drivers/ide/ide-gd.c | 2 +-
drivers/lightnvm/core.c | 2 +-
drivers/md/bcache/super.c | 4 ++--
drivers/md/dm.c | 2 +-
drivers/md/md.c | 3 ++-
drivers/memstick/core/ms_block.c | 2 +-
drivers/memstick/core/mspro_block.c | 2 +-
drivers/mmc/card/block.c | 3 ++-
drivers/mtd/mtd_blkdevs.c | 3 ++-
drivers/mtd/ubi/block.c | 2 +-
drivers/nvdimm/blk.c | 2 +-
drivers/nvdimm/btt.c | 2 +-
drivers/nvdimm/pmem.c | 2 +-
drivers/nvme/host/core.c | 3 ++-
drivers/s390/block/dasd_genhd.c | 2 +-
drivers/s390/block/dcssblk.c | 2 +-
drivers/s390/block/scm_blk.c | 2 +-
drivers/s390/block/xpram.c | 2 +-
drivers/sbus/char/jsflash.c | 2 +-
drivers/scsi/sd.c | 2 +-
drivers/scsi/sr.c | 2 +-
drivers/staging/lustre/lustre/llite/lloop.c | 2 +-
include/linux/genhd.h | 3 ++-
64 files changed, 98 insertions(+), 70 deletions(-)
--
2.9.0
next reply other threads:[~2016-06-30 2:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-30 1:59 Fam Zheng [this message]
2016-06-30 1:59 ` [PATCH v2 01/12] genhd: Add "gen_uevent" parameter to add_disk Fam Zheng
2016-06-30 1:59 ` [PATCH v2 02/12] genhd: Honor gen_uevent and add disk_gen_uevents Fam Zheng
2016-06-30 3:26 ` kbuild test robot
2016-06-30 1:59 ` [PATCH v2 03/12] virtio-blk: Generate uevent after attribute available Fam Zheng
2016-06-30 1:59 ` [PATCH v2 04/12] axonrom: " Fam Zheng
2016-06-30 22:10 ` Dan Williams
2016-07-01 1:03 ` Fam Zheng
2016-06-30 1:59 ` [PATCH v2 05/12] aoeblk: " Fam Zheng
2016-07-01 0:57 ` Ed Cashin
2016-06-30 1:59 ` [PATCH v2 06/12] mtip32xx: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 07/12] pktcdvd: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 08/12] zram: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 09/12] md: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 10/12] mmc: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 11/12] mtd: " Fam Zheng
2016-06-30 1:59 ` [PATCH v2 12/12] nvme: " Fam Zheng
2016-06-30 6:24 ` [PATCH v2 00/12] gendisk: " Christoph Hellwig
2016-06-30 6:35 ` Fam Zheng
2016-06-30 6:38 ` Christoph Hellwig
2016-07-01 1:01 ` Fam Zheng
2016-07-01 1:29 ` Dan Williams
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=20160630015953.6888-1-famz@redhat.com \
--to=famz@redhat.com \
--cc=axboe@kernel.dk \
--cc=benh@kernel.crashing.org \
--cc=computersforpeace@gmail.com \
--cc=dwmw2@infradead.org \
--cc=ed.cashin@acm.org \
--cc=hch@infradead.org \
--cc=jikos@kernel.org \
--cc=keith.busch@intel.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-raid@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=minchan@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=mst@redhat.com \
--cc=ngupta@vflare.org \
--cc=paulus@samba.org \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=shli@kernel.org \
--cc=ulf.hansson@linaro.org \
--cc=virtualization@lists.linux-foundation.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 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®