Christoph Hellwig
2b5befcd40
md: fix a lock order reversal in md_alloc
...
[ Upstream commit 7df835a32a8bedf7ce88efcfa7c9b245b52ff139 ]
Commit b0140891a8 ("md: Fix race when creating a new md device.")
not only moved assigning mddev->gendisk before calling add_disk, which
fixes the races described in the commit log, but also added a
mddev->open_mutex critical section over add_disk and creation of the
md kobj. Adding a kobject after add_disk is racy vs deleting the gendisk
right after adding it, but md already prevents against that by holding
a mddev->active reference.
On the other hand taking this lock added a lock order reversal with what
is not disk->open_mutex (used to be bdev->bd_mutex when the commit was
added) for partition devices, which need that lock for the internal open
for the partition scan, and a recent commit also takes it for
non-partitioned devices, leading to further lockdep splatter.
Fixes: b0140891a8 ("md: Fix race when creating a new md device.")
Fixes: d62633873590 ("block: support delayed holder registration")
Reported-by: syzbot+fadc0aaf497e6a493b9f@syzkaller.appspotmail.com
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: syzbot+fadc0aaf497e6a493b9f@syzkaller.appspotmail.com
Reviewed-by: NeilBrown <neilb@suse.de>
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-09-30 10:09:24 +02:00
..
bcache
bcache: add proper error unwinding in bcache_device_init
2021-09-15 09:47:27 +02:00
persistent-data
dm btree remove: assign new_root only when removal succeeds
2021-07-19 08:53:17 +02:00
dm-bio-prison-v1.c
dm-bio-prison-v1.h
dm-bio-prison-v2.c
dm-bio-prison-v2.h
dm-bio-record.h
dm-bufio.c
dm bufio: subtract the number of initial sectors in dm_bufio_get_device_size
2021-03-09 11:09:37 +01:00
dm-builtin.c
dm-cache-background-tracker.c
dm-cache-background-tracker.h
dm-cache-block-types.h
dm-cache-metadata.c
dm cache metadata: Avoid returning cmd->bm wild pointer on error
2020-09-09 19:12:35 +02:00
dm-cache-metadata.h
dm-cache-policy-internal.h
dm-cache-policy-smq.c
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c
dm-clone-metadata.c
dm-clone-metadata.h
dm-clone-target.c
dm-core.h
dm: fix deadlock when swapping to encrypted device
2021-03-04 10:26:51 +01:00
dm-crypt.c
dm crypt: Avoid percpu_counter spinlock contention in crypt_page_alloc()
2021-09-22 12:26:21 +02:00
dm-delay.c
dm-dust.c
dm-era-target.c
dm era: Update in-core bitset after committing the metadata
2021-03-04 10:26:53 +01:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c
dm-init.c
dm-integrity.c
dm integrity: fix missing goto in bitmap_flush_interval error handling
2021-05-11 14:04:18 +02:00
dm-io.c
dm-ioctl.c
dm ioctl: fix out of bounds array access when no devices
2021-03-30 14:35:24 +02:00
dm-kcopyd.c
dm-linear.c
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c
dm-log.c
dm-mpath.c
dm mpath: fix racey management of PG initialization
2020-09-09 19:12:35 +02:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid.c
dm raid: fix inconclusive reshape layout on fast raid4/5/6 table reload sequences
2021-05-11 14:04:15 +02:00
dm-raid1.c
dm-region-hash.c
dm-round-robin.c
dm-rq.c
dm rq: fix double free of blk_mq_tag_set in dev remove after table load fails
2021-05-11 14:04:18 +02:00
dm-rq.h
dm-service-time.c
dm-snap-persistent.c
dm-snap-transient.c
dm-snap.c
dm snapshot: properly fix a crash when an origin has no snapshots
2021-06-03 08:59:02 +02:00
dm-stats.c
dm-stats.h
dm-stripe.c
dm-switch.c
dm-sysfs.c
dm-table.c
dm table: fix zoned iterate_devices based device capability checks
2021-03-11 14:06:49 +01:00
dm-target.c
dm-thin-metadata.c
dm thin metadata: Fix use-after-free in dm_bm_set_read_only
2020-09-09 19:12:36 +02:00
dm-thin-metadata.h
dm-thin.c
dm-uevent.c
dm-uevent.h
dm-unstripe.c
dm-verity-fec.c
dm verity fec: fix misaligned RS roots IO
2021-04-21 12:56:15 +02:00
dm-verity-fec.h
dm verity fec: fix misaligned RS roots IO
2021-04-21 12:56:15 +02:00
dm-verity-target.c
dm verity: fix DM_VERITY_OPTS_MAX value
2021-03-30 14:35:24 +02:00
dm-verity-verify-sig.c
dm verity: fix require_signatures module_param permissions
2021-06-16 11:59:37 +02:00
dm-verity-verify-sig.h
dm-verity.h
dm-writecache.c
dm writecache: return the exact table values that were set
2021-07-25 14:35:14 +02:00
dm-zero.c
dm-zoned-metadata.c
dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a zone
2020-06-24 17:50:31 +02:00
dm-zoned-reclaim.c
dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a zone
2020-06-24 17:50:31 +02:00
dm-zoned-target.c
dm zoned: assign max_io_len correctly
2020-07-09 09:37:57 +02:00
dm-zoned.h
dm.c
dm table: fix DAX iterate_devices based device capability checks
2021-03-11 14:06:49 +01:00
dm.h
dm table: fix DAX iterate_devices based device capability checks
2021-03-11 14:06:49 +01:00
Kconfig
dm integrity: select CRYPTO_SKCIPHER
2021-01-27 11:47:42 +01:00
Makefile
md-bitmap.c
md/bitmap: wait for external bitmap writes to complete during tear down
2021-05-14 09:44:12 +02:00
md-bitmap.h
md-cluster.c
md/cluster: fix deadlock when node is doing resync job
2020-12-30 11:51:45 +01:00
md-cluster.h
md-faulty.c
md-linear.c
md-linear.h
md-multipath.c
md-multipath.h
md.c
md: fix a lock order reversal in md_alloc
2021-09-30 10:09:24 +02:00
md.h
raid0.c
raid0.h
raid1-10.c
raid1.c
md/raid10: properly indicate failure when ending a failed write request
2021-08-12 13:21:03 +02:00
raid1.h
raid5-cache.c
raid5-log.h
raid5-ppl.c
raid5.c
md/raid5: fix oops during stripe resizing
2020-11-05 11:43:22 +01:00
raid5.h
raid10.c
md/raid10: properly indicate failure when ending a failed write request
2021-08-12 13:21:03 +02:00
raid10.h