2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-09 14:14:00 +08:00
linux-next/drivers/md
Coly Li 9bbf5feecc dm thin: fix deadlock when swapping to thin device
This is an already known issue that dm-thin volume cannot be used as
swap, otherwise a deadlock may happen when dm-thin internal memory
demand triggers swap I/O on the dm-thin volume itself.

But thanks to commit a666e5c05e ("dm: fix deadlock when swapping to
encrypted device"), the limit_swap_bios target flag can also be used
for dm-thin to avoid the recursive I/O when it is used as swap.

Fix is to simply set ti->limit_swap_bios to true in both pool_ctr()
and thin_ctr().

In my test, I create a dm-thin volume /dev/vg/swap and use it as swap
device. Then I run fio on another dm-thin volume /dev/vg/main and use
large --blocksize to trigger swap I/O onto /dev/vg/swap.

The following fio command line is used in my test,
  fio --name recursive-swap-io --lockmem 1 --iodepth 128 \
     --ioengine libaio --filename /dev/vg/main --rw randrw \
    --blocksize 1M --numjobs 32 --time_based --runtime=12h

Without this fix, the whole system can be locked up within 15 seconds.

With this fix, there is no any deadlock or hung task observed after
2 hours of running fio.

Furthermore, if blocksize is changed from 1M to 128M, after around 30
seconds fio has no visible I/O, and the out-of-memory killer message
shows up in kernel message. After around 20 minutes all fio processes
are killed and the whole system is back to being alive.

This is exactly what is expected when recursive I/O happens on dm-thin
volume when it is used as swap.

Depends-on: a666e5c05e ("dm: fix deadlock when swapping to encrypted device")
Cc: stable@vger.kernel.org
Signed-off-by: Coly Li <colyli@suse.de>
Acked-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
2023-03-06 16:37:06 -05:00
..
bcache bcache: Silence memcpy() run-time false positive warnings 2023-01-25 12:24:50 -08:00
persistent-data dm: add missing blank line after declarations/fix those 2023-02-14 14:23:07 -05:00
dm-audit.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-audit.h dm: introduce audit event module for device mapper 2021-10-27 16:53:47 -04:00
dm-bio-prison-v1.c dm: don't indent labels 2023-02-14 14:23:07 -05:00
dm-bio-prison-v1.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-bio-prison-v2.c dm: address space issues relative to switch/while/for/... 2023-02-14 14:23:06 -05:00
dm-bio-prison-v2.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-bio-record.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-bufio.c dm: fix use of sizeof() macro 2023-02-14 14:23:07 -05:00
dm-builtin.c dm: adjust EXPORT_SYMBOL() to follow functions immediately 2023-02-14 14:23:07 -05:00
dm-cache-background-tracker.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-cache-background-tracker.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-cache-block-types.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-cache-metadata.c dm: prefer '"%s...", __func__' 2023-02-14 14:23:07 -05:00
dm-cache-metadata.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-cache-policy-internal.h dm: add missing empty lines 2023-02-14 14:23:06 -05:00
dm-cache-policy-smq.c dm: add missing empty lines 2023-02-14 14:23:06 -05:00
dm-cache-policy.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-cache-policy.h dm: address indent/space issues 2023-02-14 14:23:06 -05:00
dm-cache-target.c dm cache: add cond_resched() to various workqueue loops 2023-02-17 14:49:12 -05:00
dm-clone-metadata.c dm clone metadata: remove unused function 2021-04-19 13:20:31 -04:00
dm-clone-metadata.h dm clone metadata: Fix return type of dm_clone_nr_of_hydrated_regions() 2020-03-27 14:42:51 -04:00
dm-clone-target.c dm clone: prefer kvmalloc_array() 2023-02-14 14:23:08 -05:00
dm-core.h dm: add argument identifier names 2023-02-14 14:23:06 -05:00
dm-crypt.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-delay.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-dust.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-ebs-target.c dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-era-target.c dm: prefer '"%s...", __func__' 2023-02-14 14:23:07 -05:00
dm-exception-store.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-exception-store.h dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-flakey.c dm: add missing empty lines 2023-02-14 14:23:06 -05:00
dm-ima.c dm: avoid inline filenames 2023-02-14 14:23:07 -05:00
dm-ima.h dm: avoid inline filenames 2023-02-14 14:23:07 -05:00
dm-init.c dm: avoid inline filenames 2023-02-14 14:23:07 -05:00
dm-integrity.c dm integrity: change macros min/max() -> min_t/max_t where appropriate 2023-02-14 14:23:07 -05:00
dm-io-rewind.c dm: avoid void function return statements 2023-02-14 14:23:07 -05:00
dm-io-tracker.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-io.c dm: don't indent labels 2023-02-14 14:23:07 -05:00
dm-ioctl.c dm ioctl: remove unnecessary check when using dm_get_mdptr() 2023-02-17 14:49:21 -05:00
dm-kcopyd.c dm: fix use of sizeof() macro 2023-02-14 14:23:07 -05:00
dm-linear.c dm: don't indent labels 2023-02-14 14:23:07 -05:00
dm-log-userspace-base.c dm: avoid void function return statements 2023-02-14 14:23:07 -05:00
dm-log-userspace-transfer.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-log-userspace-transfer.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-log-writes.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-log.c dm log: avoid multiple line dereference 2023-02-14 14:23:07 -05:00
dm-mpath.c dm: update targets using system workqueues to use a local workqueue 2023-02-14 14:23:08 -05:00
dm-mpath.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-path-selector.c dm: adjust EXPORT_SYMBOL() to follow functions immediately 2023-02-14 14:23:07 -05:00
dm-path-selector.h dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-ps-historical-service-time.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-ps-io-affinity.c dm: address space issues relative to switch/while/for/... 2023-02-14 14:23:06 -05:00
dm-ps-queue-length.c dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-ps-round-robin.c dm: correct block comments format. 2023-02-14 14:23:06 -05:00
dm-ps-service-time.c dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-raid1.c dm: update targets using system workqueues to use a local workqueue 2023-02-14 14:23:08 -05:00
dm-raid.c dm: fix suspect indent whitespace 2023-02-14 14:23:07 -05:00
dm-region-hash.c dm: correct block comments format. 2023-02-14 14:23:06 -05:00
dm-rq.c dm: avoid using symbolic permissions 2023-02-14 14:23:07 -05:00
dm-rq.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-snap-persistent.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-snap-transient.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-snap.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-stats.c dm: avoid using symbolic permissions 2023-02-14 14:23:07 -05:00
dm-stats.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-stripe.c dm: update targets using system workqueues to use a local workqueue 2023-02-14 14:23:08 -05:00
dm-switch.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-sysfs.c dm sysfs: make kobj_type structure constant 2023-02-14 14:23:08 -05:00
dm-table.c dm: avoid split of quoted strings where possible 2023-02-14 14:23:07 -05:00
dm-target.c dm: adjust EXPORT_SYMBOL() to follow functions immediately 2023-02-14 14:23:07 -05:00
dm-thin-metadata.c dm: avoid useless 'else' after 'break' or return' 2023-02-14 14:23:07 -05:00
dm-thin-metadata.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-thin.c dm thin: fix deadlock when swapping to thin device 2023-03-06 16:37:06 -05:00
dm-uevent.c dm: avoid spaces before function arguments or in favour of tabs 2023-02-14 14:23:06 -05:00
dm-uevent.h dm: fix undue/missing spaces 2023-02-14 14:23:06 -05:00
dm-unstripe.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-verity-fec.c dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-verity-fec.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-verity-loadpin.c dm: verity-loadpin: Only trust verity targets with enforcement 2022-09-07 16:37:27 -07:00
dm-verity-target.c dm: avoid useless 'else' after 'break' or return' 2023-02-14 14:23:07 -05:00
dm-verity-verify-sig.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-verity-verify-sig.h dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-verity.h dm: change "unsigned" to "unsigned int" 2023-02-14 14:23:06 -05:00
dm-writecache.c dm: fix use of sizeof() macro 2023-02-14 14:23:07 -05:00
dm-zero.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-zone.c dm: add missing SPDX-License-Indentifiers 2023-02-14 14:23:06 -05:00
dm-zoned-metadata.c dm: don't indent labels 2023-02-14 14:23:07 -05:00
dm-zoned-reclaim.c dm kcopyd: avoid useless atomic operations 2021-06-04 12:07:24 -04:00
dm-zoned-target.c dm: avoid void function return statements 2023-02-14 14:23:07 -05:00
dm-zoned.h dm/dm-zoned: Use the enum req_op type 2022-07-14 12:14:31 -06:00
dm.c dm: remove unnecessary (void*) conversion in event_callback() 2023-02-20 11:52:49 -05:00
dm.h dm: correct block comments format. 2023-02-14 14:23:06 -05:00
Kconfig blk-mq: make the blk-mq stacking code optional 2022-02-16 19:39:09 -07:00
Makefile hardening updates for v5.20-rc1 2022-08-02 14:38:59 -07:00
md-autodetect.c md: return the allocated devices from md_alloc 2022-08-02 17:22:46 -06:00
md-bitmap.c md/bitmap: Fix bitmap chunk size overflow issues 2022-11-14 09:35:50 -08:00
md-bitmap.h
md-cluster.c fs: dlm: remove DLM_LSFL_FS from uapi 2022-08-23 14:54:54 -05:00
md-cluster.h
md-faulty.c block: pass a block_device to bio_clone_fast 2022-02-04 07:43:18 -07:00
md-linear.c md: remove most calls to bdevname 2022-05-22 23:07:21 -07:00
md-linear.h md/raid1: Replace zero-length array with flexible-array 2020-05-13 12:02:23 -07:00
md-multipath.c md: remove most calls to bdevname 2022-05-22 23:07:21 -07:00
md-multipath.h
md.c md: fix incorrect declaration about claim_rdev in md_import_device 2023-01-12 10:42:16 -08:00
md.h md: mark md_kick_rdev_from_array static 2022-12-02 11:21:01 -08:00
raid0.c md/raid0, raid10: Don't set discard sectors for request queue 2022-11-14 10:15:34 -08:00
raid0.h
raid1-10.c md: raid1/raid10: drop pending_cnt 2022-03-08 15:16:54 -08:00
raid1.c block: remove bio_set_op_attrs 2022-12-07 09:43:12 -07:00
raid1.h md: raid1/raid10: drop pending_cnt 2022-03-08 15:16:54 -08:00
raid5-cache.c md/raid5: use bdev_write_cache instead of open coding it 2022-11-14 10:15:35 -08:00
raid5-log.h md/raid5-ppl: Drop unused argument from ppl_handle_flush_request() 2022-08-02 17:14:31 -06:00
raid5-ppl.c md/raid5: use bdev_write_cache instead of open coding it 2022-11-14 10:15:35 -08:00
raid5.c md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d 2022-09-22 00:05:06 -07:00
raid5.h md/raid5: Cleanup prototype of raid5_get_active_stripe() 2022-09-22 00:05:04 -07:00
raid10.c block: remove bio_set_op_attrs 2022-12-07 09:43:12 -07:00
raid10.h md/raid10: convert resync_lock to use seqlock 2022-09-22 00:05:05 -07:00