Gabriel Krisman Bertazi
a2cf97eaaa
dm multipath: use updated MPATHF_QUEUE_IO on mapping for bio-based mpath
commit 5686dee34dbfe0238c0274e0454fa0174ac0a57a upstream.
When adding devices that don't have a scsi_dh on a BIO based multipath,
I was able to consistently hit the warning below and lock-up the system.
The problem is that __map_bio reads the flag before it potentially being
modified by choose_pgpath, and ends up using the older value.
The WARN_ON below is not trivially linked to the issue. It goes like
this: The activate_path delayed_work is not initialized for non-scsi_dh
devices, but we always set MPATHF_QUEUE_IO, asking for initialization.
That is fine, since MPATHF_QUEUE_IO would be cleared in choose_pgpath.
Nevertheless, only for BIO-based mpath, we cache the flag before calling
choose_pgpath, and use the older version when deciding if we should
initialize the path. Therefore, we end up trying to initialize the
paths, and calling the non-initialized activate_path work.
[ 82.437100] ------------[ cut here ]------------
[ 82.437659] WARNING: CPU: 3 PID: 602 at kernel/workqueue.c:1624
__queue_delayed_work+0x71/0x90
[ 82.438436] Modules linked in:
[ 82.438911] CPU: 3 PID: 602 Comm: systemd-udevd Not tainted 5.6.0-rc6+ #339
[ 82.439680] RIP: 0010:__queue_delayed_work+0x71/0x90
[ 82.440287] Code: c1 48 89 4a 50 81 ff 00 02 00 00 75 2a 4c 89 cf e9
94 d6 07 00 e9 7f e9 ff ff 0f 0b eb c7 0f 0b 48 81 7a 58 40 74 a8 94 74
a7 <0f> 0b 48 83 7a 48 00 74 a5 0f 0b eb a1 89 fe 4c 89 cf e9 c8 c4 07
[ 82.441719] RSP: 0018:ffffb738803977c0 EFLAGS: 00010007
[ 82.442121] RAX: ffffa086389f9740 RBX: 0000000000000002 RCX: 0000000000000000
[ 82.442718] RDX: ffffa086350dd930 RSI: ffffa0863d76f600 RDI: 0000000000000200
[ 82.443484] RBP: 0000000000000200 R08: 0000000000000000 R09: ffffa086350dd970
[ 82.444128] R10: 0000000000000000 R11: 0000000000000000 R12: ffffa086350dd930
[ 82.444773] R13: ffffa0863d76f600 R14: 0000000000000000 R15: ffffa08636738008
[ 82.445427] FS: 00007f6abfe9dd40(0000) GS:ffffa0863dd80000(0000) knlGS:00000
[ 82.446040] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 82.446478] CR2: 0000557d288db4e8 CR3: 0000000078b36000 CR4: 00000000000006e0
[ 82.447104] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 82.447561] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 82.448012] Call Trace:
[ 82.448164] queue_delayed_work_on+0x6d/0x80
[ 82.448472] __pg_init_all_paths+0x7b/0xf0
[ 82.448714] pg_init_all_paths+0x26/0x40
[ 82.448980] __multipath_map_bio.isra.0+0x84/0x210
[ 82.449267] __map_bio+0x3c/0x1f0
[ 82.449468] __split_and_process_non_flush+0x14a/0x1b0
[ 82.449775] __split_and_process_bio+0xde/0x340
[ 82.450045] ? dm_get_live_table+0x5/0xb0
[ 82.450278] dm_process_bio+0x98/0x290
[ 82.450518] dm_make_request+0x54/0x120
[ 82.450778] generic_make_request+0xd2/0x3e0
[ 82.451038] ? submit_bio+0x3c/0x150
[ 82.451278] submit_bio+0x3c/0x150
[ 82.451492] mpage_readpages+0x129/0x160
[ 82.451756] ? bdev_evict_inode+0x1d0/0x1d0
[ 82.452033] read_pages+0x72/0x170
[ 82.452260] __do_page_cache_readahead+0x1ba/0x1d0
[ 82.452624] force_page_cache_readahead+0x96/0x110
[ 82.452903] generic_file_read_iter+0x84f/0xae0
[ 82.453192] ? __seccomp_filter+0x7c/0x670
[ 82.453547] new_sync_read+0x10e/0x190
[ 82.453883] vfs_read+0x9d/0x150
[ 82.454172] ksys_read+0x65/0xe0
[ 82.454466] do_syscall_64+0x4e/0x210
[ 82.454828] entry_SYSCALL_64_after_hwframe+0x49/0xbe
[...]
[ 82.462501] ---[ end trace bb39975e9cf45daa ]---
Cc: stable@vger.kernel.org
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
2020-05-06 08:13:29 +02:00 |
| .. |
|
bcache
|
bcache: explicity type cast in bset_bkey_last()
|
2020-02-24 08:34:53 +01:00 |
|
persistent-data
|
dm space map common: fix to ensure new block isn't already in use
|
2020-02-11 04:34:03 -08:00 |
|
dm-bio-prison-v1.c
|
dm: adjust structure members to improve alignment
|
2018-06-08 11:53:14 -04:00 |
|
dm-bio-prison-v1.h
|
block: switch bios to blk_status_t
|
2017-06-09 09:27:32 -06:00 |
|
dm-bio-prison-v2.c
|
dm: adjust structure members to improve alignment
|
2018-06-08 11:53:14 -04:00 |
|
dm-bio-prison-v2.h
|
dm bio prison v2: new interface for the bio prison
|
2017-03-07 11:30:16 -05:00 |
|
dm-bio-record.h
|
dm bio record: save/restore bi_end_io and bi_integrity
|
2020-03-25 08:06:07 +01:00 |
|
dm-bufio.c
|
Revert "dm bufio: fix deadlock with loop device"
|
2019-08-29 08:28:49 +02:00 |
|
dm-builtin.c
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
dm-cache-background-tracker.c
|
dm cache background tracker: fix sparse warning
|
2018-04-30 15:40:40 -04:00 |
|
dm-cache-background-tracker.h
|
dm cache: significant rework to leverage dm-bio-prison-v2
|
2017-03-07 13:28:31 -05:00 |
|
dm-cache-block-types.h
|
linux: drop __bitwise__ everywhere
|
2016-12-16 00:13:41 +02:00 |
|
dm-cache-metadata.c
|
dm cache metadata: Fix loading discard bitset
|
2019-05-25 18:23:38 +02:00 |
|
dm-cache-metadata.h
|
dm cache: significant rework to leverage dm-bio-prison-v2
|
2017-03-07 13:28:31 -05:00 |
|
dm-cache-policy-internal.h
|
dm cache: significant rework to leverage dm-bio-prison-v2
|
2017-03-07 13:28:31 -05:00 |
|
dm-cache-policy-smq.c
|
treewide: Use array_size() in vzalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dm-cache-policy.c
|
|
|
|
dm-cache-policy.h
|
dm cache: significant rework to leverage dm-bio-prison-v2
|
2017-03-07 13:28:31 -05:00 |
|
dm-cache-target.c
|
dm cache: fix a crash due to incorrect work item cancelling
|
2020-03-11 14:15:05 +01:00 |
|
dm-core.h
|
dm: disable DISCARD if the underlying storage no longer supports it
|
2019-08-25 10:48:01 +02:00 |
|
dm-crypt.c
|
dm crypt: fix benbi IV constructor crash if used in authenticated mode
|
2020-02-11 04:34:04 -08:00 |
|
dm-delay.c
|
dm delay: fix a crash when invalid device is specified
|
2019-05-25 18:23:39 +02:00 |
|
dm-era-target.c
|
dm: allow targets to return output from messages they are sent
|
2018-04-03 15:04:10 -04:00 |
|
dm-exception-store.c
|
- Revert a dm-multipath change that caused a regression for unprivledged
|
2015-11-04 21:19:53 -08:00 |
|
dm-exception-store.h
|
dm snapshot: fix hung bios when copy error occurs
|
2016-01-08 20:03:05 -05:00 |
|
dm-flakey.c
|
dm flakey: Properly corrupt multi-page bios.
|
2019-12-05 09:20:36 +01:00 |
|
dm-integrity.c
|
dm integrity: use dm_bio_record and dm_bio_restore
|
2020-03-25 08:06:07 +01:00 |
|
dm-io.c
|
dm: Use kzalloc for all structs with embedded biosets/mempools
|
2018-06-05 08:47:43 -06:00 |
|
dm-ioctl.c
|
dm ioctl: harden copy_params()'s copy_from_user() from malicious users
|
2018-11-13 11:08:49 -08:00 |
|
dm-kcopyd.c
|
dm kcopyd: always complete failed jobs
|
2019-08-29 08:28:55 +02:00 |
|
dm-linear.c
|
dm: Check for device sector overflow if CONFIG_LBDAF is not set
|
2019-01-26 09:32:42 +01:00 |
|
dm-log-userspace-base.c
|
dm: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
dm-log-userspace-transfer.c
|
|
|
|
dm-log-userspace-transfer.h
|
|
|
|
dm-log-writes.c
|
dm log writes: make sure super sector log updates are written in order
|
2019-07-03 13:14:45 +02:00 |
|
dm-log.c
|
block,fs: use REQ_* flags directly
|
2016-11-01 09:43:26 -06:00 |
|
dm-mpath.c
|
dm multipath: use updated MPATHF_QUEUE_IO on mapping for bio-based mpath
|
2020-05-06 08:13:29 +02:00 |
|
dm-mpath.h
|
|
|
|
dm-path-selector.c
|
|
|
|
dm-path-selector.h
|
dm path selector: remove 'repeat_count' return from .select_path hook
|
2016-02-22 22:34:42 -05:00 |
|
dm-queue-length.c
|
dm mpath selector: more evenly distribute ties
|
2018-01-29 13:44:58 -05:00 |
|
dm-raid.c
|
dm raid: fix false -EBUSY when handling check/repair message
|
2019-12-05 09:20:37 +01:00 |
|
dm-raid1.c
|
dm: Check for device sector overflow if CONFIG_LBDAF is not set
|
2019-01-26 09:32:42 +01:00 |
|
dm-region-hash.c
|
- Error path bug fix for overflow tests (Dan)
|
2018-06-12 18:28:00 -07:00 |
|
dm-round-robin.c
|
dm round robin: revert "use percpu 'repeat_count' and 'current_path'"
|
2017-02-17 00:54:09 -05:00 |
|
dm-rq.c
|
blk-mq: add callback of .cleanup_rq
|
2019-10-05 13:10:03 +02:00 |
|
dm-rq.h
|
dm rq: do not update rq partially in each ending bio
|
2017-08-28 10:23:28 -04:00 |
|
dm-service-time.c
|
dm mpath selector: more evenly distribute ties
|
2018-01-29 13:44:58 -05:00 |
|
dm-snap-persistent.c
|
block: fix an integer overflow in logical block size
|
2020-01-23 08:21:29 +01:00 |
|
dm-snap-transient.c
|
dm snapshot: fix hung bios when copy error occurs
|
2016-01-08 20:03:05 -05:00 |
|
dm-snap.c
|
dm snapshot: rework COW throttling to fix deadlock
|
2019-11-06 13:05:11 +01:00 |
|
dm-stats.c
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
dm-stats.h
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
dm-stripe.c
|
dax: Introduce a ->copy_to_iter dax operation
|
2018-05-22 23:18:31 -07:00 |
|
dm-switch.c
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dm-sysfs.c
|
dm: move request-based code out to dm-rq.[hc]
|
2016-06-10 15:15:44 -04:00 |
|
dm-table.c
|
dm table: fix invalid memory accesses with too high sector number
|
2019-08-29 08:28:56 +02:00 |
|
dm-target.c
|
dm mpath: fix missing call of path selector type->end_io
|
2019-09-16 08:22:12 +02:00 |
|
dm-thin-metadata.c
|
dm thin metadata: check if in fail_io mode when setting needs_check
|
2019-09-16 08:22:21 +02:00 |
|
dm-thin-metadata.h
|
dm thin: fix passdown_double_checking_shared_status()
|
2019-01-31 08:14:38 +01:00 |
|
dm-thin.c
|
dm thin: add sanity checks to thin-pool and external snapshot creation
|
2019-04-05 22:32:59 +02:00 |
|
dm-uevent.c
|
|
|
|
dm-uevent.h
|
|
|
|
dm-unstripe.c
|
dm: Check for device sector overflow if CONFIG_LBDAF is not set
|
2019-01-26 09:32:42 +01:00 |
|
dm-verity-fec.c
|
dm verity fec: fix hash block number in verity_fec_decode
|
2020-05-06 08:13:28 +02:00 |
|
dm-verity-fec.h
|
dm: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
dm-verity-target.c
|
dm verity: use message limit for data block corruption message
|
2019-07-21 09:03:08 +02:00 |
|
dm-verity.h
|
dm verity: add 'check_at_most_once' option to only validate hashes once
|
2018-04-03 15:04:29 -04:00 |
|
dm-writecache.c
|
dm writecache: fix data corruption when reloading the target
|
2020-05-06 08:13:28 +02:00 |
|
dm-zero.c
|
dm: don't return errnos from ->map
|
2017-06-09 09:27:32 -06:00 |
|
dm-zoned-metadata.c
|
dm zoned: remove duplicate nr_rnd_zones increase in dmz_init_zone()
|
2020-04-17 10:48:54 +02:00 |
|
dm-zoned-reclaim.c
|
dm zoned: reduce overhead of backing device checks
|
2019-12-17 20:34:53 +01:00 |
|
dm-zoned-target.c
|
dm zoned: reduce overhead of backing device checks
|
2019-12-17 20:34:53 +01:00 |
|
dm-zoned.h
|
dm zoned: reduce overhead of backing device checks
|
2019-12-17 20:34:53 +01:00 |
|
dm.c
|
dm: report suspended device during destroy
|
2020-03-11 14:15:05 +01:00 |
|
dm.h
|
dm: move dm_table_destroy() to same header as dm_table_create()
|
2018-01-17 09:16:06 -05:00 |
|
Kconfig
|
dm: add writecache target
|
2018-06-08 11:59:51 -04:00 |
|
Makefile
|
dm: add writecache target
|
2018-06-08 11:59:51 -04:00 |
|
md-bitmap.c
|
md/bitmap: avoid race window between md_bitmap_resize and bitmap_file_clear_bit
|
2019-12-31 16:35:25 +01:00 |
|
md-bitmap.h
|
md: Avoid namespace collision with bitmap API
|
2018-08-01 15:49:39 -07:00 |
|
md-cluster.c
|
md-cluster: release RESYNC lock after the last resync message
|
2018-08-31 17:38:10 -07:00 |
|
md-cluster.h
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
md-faulty.c
|
md: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
md-linear.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 20:34:55 +01:00 |
|
md-linear.h
|
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
|
2017-11-14 16:07:26 -08:00 |
|
md-multipath.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 20:34:55 +01:00 |
|
md-multipath.h
|
md: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
md.c
|
md: check arrays is suspended in mddev_detach before call quiesce operations
|
2020-04-17 10:48:42 +02:00 |
|
md.h
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 20:34:55 +01:00 |
|
raid0.c
|
block: fix an integer overflow in logical block size
|
2020-01-23 08:21:29 +01:00 |
|
raid0.h
|
md/raid0: avoid RAID0 data corruption due to layout confusion.
|
2019-10-05 13:10:12 +02:00 |
|
raid1-10.c
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
raid1.c
|
md: raid1: check rdev before reference in raid1_sync_request func
|
2020-01-09 10:18:57 +01:00 |
|
raid1.h
|
md: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
raid5-cache.c
|
md/raid5: fix 'out of memory' during raid cache recovery
|
2019-02-06 17:30:16 +01:00 |
|
raid5-log.h
|
md/raid5-cache: disable reshape completely
|
2018-08-31 17:38:09 -07:00 |
|
raid5-ppl.c
|
md: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |
|
raid5.c
|
raid5: need to set STRIPE_HANDLE for batch head
|
2019-12-17 20:36:00 +01:00 |
|
raid5.h
|
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
|
2018-06-09 12:01:36 -07:00 |
|
raid10.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 20:34:55 +01:00 |
|
raid10.h
|
md: convert to bioset_init()/mempool_init()
|
2018-05-30 15:33:32 -06:00 |