mirror-linux/drivers/md
Benjamin Marzinski 25b3a8237a md/raid5: recheck if reshape has finished with device_lock held
When handling an IO request, MD checks if a reshape is currently
happening, and if so, where the IO sector is in relation to the reshape
progress. MD uses conf->reshape_progress for both of these tasks.  When
the reshape finishes, conf->reshape_progress is set to MaxSector.  If
this occurs after MD checks if the reshape is currently happening but
before it calls ahead_of_reshape(), then ahead_of_reshape() will end up
comparing the IO sector against MaxSector. During a backwards reshape,
this will make MD think the IO sector is in the area not yet reshaped,
causing it to use the previous configuration, and map the IO to the
sector where that data was before the reshape.

This bug can be triggered by running the lvm2
lvconvert-raid-reshape-linear_to_raid6-single-type.sh test in a loop,
although it's very hard to reproduce.

Fix this by factoring the code that checks where the IO sector is in
relation to the reshape out to a helper called get_reshape_loc(),
which reads reshape_progress and reshape_safe while holding the
device_lock, and then rechecks if the reshape has finished before
calling ahead_of_reshape with the saved values.

Also use the helper during the REQ_NOWAIT check to see if the location
is inside of the reshape region.

Fixes: fef9c61fdf ("md/raid5: change reshape-progress measurement to cope with reshaping backwards.")
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20240702151802.1632010-1-bmarzins@redhat.com
2024-07-04 06:35:19 +00:00
..
bcache bcache: work around a __bitwise to bool conversion sparse warning 2024-06-28 10:25:00 -06:00
dm-vdo bd_inode series 2024-05-21 09:51:42 -07:00
persistent-data dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
Kconfig Kbuild updates for v6.9 2024-03-21 14:41:00 -07:00
Makefile dm vdo: use a proper Makefile for dm-vdo 2024-02-20 13:43:17 -05:00
dm-audit.c
dm-audit.h
dm-bio-prison-v1.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-bio-prison-v1.h
dm-bio-prison-v2.c dm: use bio_list_merge_init 2024-04-01 11:53:37 -06:00
dm-bio-prison-v2.h
dm-bio-record.h
dm-bufio.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-builtin.c
dm-cache-background-tracker.c
dm-cache-background-tracker.h
dm-cache-block-types.h
dm-cache-metadata.c Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
dm-cache-metadata.h
dm-cache-policy-internal.h
dm-cache-policy-smq.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c block: remove the discard_alignment flag 2024-06-20 06:53:14 -06:00
dm-clone-metadata.c bitmap: introduce generic optimized bitmap_size() 2024-04-01 10:49:28 +01:00
dm-clone-metadata.h
dm-clone-target.c block: remove the discard_alignment flag 2024-06-20 06:53:14 -06:00
dm-core.h block: move integrity information into queue_limits 2024-06-14 10:20:07 -06:00
dm-crypt.c block: remove the blk_integrity_profile structure 2024-06-14 10:20:06 -06:00
dm-delay.c dm-delay: remove timer_lock 2024-05-09 09:10:58 -04:00
dm-dust.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-ebs-target.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-era-target.c dm: use bio_list_merge_init 2024-04-01 11:53:37 -06:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-ima.c
dm-ima.h
dm-init.c
dm-integrity.c block: move integrity information into queue_limits 2024-06-14 10:20:07 -06:00
dm-io-rewind.c
dm-io-tracker.h
dm-io.c dm io: Support IO priority 2024-02-20 14:22:51 -05:00
dm-ioctl.c dm ioctl: update DM_DRIVER_EMAIL to new dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-kcopyd.c dm io: Support IO priority 2024-02-20 14:22:51 -05:00
dm-linear.c
dm-log-userspace-base.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c dm: always manage discard support in terms of max_hw_discard_sectors 2024-05-20 15:51:19 -04:00
dm-log.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-mpath.c dm: use bio_list_merge_init 2024-04-01 11:53:37 -06:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-ps-historical-service-time.c
dm-ps-io-affinity.c
dm-ps-queue-length.c
dm-ps-round-robin.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-ps-service-time.c
dm-raid.c md: replace last_sync_action with new enum type 2024-06-12 16:32:57 +00:00
dm-raid1.c dm io: Support IO priority 2024-02-20 14:22:51 -05:00
dm-region-hash.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-rq.c
dm-rq.h
dm-snap-persistent.c dm io: Support IO priority 2024-02-20 14:22:51 -05:00
dm-snap-transient.c
dm-snap.c dm: always manage discard support in terms of max_hw_discard_sectors 2024-05-20 15:51:19 -04:00
dm-stats.c dm stats: limit the number of entries 2024-01-30 14:06:44 -05:00
dm-stats.h
dm-stripe.c - Update DM core to directly call the map function for both the linear 2023-11-01 12:55:54 -10:00
dm-switch.c
dm-sysfs.c
dm-table.c Merge branch 'for-6.11/block-limits' into for-6.11/block 2024-06-20 06:55:20 -06:00
dm-target.c dm: always manage discard support in terms of max_hw_discard_sectors 2024-05-20 15:51:19 -04:00
dm-thin-metadata.c
dm-thin-metadata.h
dm-thin.c - Fix DM discard regressions due to DM core switching over to using 2024-05-21 11:43:11 -07:00
dm-uevent.c
dm-uevent.h
dm-unstripe.c
dm-verity-fec.c dm verity: Fix IO priority lost when reading FEC and hash 2024-02-20 14:22:55 -05:00
dm-verity-fec.h
dm-verity-loadpin.c
dm-verity-target.c - Convert the DM verity and crypt targets from (ab)using tasklets to 2024-03-13 09:46:51 -07:00
dm-verity-verify-sig.c
dm-verity-verify-sig.h
dm-verity.h dm-verity: Convert from tasklet to BH workqueue 2024-03-02 10:30:36 -05:00
dm-writecache.c dm: update relevant MODULE_AUTHOR entries to latest dm-devel mailing list 2024-02-20 14:22:55 -05:00
dm-zero.c dm: always manage discard support in terms of max_hw_discard_sectors 2024-05-20 15:51:19 -04:00
dm-zone.c Merge branch 'for-6.11/block-limits' into for-6.11/block 2024-06-19 08:14:49 -06:00
dm-zoned-metadata.c block: remove gfp_flags from blkdev_zone_mgmt 2024-02-12 08:41:16 -07:00
dm-zoned-reclaim.c
dm-zoned-target.c block: move the zoned flag into the features field 2024-06-19 07:58:28 -06:00
dm-zoned.h
dm.c block: Generalize chunk_sectors support as boundary support 2024-06-20 15:19:17 -06:00
dm.h dm: Call dm_revalidate_zones() after setting the queue limits 2024-06-15 20:42:20 -06:00
md-autodetect.c md: Remove deprecated CONFIG_MD_LINEAR 2023-12-19 10:16:51 -08:00
md-bitmap.c md/md-bitmap: fix writing non bitmap pages 2024-06-11 21:22:21 +00:00
md-bitmap.h
md-cluster.c md-cluster: Constify struct md_cluster_operations 2024-07-04 06:20:27 +00:00
md-cluster.h
md.c md: Don't wait for MD_RECOVERY_NEEDED for HOT_REMOVE_DISK ioctl 2024-07-04 06:32:03 +00:00
md.h md-cluster: Constify struct md_cluster_operations 2024-07-04 06:20:27 +00:00
raid0.c md: set md-specific flags for all queue limits 2024-06-26 09:37:35 -06:00
raid0.h
raid1-10.c md/raid1-10: factor out a new helper raid1_should_read_first() 2024-02-29 22:49:46 -08:00
raid1.c md: set md-specific flags for all queue limits 2024-06-26 09:37:35 -06:00
raid1.h md/raid1: record nonrot rdevs while adding/removing rdevs to conf 2024-02-29 22:49:45 -08:00
raid5-cache.c md/raid5: remove rcu protection to access rdev from conf 2023-11-27 15:49:05 -08:00
raid5-log.h
raid5-ppl.c md: remove mddev->queue 2024-03-06 08:59:53 -08:00
raid5.c md/raid5: recheck if reshape has finished with device_lock held 2024-07-04 06:35:19 +00:00
raid5.h md/raid5: remove rcu protection to access rdev from conf 2023-11-27 15:49:05 -08:00
raid10.c md: set md-specific flags for all queue limits 2024-06-26 09:37:35 -06:00
raid10.h