Skip to content

Commit e1791da

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md/md-bitmap: pass in mddev directly for md_bitmap_resize()
And move the condition "if (mddev->bitmap)" into md_bitmap_resize() as well, on the one hand make code cleaner, on the other hand try not to access bitmap directly. Since we are here, also change the parameter 'init' from int to bool. Signed-off-by: Yu Kuai <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Song Liu <[email protected]>
1 parent 18db2a9 commit e1791da

File tree

7 files changed

+45
-26
lines changed

7 files changed

+45
-26
lines changed

drivers/md/dm-raid.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4068,7 +4068,7 @@ static int raid_preresume(struct dm_target *ti)
40684068
mddev->bitmap_info.chunksize != to_bytes(rs->requested_bitmap_chunk_sectors)))) {
40694069
int chunksize = to_bytes(rs->requested_bitmap_chunk_sectors) ?: mddev->bitmap_info.chunksize;
40704070

4071-
r = md_bitmap_resize(mddev->bitmap, mddev->dev_sectors, chunksize, 0);
4071+
r = md_bitmap_resize(mddev, mddev->dev_sectors, chunksize, false);
40724072
if (r)
40734073
DMERR("Failed to resize bitmap");
40744074
}

drivers/md/md-bitmap.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
#include "md.h"
3333
#include "md-bitmap.h"
3434

35+
static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,
36+
int chunksize, bool init);
37+
3538
static inline char *bmname(struct bitmap *bitmap)
3639
{
3740
return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
@@ -1975,7 +1978,8 @@ static struct bitmap *__bitmap_create(struct mddev *mddev, int slot)
19751978
goto error;
19761979

19771980
bitmap->daemon_lastrun = jiffies;
1978-
err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1);
1981+
err = __bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize,
1982+
true);
19791983
if (err)
19801984
goto error;
19811985

@@ -2163,8 +2167,8 @@ static int bitmap_get_stats(struct bitmap *bitmap, struct md_bitmap_stats *stats
21632167
return 0;
21642168
}
21652169

2166-
int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
2167-
int chunksize, int init)
2170+
static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,
2171+
int chunksize, bool init)
21682172
{
21692173
/* If chunk_size is 0, choose an appropriate chunk size.
21702174
* Then possibly allocate new storage space.
@@ -2369,6 +2373,17 @@ int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
23692373
err:
23702374
return ret;
23712375
}
2376+
2377+
int md_bitmap_resize(struct mddev *mddev, sector_t blocks, int chunksize,
2378+
bool init)
2379+
{
2380+
struct bitmap *bitmap = mddev->bitmap;
2381+
2382+
if (!bitmap)
2383+
return 0;
2384+
2385+
return __bitmap_resize(bitmap, blocks, chunksize, init);
2386+
}
23722387
EXPORT_SYMBOL_GPL(md_bitmap_resize);
23732388

23742389
static ssize_t

drivers/md/md-bitmap.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,8 @@ void mddev_set_bitmap_ops(struct mddev *mddev);
280280

281281
/* these are exported */
282282

283-
int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
284-
int chunksize, int init);
283+
int md_bitmap_resize(struct mddev *mddev, sector_t blocks, int chunksize,
284+
bool init);
285285
struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot);
286286
int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
287287
sector_t *lo, sector_t *hi, bool clear_bits);

drivers/md/md-cluster.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,8 +628,8 @@ static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
628628
break;
629629
case BITMAP_RESIZE:
630630
if (le64_to_cpu(msg->high) != mddev->pers->size(mddev, 0, 0))
631-
ret = md_bitmap_resize(mddev->bitmap,
632-
le64_to_cpu(msg->high), 0, 0);
631+
ret = md_bitmap_resize(mddev, le64_to_cpu(msg->high), 0,
632+
false);
633633
break;
634634
default:
635635
ret = -1;

