Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

md-bitmap: account for mddev->bitmap_info.offset in read_sb_page

Diretly apply mddev->bitmap_info.offset to the sector number to read
instead of doing that in both callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20230615064840.629492-9-hch@lst.de

authored by

Christoph Hellwig and committed by
Song Liu
f5f2d5ac 0c3ea5cc

+8 -9
+8 -9
drivers/md/md-bitmap.c
··· 145 145 struct page *page, unsigned long index, int size) 146 146 { 147 147 148 - sector_t sector = offset + index * (PAGE_SIZE / SECTOR_SIZE); 148 + sector_t sector = mddev->bitmap_info.offset + offset + 149 + index * (PAGE_SIZE / SECTOR_SIZE); 149 150 struct md_rdev *rdev; 150 151 151 152 rdev_for_each(rdev, mddev) { ··· 594 593 unsigned long sectors_reserved = 0; 595 594 int err = -EINVAL; 596 595 struct page *sb_page; 597 - loff_t offset = bitmap->mddev->bitmap_info.offset; 596 + loff_t offset = 0; 598 597 599 598 if (!bitmap->storage.file && !bitmap->mddev->bitmap_info.offset) { 600 599 chunksize = 128 * 1024 * 1024; ··· 621 620 bm_blocks = ((bm_blocks+7) >> 3) + sizeof(bitmap_super_t); 622 621 /* to 4k blocks */ 623 622 bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks, 4096); 624 - offset = bitmap->mddev->bitmap_info.offset + (bitmap->cluster_slot * (bm_blocks << 3)); 623 + offset = bitmap->cluster_slot * (bm_blocks << 3); 625 624 pr_debug("%s:%d bm slot: %d offset: %llu\n", __func__, __LINE__, 626 625 bitmap->cluster_slot, offset); 627 626 } ··· 633 632 err = read_file_page(bitmap->storage.file, 0, 634 633 bitmap, bytes, sb_page); 635 634 } else { 636 - err = read_sb_page(bitmap->mddev, 637 - offset, 638 - sb_page, 639 - 0, sizeof(bitmap_super_t)); 635 + err = read_sb_page(bitmap->mddev, offset, sb_page, 0, 636 + sizeof(bitmap_super_t)); 640 637 } 641 638 if (err) 642 639 return err; ··· 1127 1128 if (file) 1128 1129 ret = read_file_page(file, i, bitmap, count, page); 1129 1130 else 1130 - ret = read_sb_page(mddev, mddev->bitmap_info.offset, 1131 - page, i + node_offset, count); 1131 + ret = read_sb_page(mddev, 0, page, i + node_offset, 1132 + count); 1132 1133 if (ret) 1133 1134 goto err; 1134 1135 }