mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
md/md-bitmap: handle the case bitmap is not enabled before end_sync()
This case can be handled without knowing internal implementation. Prepare to introduce CONFIG_MD_BITMAP. Link: https://lore.kernel.org/linux-raid/20250707012711.376844-9-yukuai1@huaweicloud.com Signed-off-by: Yu Kuai <yukuai3@huawei.com> Reviewed-by: Xiao Ni <xni@redhat.com>
This commit is contained in:
parent
5ae58d1500
commit
bb74b093c3
|
|
@ -1838,10 +1838,6 @@ static void __bitmap_end_sync(struct bitmap *bitmap, sector_t offset,
|
|||
bitmap_counter_t *bmc;
|
||||
unsigned long flags;
|
||||
|
||||
if (bitmap == NULL) {
|
||||
*blocks = 1024;
|
||||
return;
|
||||
}
|
||||
spin_lock_irqsave(&bitmap->counts.lock, flags);
|
||||
bmc = md_bitmap_get_counter(&bitmap->counts, offset, blocks, 0);
|
||||
if (bmc == NULL)
|
||||
|
|
|
|||
|
|
@ -136,4 +136,15 @@ static inline bool md_bitmap_start_sync(struct mddev *mddev, sector_t offset,
|
|||
return mddev->bitmap_ops->start_sync(mddev, offset, blocks, degraded);
|
||||
}
|
||||
|
||||
static inline void md_bitmap_end_sync(struct mddev *mddev, sector_t offset,
|
||||
sector_t *blocks)
|
||||
{
|
||||
if (!md_bitmap_enabled(mddev, false)) {
|
||||
*blocks = 1024;
|
||||
return;
|
||||
}
|
||||
|
||||
mddev->bitmap_ops->end_sync(mddev, offset, blocks);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2057,7 +2057,7 @@ static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio)
|
|||
|
||||
/* make sure these bits don't get cleared. */
|
||||
do {
|
||||
mddev->bitmap_ops->end_sync(mddev, s, &sync_blocks);
|
||||
md_bitmap_end_sync(mddev, s, &sync_blocks);
|
||||
s += sync_blocks;
|
||||
sectors_to_go -= sync_blocks;
|
||||
} while (sectors_to_go > 0);
|
||||
|
|
@ -2804,8 +2804,8 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
* We can find the current addess in mddev->curr_resync
|
||||
*/
|
||||
if (mddev->curr_resync < max_sector) /* aborted */
|
||||
mddev->bitmap_ops->end_sync(mddev, mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
md_bitmap_end_sync(mddev, mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
else /* completed sync */
|
||||
conf->fullsync = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -3221,15 +3221,13 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
|
||||
if (mddev->curr_resync < max_sector) { /* aborted */
|
||||
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
|
||||
mddev->bitmap_ops->end_sync(mddev,
|
||||
mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
md_bitmap_end_sync(mddev, mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
else for (i = 0; i < conf->geo.raid_disks; i++) {
|
||||
sector_t sect =
|
||||
raid10_find_virt(conf, mddev->curr_resync, i);
|
||||
|
||||
mddev->bitmap_ops->end_sync(mddev, sect,
|
||||
&sync_blocks);
|
||||
md_bitmap_end_sync(mddev, sect, &sync_blocks);
|
||||
}
|
||||
} else {
|
||||
/* completed sync */
|
||||
|
|
|
|||
|
|
@ -6492,8 +6492,8 @@ static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_n
|
|||
}
|
||||
|
||||
if (mddev->curr_resync < max_sector) /* aborted */
|
||||
mddev->bitmap_ops->end_sync(mddev, mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
md_bitmap_end_sync(mddev, mddev->curr_resync,
|
||||
&sync_blocks);
|
||||
else /* completed sync */
|
||||
conf->fullsync = 0;
|
||||
mddev->bitmap_ops->close_sync(mddev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user