drivers/md/raid1.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3297,14 +3297,16 @@ static int raid1_resize(struct mddev *mddev, sector_t sectors)
32973297
* worth it.
32983298
*/
32993299
sector_t newsize = raid1_size(mddev, sectors, 0);
3300+
int ret;
3301+
33003302
if (mddev->external_size &&
33013303
mddev->array_sectors > newsize)
33023304
return -EINVAL;
3303-
if (mddev->bitmap) {
3304-
int ret = md_bitmap_resize(mddev->bitmap, newsize, 0, 0);
3305-
if (ret)
3306-
return ret;
3307-
}
3305+
3306+
ret = md_bitmap_resize(mddev, newsize, 0, false);
3307+
if (ret)
3308+
return ret;
3309+
33083310
md_set_array_sectors(mddev, newsize);
33093311
if (sectors > mddev->dev_sectors &&
33103312
mddev->recovery_cp > mddev->dev_sectors) {

drivers/md/raid10.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4196,6 +4196,7 @@ static int raid10_resize(struct mddev *mddev, sector_t sectors)
41964196
*/
41974197
struct r10conf *conf = mddev->private;
41984198
sector_t oldsize, size;
4199+
int ret;
41994200

42004201
if (mddev->reshape_position != MaxSector)
42014202
return -EBUSY;
@@ -4208,11 +4209,11 @@ static int raid10_resize(struct mddev *mddev, sector_t sectors)
42084209
if (mddev->external_size &&
42094210
mddev->array_sectors > size)
42104211
return -EINVAL;
4211-
if (mddev->bitmap) {
4212-
int ret = md_bitmap_resize(mddev->bitmap, size, 0, 0);
4213-
if (ret)
4214-
return ret;
4215-
}
4212+
4213+
ret = md_bitmap_resize(mddev, size, 0, false);
4214+
if (ret)
4215+
return ret;
4216+
42164217
md_set_array_sectors(mddev, size);
42174218
if (sectors > mddev->dev_sectors &&
42184219
mddev->recovery_cp > oldsize) {
@@ -4478,7 +4479,7 @@ static int raid10_start_reshape(struct mddev *mddev)
44784479
newsize = raid10_size(mddev, 0, conf->geo.raid_disks);
44794480

44804481
if (!mddev_is_clustered(mddev)) {
4481-
ret = md_bitmap_resize(mddev->bitmap, newsize, 0, 0);
4482+
ret = md_bitmap_resize(mddev, newsize, 0, false);
44824483
if (ret)
44834484
goto abort;
44844485
else
@@ -4500,13 +4501,13 @@ static int raid10_start_reshape(struct mddev *mddev)
45004501
MD_FEATURE_RESHAPE_ACTIVE)) || (oldsize == newsize))
45014502
goto out;
45024503

4503-
ret = md_bitmap_resize(mddev->bitmap, newsize, 0, 0);
4504+
ret = md_bitmap_resize(mddev, newsize, 0, false);
45044505
if (ret)
45054506
goto abort;
45064507

45074508
ret = md_cluster_ops->resize_bitmaps(mddev, newsize, oldsize);
45084509
if (ret) {
4509-
md_bitmap_resize(mddev->bitmap, oldsize, 0, 0);
4510+
md_bitmap_resize(mddev, oldsize, 0, false);
45104511
goto abort;
45114512
}
45124513
}

drivers/md/raid5.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8313,6 +8313,7 @@ static int raid5_resize(struct mddev *mddev, sector_t sectors)
83138313
*/
83148314
sector_t newsize;
83158315
struct r5conf *conf = mddev->private;
8316+
int ret;
83168317

83178318
if (raid5_has_log(conf) || raid5_has_ppl(conf))
83188319
return -EINVAL;
@@ -8321,11 +8322,11 @@ static int raid5_resize(struct mddev *mddev, sector_t sectors)
83218322
if (mddev->external_size &&
83228323
mddev->array_sectors > newsize)
83238324
return -EINVAL;
8324-
if (mddev->bitmap) {
8325-
int ret = md_bitmap_resize(mddev->bitmap, sectors, 0, 0);
8326-
if (ret)
8327-
return ret;
8328-
}
8325+
8326+
ret = md_bitmap_resize(mddev, sectors, 0, false);
8327+
if (ret)
8328+
return ret;
8329+
83298330
md_set_array_sectors(mddev, newsize);
83308331
if (sectors > mddev->dev_sectors &&
83318332
mddev->recovery_cp > mddev->dev_sectors) {

0 commit comments

Comments
 (0)