Gabriel Krisman Bertazi
100cf0ba5b
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:15:10 +02:00 |
| .. |
|
bcache
|
bcache: properly initialize 'path' and 'err' in register_bcache()
|
2020-02-24 08:37:03 +01:00 |
|
persistent-data
|
dm space map common: fix to ensure new block isn't already in use
|
2020-02-11 04:35:26 -08: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 bio record: save/restore bi_end_io and bi_integrity
|
2020-03-25 08:25:48 +01:00 |
|
dm-bufio.c
|
dm bufio: introduce a global cache replacement
|
2019-09-13 17:00:21 -04: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: Fix loading discard bitset
|
2019-04-18 16:18:25 -04: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 cache: fix a crash due to incorrect work item cancelling
|
2020-03-12 13:00:23 +01:00 |
|
dm-clone-metadata.c
|
dm clone: Fix handling of partial region discards
|
2020-04-17 10:50:24 +02:00 |
|
dm-clone-metadata.h
|
dm clone: replace spin_lock_irqsave with spin_lock_irq
|
2020-04-17 10:50:23 +02:00 |
|
dm-clone-target.c
|
dm clone: Add missing casts to prevent overflows and data corruption
|
2020-04-17 10:50:24 +02:00 |
|
dm-core.h
|
dm: disable DISCARD if the underlying storage no longer supports it
|
2019-04-04 15:33:59 -04:00 |
|
dm-crypt.c
|
dm crypt: fix benbi IV constructor crash if used in authenticated mode
|
2020-02-11 04:35:26 -08:00 |
|
dm-delay.c
|
dm delay: fix a crash when invalid device is specified
|
2019-04-26 11:29:32 -04:00 |
|
dm-dust.c
|
dm dust: use dust block size for badblocklist index
|
2019-08-21 11:27:17 -04:00 |
|
dm-era-target.c
|
treewide: Add SPDX license identifier for more missed files
|
2019-05-21 10:50:45 +02:00 |
|
dm-exception-store.c
|
|
|
|
dm-exception-store.h
|
- Improve DM snapshot target's scalability by using finer grained
|
2019-05-16 15:55:48 -07:00 |
|
dm-flakey.c
|
block: Kill gfp_t argument of blkdev_report_zones()
|
2019-07-11 20:04:37 -06:00 |
|
dm-init.c
|
docs: device-mapper: move it to the admin-guide
|
2019-07-15 11:03:01 -03:00 |
|
dm-integrity.c
|
dm integrity: fix a crash with unusually large tag size
|
2020-04-17 10:50:17 +02:00 |
|
dm-io.c
|
|
|
|
dm-ioctl.c
|
dm: introduce DM_GET_TARGET_VERSION
|
2019-09-16 10:18:01 -04:00 |
|
dm-kcopyd.c
|
dm kcopyd: always complete failed jobs
|
2019-08-15 15:57:39 -04:00 |
|
dm-linear.c
|
block: Kill gfp_t argument of blkdev_report_zones()
|
2019-07-11 20:04:37 -06:00 |
|
dm-log-userspace-base.c
|
|
|
|
dm-log-userspace-transfer.c
|
|
|
|
dm-log-userspace-transfer.h
|
|
|
|
dm-log-writes.c
|
dm log writes: fix incorrect comment about the logged sequence example
|
2019-07-09 14:13:33 -04:00 |
|
dm-log.c
|
|
|
|
dm-mpath.c
|
dm multipath: use updated MPATHF_QUEUE_IO on mapping for bio-based mpath
|
2020-05-06 08:15:10 +02:00 |
|
dm-mpath.h
|
|
|
|
dm-path-selector.c
|
|
|
|
dm-path-selector.h
|
|
|
|
dm-queue-length.c
|
|
|
|
dm-raid.c
|
dm raid: fix updating of max_discard_sectors limit
|
2019-09-11 16:18:23 -04:00 |
|
dm-raid1.c
|
dm raid1: use struct_size() with kzalloc()
|
2019-08-26 11:05:32 -04:00 |
|
dm-region-hash.c
|
|
|
|
dm-round-robin.c
|
|
|
|
dm-rq.c
|
block: Delay default elevator initialization
|
2019-09-05 19:52:34 -06:00 |
|
dm-rq.h
|
dm: remove unused _rq_tio_cache and _rq_cache
|
2019-03-05 14:48:50 -05:00 |
|
dm-service-time.c
|
|
|
|
dm-snap-persistent.c
|
block: fix an integer overflow in logical block size
|
2020-01-23 08:22:32 +01:00 |
|
dm-snap-transient.c
|
|
|
|
dm-snap.c
|
dm snapshot: rework COW throttling to fix deadlock
|
2019-10-10 09:46:05 -04:00 |
|
dm-stats.c
|
dm stats: use struct_size() helper
|
2019-09-04 09:39:22 -04:00 |
|
dm-stats.h
|
|
|
|
dm-stripe.c
|
|
|
|
dm-switch.c
|
dm switch: use struct_size() in kzalloc()
|
2019-03-05 14:48:51 -05:00 |
|
dm-sysfs.c
|
|
|
|
dm-table.c
|
dm: make dm_table_find_target return NULL
|
2019-08-23 10:13:12 -04:00 |
|
dm-target.c
|
dm mpath: fix missing call of path selector type->end_io
|
2019-04-25 15:38:52 -04:00 |
|
dm-thin-metadata.c
|
dm thin metadata: fix lockdep complaint
|
2020-03-12 13:00:09 +01:00 |
|
dm-thin-metadata.h
|
dm thin metadata: Add support for a pre-commit callback
|
2019-12-21 11:05:01 +01:00 |
|
dm-thin.c
|
dm thin: don't allow changing data device during thin-pool reload
|
2020-02-24 08:36:49 +01:00 |
|
dm-uevent.c
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
|
2019-05-30 11:26:35 -07:00 |
|
dm-uevent.h
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
|
2019-05-30 11:26:35 -07:00 |
|
dm-unstripe.c
|
|
|
|
dm-verity-fec.c
|
dm verity fec: fix hash block number in verity_fec_decode
|
2020-05-06 08:15:10 +02:00 |
|
dm-verity-fec.h
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
|
2019-05-30 11:26:32 -07:00 |
|
dm-verity-target.c
|
dm verity: add root hash pkcs#7 signature verification
|
2019-08-23 10:13:14 -04:00 |
|
dm-verity-verify-sig.c
|
dm verity: add root hash pkcs#7 signature verification
|
2019-08-23 10:13:14 -04:00 |
|
dm-verity-verify-sig.h
|
dm verity: add root hash pkcs#7 signature verification
|
2019-08-23 10:13:14 -04:00 |
|
dm-verity.h
|
dm verity: add root hash pkcs#7 signature verification
|
2019-08-23 10:13:14 -04:00 |
|
dm-writecache.c
|
dm writecache: fix data corruption when reloading the target
|
2020-05-06 08:15:10 +02:00 |
|
dm-zero.c
|
|
|
|
dm-zoned-metadata.c
|
dm zoned: remove duplicate nr_rnd_zones increase in dmz_init_zone()
|
2020-04-17 10:50:23 +02:00 |
|
dm-zoned-reclaim.c
|
dm zoned: reduce overhead of backing device checks
|
2019-12-17 19:56:12 +01:00 |
|
dm-zoned-target.c
|
dm zoned: Fix reference counter initial value of chunk works
|
2020-03-12 13:00:24 +01:00 |
|
dm-zoned.h
|
dm zoned: reduce overhead of backing device checks
|
2019-12-17 19:56:12 +01:00 |
|
dm.c
|
Revert "dm: always call blk_queue_split() in dm_process_bio()"
|
2020-04-08 09:08:43 +02:00 |
|
dm.h
|
dm: make dm_table_find_target return NULL
|
2019-08-23 10:13:12 -04:00 |
|
Kconfig
|
dm: add clone target
|
2019-09-12 09:32:31 -04:00 |
|
Makefile
|
dm: add clone target
|
2019-09-12 09:32:31 -04:00 |
|
md-bitmap.c
|
md/bitmap: avoid race window between md_bitmap_resize and bitmap_file_clear_bit
|
2019-12-31 16:44:20 +01:00 |
|
md-bitmap.h
|
|
|
|
md-cluster.c
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
|
2019-05-24 17:27:12 +02:00 |
|
md-cluster.h
|
|
|
|
md-faulty.c
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 47
|
2019-05-24 17:27:13 +02:00 |
|
md-linear.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 19:56:14 +01:00 |
|
md-linear.h
|
|
|
|
md-multipath.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 19:56:14 +01:00 |
|
md-multipath.h
|
|
|
|
md.c
|
md: check arrays is suspended in mddev_detach before call quiesce operations
|
2020-04-17 10:50:04 +02:00 |
|
md.h
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 19:56:14 +01:00 |
|
raid0.c
|
block: fix an integer overflow in logical block size
|
2020-01-23 08:22:32 +01:00 |
|
raid0.h
|
md/raid0: avoid RAID0 data corruption due to layout confusion.
|
2019-09-13 13:10:05 -07:00 |
|
raid1-10.c
|
md: raid1-10: Unify r{1,10}bio_pool_free
|
2019-06-15 01:37:35 -06:00 |
|
raid1.c
|
md: raid1: check rdev before reference in raid1_sync_request func
|
2020-01-09 10:19:48 +01:00 |
|
raid1.h
|
|
|
|
raid5-cache.c
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
|
2019-06-05 17:36:37 +02:00 |
|
raid5-log.h
|
raid5: set write hint for PPL
|
2019-03-12 10:15:18 -07:00 |
|
raid5-ppl.c
|
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
|
2019-06-05 17:36:37 +02:00 |
|
raid5.c
|
raid5: need to set STRIPE_HANDLE for batch head
|
2020-01-09 10:19:48 +01:00 |
|
raid5.h
|
raid5: use bio_end_sector in r5_next_bio
|
2019-09-13 13:14:43 -07:00 |
|
raid10.c
|
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
|
2019-12-17 19:56:14 +01:00 |
|
raid10.h
|
|
|