WSL2-Linux-Kernel/drivers/md
Mingzhe Zou 74e2d61e4f bcache: fixup multiple threads crash
commit 887554ab96 upstream.

When multiple threads to check btree nodes in parallel, the main
thread wait for all threads to stop or CACHE_SET_IO_DISABLE flag:

wait_event_interruptible(check_state->wait,
                         atomic_read(&check_state->started) == 0 ||
                         test_bit(CACHE_SET_IO_DISABLE, &c->flags));

However, the bch_btree_node_read and bch_btree_node_read_done
maybe call bch_cache_set_error, then the CACHE_SET_IO_DISABLE
will be set. If the flag already set, the main thread return
error. At the same time, maybe some threads still running and
read NULL pointer, the kernel will crash.

This patch change the event wait condition, the main thread must
wait for all threads to stop.

Fixes: 8e7102273f ("bcache: make bch_btree_check() to be multithreaded")
Signed-off-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
Cc: stable@vger.kernel.org # v5.7+
Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-04-08 14:23:01 +02:00
..
bcache bcache: fixup multiple threads crash 2022-04-08 14:23:01 +02:00
persistent-data dm space map common: add bounds check to sm_ll_lookup_bitmap() 2022-01-27 11:04:53 +01:00
Kconfig dm: make EBS depend on !HIGHMEM 2021-08-16 10:50:32 -06:00
Makefile dm ima: measure data on table load 2021-08-10 13:32:40 -04: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-builtin.c
dm-cache-background-tracker.c
dm-cache-background-tracker.h
dm-cache-block-types.h
dm-cache-metadata.c
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: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-clone-metadata.c
dm-clone-metadata.h
dm-clone-target.c dm clone: make array 'descs' static 2021-10-12 13:54:10 -04:00
dm-core.h dm: interlock pending dm_io and dm_wait_for_bios_completion 2022-04-08 14:22:57 +02:00
dm-crypt.c dm crypt: use in_hardirq() instead of deprecated in_irq() 2021-08-20 16:25:07 -04:00
dm-delay.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-dust.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ebs-target.c - Add DM infrastructure for IMA-based remote attestion. These changes 2021-08-31 14:55:09 -07:00
dm-era-target.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ima.c integrity-v5.15 2021-09-02 12:51:41 -07:00
dm-ima.h dm ima: add version info to dm related events in ima log 2021-08-20 15:59:47 -04:00
dm-init.c
dm-integrity.c dm integrity: set journal entry unused when shrinking device 2022-04-08 14:22:57 +02:00
dm-io-tracker.h dm writecache: make writeback pause configurable 2021-06-28 16:30:13 -04:00
dm-io.c
dm-ioctl.c dm ima: measure data on device rename 2021-08-10 13:34:23 -04:00
dm-kcopyd.c dm writecache: have ssd writeback wait if the kcopyd workqueue is busy 2021-06-15 15:42:03 -04:00
dm-linear.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-log-userspace-base.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-log.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-mpath.c dm ima: update dm target attributes for ima measurements 2021-08-20 16:07:36 -04:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-ps-historical-service-time.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ps-io-affinity.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ps-queue-length.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ps-round-robin.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-ps-service-time.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-raid.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-raid1.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-region-hash.c
dm-rq.c dm rq: don't queue request to blk-mq during DM suspend 2021-10-12 13:54:10 -04:00
dm-rq.h
dm-snap-persistent.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-snap-transient.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-snap.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-stats.c dm: fix double accounting of flush with data 2022-04-08 14:22:57 +02:00
dm-stats.h dm: fix double accounting of flush with data 2022-04-08 14:22:57 +02:00
dm-stripe.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-switch.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-sysfs.c
dm-table.c libnvdimm for v5.15 2021-09-09 11:39:57 -07:00
dm-target.c
dm-thin-metadata.c dm space maps: improve performance with inc/dec on ranges of blocks 2021-06-04 12:07:22 -04:00
dm-thin-metadata.h
dm-thin.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-uevent.c
dm-uevent.h
dm-unstripe.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-verity-fec.c
dm-verity-fec.h
dm-verity-target.c dm verity: skip redundant verity_handle_err() on I/O errors 2021-10-12 13:54:09 -04:00
dm-verity-verify-sig.c
dm-verity-verify-sig.h
dm-verity.h
dm-writecache.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-zero.c
dm-zone.c dm zone: fix dm_revalidate_zones() memory allocation 2021-06-25 15:25:23 -04:00
dm-zoned-metadata.c dm zoned: check zone capacity 2021-06-04 12:07:28 -04:00
dm-zoned-reclaim.c dm kcopyd: avoid useless atomic operations 2021-06-04 12:07:24 -04:00
dm-zoned-target.c dm: update target status functions to support IMA measurement 2021-08-10 13:34:23 -04:00
dm-zoned.h
dm.c dm: fix double accounting of flush with data 2022-04-08 14:22:57 +02:00
dm.h dm: introduce zone append emulation 2021-06-04 12:07:37 -04:00
md-autodetect.c
md-bitmap.c md: Constify attribute_group structs 2021-06-14 22:32:07 -07:00
md-bitmap.h
md-cluster.c
md-cluster.h
md-faulty.c md: mark some personalities as deprecated 2021-06-14 22:32:07 -07:00
md-linear.c md: mark some personalities as deprecated 2021-06-14 22:32:07 -07:00
md-linear.h
md-multipath.c md: mark some personalities as deprecated 2021-06-14 22:32:07 -07:00
md-multipath.h
md.c block: drop unused includes in <linux/genhd.h> 2022-03-16 14:23:46 +01:00
md.h md: Move alloc/free acct bioset in to personality 2022-01-27 11:05:08 +01:00
raid0.c md: Move alloc/free acct bioset in to personality 2022-01-27 11:05:08 +01:00
raid0.h
raid1-10.c
raid1.c md/raid1: fix missing bitmap update w/o WriteMostly devices 2022-01-11 15:35:15 +01:00
raid1.h md/raid1: enable io accounting 2021-06-14 22:32:07 -07:00
raid5-cache.c
raid5-log.h
raid5-ppl.c
raid5.c md: Move alloc/free acct bioset in to personality 2022-01-27 11:05:08 +01:00
raid5.h
raid10.c for-5.15/drivers-2021-08-30 2021-08-30 19:01:46 -07:00
raid10.h md/raid10: enable io accounting 2021-06-14 22:32:07 -07:00