All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/12] gendisk: Generate uevent after attribute available
@ 2016-06-30  1:59 ` Fam Zheng
  0 siblings, 0 replies; 71+ messages in thread
From: Fam Zheng @ 2016-06-30  1:59 UTC (permalink / raw)
  To: linux-kernel
  Cc: Sergey Senozhatsky, Michael S. Tsirkin, Benjamin Herrenschmidt,
	linux-nvme, virtualization, Keith Busch, Paul Mackerras,
	Michael Ellerman, Christoph Hellwig, Shaohua Li, Nitin Gupta,
	famz, Jiri Kosina, linux-block, Ed L. Cashin, Jens Axboe,
	linux-raid, David Woodhouse, linux-mmc, Minchan Kim, linux-mtd,
	Brian Norris, linuxppc-dev

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

^ permalink raw reply	[flat|nested] 71+ messages in thread

end of thread, other threads:[~2016-07-01  1:29 UTC | newest]

Thread overview: 71+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-30  1:59 [PATCH v2 00/12] gendisk: Generate uevent after attribute available Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 01/12] genhd: Add "gen_uevent" parameter to add_disk Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` 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  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  3:26   ` kbuild test robot
2016-06-30  3:26     ` kbuild test robot
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   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 04/12] axonrom: " Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30 22:10   ` Dan Williams
2016-06-30 22:10     ` Dan Williams
2016-06-30 22:10     ` Dan Williams
2016-07-01  1:03     ` Fam Zheng
2016-07-01  1:03       ` Fam Zheng
2016-07-01  1:03       ` Fam Zheng
2016-06-30 22:10   ` Dan Williams
2016-06-30  1:59 ` [PATCH v2 05/12] aoeblk: " Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-07-01  0:57   ` Ed Cashin
2016-07-01  0:57     ` Ed Cashin
2016-07-01  0:57     ` Ed Cashin
2016-07-01  0:57   ` Ed Cashin
2016-06-30  1:59 ` [PATCH v2 06/12] mtip32xx: " Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 07/12] pktcdvd: " Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 08/12] zram: " Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 09/12] md: " Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 10/12] mmc: " Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 11/12] mtd: " Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  1:59 ` [PATCH v2 12/12] nvme: " Fam Zheng
2016-06-30  1:59 ` Fam Zheng
2016-06-30  1:59   ` Fam Zheng
2016-06-30  6:24 ` [PATCH v2 00/12] gendisk: " Christoph Hellwig
2016-06-30  6:24   ` Christoph Hellwig
2016-06-30  6:24   ` Christoph Hellwig
2016-06-30  6:24   ` Christoph Hellwig
2016-06-30  6:35   ` Fam Zheng
2016-06-30  6:35     ` Fam Zheng
2016-06-30  6:35     ` Fam Zheng
2016-06-30  6:38     ` Christoph Hellwig
2016-06-30  6:38       ` Christoph Hellwig
2016-06-30  6:38       ` Christoph Hellwig
2016-07-01  1:01       ` Fam Zheng
2016-07-01  1:01         ` Fam Zheng
2016-07-01  1:01         ` Fam Zheng
2016-07-01  1:29         ` Dan Williams
2016-07-01  1:29         ` Dan Williams
2016-07-01  1:29           ` Dan Williams
2016-07-01  1:29           ` Dan Williams
2016-07-01  1:29           ` Dan Williams

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.