Hi Neil, On Mon, 2 Mar 2015 17:11:49 +1100 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > > On Mon, 2 Mar 2015 17:03:45 +1100 NeilBrown <neilb@xxxxxxx> wrote: > > > > I think > > + bm_blocks = DIV_ROUND_UP(bm_blocks, 4096); > > > > needs DIV_ROUND_UP_SECTOR_T() > > I tried that and it was not sufficient. > > > The first patch you identified adds that line. The second relocates it. > > The second also changes this: > > bm_blocks = sector_div(bitmap->mddev->resync_max_sectors, (chunksize >> 9)); > > (added by the first) to this: > > bm_blocks = bitmap->mddev->resync_max_sectors / (bitmap->mddev->bitmap_info.chunksize >> 9); > > where bitmap->mddev->resync_max_sectors is a sector_t ... So I applied this patch for today: From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> Date: Tue, 3 Mar 2015 13:30:26 +1100 Subject: [PATCH] md/bitmap: use sector_div for sector_t divisions Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> --- drivers/md/bitmap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 23f575f0cd92..d40398404ab6 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c @@ -573,7 +573,8 @@ re_read: if (bitmap->cluster_slot >= 0) { long long bm_blocks; - bm_blocks = bitmap->mddev->resync_max_sectors / (bitmap->mddev->bitmap_info.chunksize >> 9); + bm_blocks = sector_div(bitmap->mddev->resync_max_sectors, + bitmap->mddev->bitmap_info.chunksize >> 9); bm_blocks = bm_blocks << 3; bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks, 4096); bitmap->mddev->bitmap_info.offset += bitmap->cluster_slot * (bm_blocks << 3); -- 2.1.4 -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx
Attachment:
pgpIeOkTdfRii.pgp
Description: OpenPGP digital signature