Skip to content

Commit 79cd166

Browse files
committed
Merge branch 'md-next' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md into for-5.10/drivers
Pull MD updates from Song: "The main changes are: - Bug fixes in bitmap code, from Zhao Heming. - Fix a work queue check, from Guoqing Jiang. - Fix raid5 oops with reshape, from Song Liu. - Clean up unused code, from Jason Yan." * 'md-next' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md: md/raid5: fix oops during stripe resizing md/bitmap: fix memory leak of temporary bitmap md: fix the checking of wrong work queue md/bitmap: md_bitmap_get_counter returns wrong blocks md/bitmap: md_bitmap_read_sb uses wrong bitmap blocks md/raid0: remove unused function is_io_in_chunk_boundary()
2 parents b6bf083 + b44c018 commit 79cd166

File tree

5 files changed

+9
-24
lines changed

5 files changed

+9
-24
lines changed

drivers/md/md-bitmap.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,8 @@ static int md_bitmap_read_sb(struct bitmap *bitmap)
606606
if (bitmap->cluster_slot >= 0) {
607607
sector_t bm_blocks = bitmap->mddev->resync_max_sectors;
608608

609-
sector_div(bm_blocks,
610-
bitmap->mddev->bitmap_info.chunksize >> 9);
609+
bm_blocks = DIV_ROUND_UP_SECTOR_T(bm_blocks,
610+
(bitmap->mddev->bitmap_info.chunksize >> 9));
611611
/* bits to bytes */
612612
bm_blocks = ((bm_blocks+7) >> 3) + sizeof(bitmap_super_t);
613613
/* to 4k blocks */
@@ -1368,7 +1368,7 @@ __acquires(bitmap->lock)
13681368
if (bitmap->bp[page].hijacked ||
13691369
bitmap->bp[page].map == NULL)
13701370
csize = ((sector_t)1) << (bitmap->chunkshift +
1371-
PAGE_COUNTER_SHIFT - 1);
1371+
PAGE_COUNTER_SHIFT);
13721372
else
13731373
csize = ((sector_t)1) << bitmap->chunkshift;
13741374
*blocks = csize - (offset & (csize - 1));
@@ -1950,6 +1950,7 @@ int md_bitmap_load(struct mddev *mddev)
19501950
}
19511951
EXPORT_SYMBOL_GPL(md_bitmap_load);
19521952

1953+
/* caller need to free returned bitmap with md_bitmap_free() */
19531954
struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot)
19541955
{
19551956
int rv = 0;
@@ -2013,6 +2014,7 @@ int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
20132014
md_bitmap_unplug(mddev->bitmap);
20142015
*low = lo;
20152016
*high = hi;
2017+
md_bitmap_free(bitmap);
20162018

20172019
return rv;
20182020
}
@@ -2616,4 +2618,3 @@ struct attribute_group md_bitmap_group = {
26162618
.name = "bitmap",
26172619
.attrs = md_bitmap_attrs,
26182620
};
2619-

drivers/md/md-cluster.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,6 +1166,7 @@ static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsiz
11661166
* can't resize bitmap
11671167
*/
11681168
goto out;
1169+
md_bitmap_free(bitmap);
11691170
}
11701171

11711172
return 0;

drivers/md/md.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9565,7 +9565,7 @@ static int __init md_init(void)
95659565
goto err_misc_wq;
95669566

95679567
md_rdev_misc_wq = alloc_workqueue("md_rdev_misc", 0, 0);
9568-
if (!md_misc_wq)
9568+
if (!md_rdev_misc_wq)
95699569
goto err_rdev_misc_wq;
95709570

95719571
if ((ret = register_blkdev(MD_MAJOR, "md")) < 0)

drivers/md/raid0.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -426,23 +426,6 @@ static void raid0_free(struct mddev *mddev, void *priv)
426426
kfree(conf);
427427
}
428428

429-
/*
430-
* Is io distribute over 1 or more chunks ?
431-
*/
432-
static inline int is_io_in_chunk_boundary(struct mddev *mddev,
433-
unsigned int chunk_sects, struct bio *bio)
434-
{
435-
if (likely(is_power_of_2(chunk_sects))) {
436-
return chunk_sects >=
437-
((bio->bi_iter.bi_sector & (chunk_sects-1))
438-
+ bio_sectors(bio));
439-
} else{
440-
sector_t sector = bio->bi_iter.bi_sector;
441-
return chunk_sects >= (sector_div(sector, chunk_sects)
442-
+ bio_sectors(bio));
443-
}
444-
}
445-
446429
static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
447430
{
448431
struct r0conf *conf = mddev->private;

drivers/md/raid5.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2585,8 +2585,6 @@ static int resize_stripes(struct r5conf *conf, int newsize)
25852585
} else
25862586
err = -ENOMEM;
25872587

2588-
mutex_unlock(&conf->cache_size_mutex);
2589-
25902588
conf->slab_cache = sc;
25912589
conf->active_name = 1-conf->active_name;
25922590

@@ -2628,6 +2626,8 @@ static int resize_stripes(struct r5conf *conf, int newsize)
26282626

26292627
if (!err)
26302628
conf->pool_size = newsize;
2629+
mutex_unlock(&conf->cache_size_mutex);
2630+
26312631
return err;
26322632
}
26332633

0 commit comments

Comments
 (0)