diff options
Diffstat (limited to 'drivers/nvdimm/core.c')
-rw-r--r-- | drivers/nvdimm/core.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/nvdimm/core.c b/drivers/nvdimm/core.c index 7cd99b1f8596..75bc08c6838c 100644 --- a/drivers/nvdimm/core.c +++ b/drivers/nvdimm/core.c | |||
@@ -421,14 +421,15 @@ static void set_badblock(struct badblocks *bb, sector_t s, int num) | |||
421 | static void __add_badblock_range(struct badblocks *bb, u64 ns_offset, u64 len) | 421 | static void __add_badblock_range(struct badblocks *bb, u64 ns_offset, u64 len) |
422 | { | 422 | { |
423 | const unsigned int sector_size = 512; | 423 | const unsigned int sector_size = 512; |
424 | sector_t start_sector; | 424 | sector_t start_sector, end_sector; |
425 | u64 num_sectors; | 425 | u64 num_sectors; |
426 | u32 rem; | 426 | u32 rem; |
427 | 427 | ||
428 | start_sector = div_u64(ns_offset, sector_size); | 428 | start_sector = div_u64(ns_offset, sector_size); |
429 | num_sectors = div_u64_rem(len, sector_size, &rem); | 429 | end_sector = div_u64_rem(ns_offset + len, sector_size, &rem); |
430 | if (rem) | 430 | if (rem) |
431 | num_sectors++; | 431 | end_sector++; |
432 | num_sectors = end_sector - start_sector; | ||
432 | 433 | ||
433 | if (unlikely(num_sectors > (u64)INT_MAX)) { | 434 | if (unlikely(num_sectors > (u64)INT_MAX)) { |
434 | u64 remaining = num_sectors; | 435 | u64 remaining = num_sectors; |