Skip to content

Commit 87a8627

Browse files
YuKuai-huaweiYu Kuai
authored andcommitted
md: switch md-cluster to use md_submodle_head
To make code cleaner, and prepare to add kconfig for bitmap. Also remove the unsed global variables pers_lock, md_cluster_ops and md_cluster_mod, and exported symbols register_md_cluster_operations(), unregister_md_cluster_operations() and md_cluster_ops. Link: https://lore.kernel.org/linux-raid/[email protected] Signed-off-by: Yu Kuai <[email protected]> Reviewed-by: Su Yue <[email protected]>
1 parent c594de0 commit 87a8627

File tree

4 files changed

+17
-43
lines changed

4 files changed

+17
-43
lines changed

drivers/md/md-cluster.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,7 +1612,14 @@ static int gather_bitmaps(struct md_rdev *rdev)
16121612
return err;
16131613
}
16141614

1615-
static const struct md_cluster_operations cluster_ops = {
1615+
static struct md_cluster_operations cluster_ops = {
1616+
.head = {
1617+
.type = MD_CLUSTER,
1618+
.id = ID_CLUSTER,
1619+
.name = "cluster",
1620+
.owner = THIS_MODULE,
1621+
},
1622+
16161623
.join = join,
16171624
.leave = leave,
16181625
.slot_number = slot_number,
@@ -1642,13 +1649,12 @@ static int __init cluster_init(void)
16421649
{
16431650
pr_warn("md-cluster: support raid1 and raid10 (limited support)\n");
16441651
pr_info("Registering Cluster MD functions\n");
1645-
register_md_cluster_operations(&cluster_ops, THIS_MODULE);
1646-
return 0;
1652+
return register_md_submodule(&cluster_ops.head);
16471653
}
16481654

16491655
static void cluster_exit(void)
16501656
{
1651-
unregister_md_cluster_operations();
1657+
unregister_md_submodule(&cluster_ops.head);
16521658
}
16531659

16541660
module_init(cluster_init);

drivers/md/md-cluster.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ struct md_cluster_operations {
3737
void (*update_size)(struct mddev *mddev, sector_t old_dev_sectors);
3838
};
3939

40-
extern int register_md_cluster_operations(const struct md_cluster_operations *ops,
41-
struct module *module);
42-
extern int unregister_md_cluster_operations(void);
4340
extern int md_setup_cluster(struct mddev *mddev, int nodes);
4441
extern void md_cluster_stop(struct mddev *mddev);
4542
extern void md_reload_sb(struct mddev *mddev, int raid_disk);

drivers/md/md.c

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,8 @@ static const char *action_name[NR_SYNC_ACTIONS] = {
8181

8282
static DEFINE_XARRAY(md_submodule);
8383

84-
static DEFINE_SPINLOCK(pers_lock);
85-
8684
static const struct kobj_type md_ktype;
8785

88-
static const struct md_cluster_operations *md_cluster_ops;
89-
static struct module *md_cluster_mod;
90-
9186
static DECLARE_WAIT_QUEUE_HEAD(resync_wait);
9287
static struct workqueue_struct *md_wq;
9388

@@ -7452,11 +7447,12 @@ static int update_raid_disks(struct mddev *mddev, int raid_disks)
74527447

74537448
static int get_cluster_ops(struct mddev *mddev)
74547449
{
7455-
spin_lock(&pers_lock);
7456-
mddev->cluster_ops = md_cluster_ops;
7457-
if (mddev->cluster_ops && !try_module_get(md_cluster_mod))
7450+
xa_lock(&md_submodule);
7451+
mddev->cluster_ops = xa_load(&md_submodule, ID_CLUSTER);
7452+
if (mddev->cluster_ops &&
7453+
!try_module_get(mddev->cluster_ops->head.owner))
74587454
mddev->cluster_ops = NULL;
7459-
spin_unlock(&pers_lock);
7455+
xa_unlock(&md_submodule);
74607456

74617457
return mddev->cluster_ops == NULL ? -ENOENT : 0;
74627458
}
@@ -7467,7 +7463,7 @@ static void put_cluster_ops(struct mddev *mddev)
74677463
return;
74687464

74697465
mddev->cluster_ops->leave(mddev);
7470-
module_put(md_cluster_mod);
7466+
module_put(mddev->cluster_ops->head.owner);
74717467
mddev->cluster_ops = NULL;
74727468
}
74737469

@@ -8559,31 +8555,6 @@ void unregister_md_submodule(struct md_submodule_head *msh)
85598555
}
85608556
EXPORT_SYMBOL_GPL(unregister_md_submodule);
85618557

8562-
int register_md_cluster_operations(const struct md_cluster_operations *ops,
8563-
struct module *module)
8564-
{
8565-
int ret = 0;
8566-
spin_lock(&pers_lock);
8567-
if (md_cluster_ops != NULL)
8568-
ret = -EALREADY;
8569-
else {
8570-
md_cluster_ops = ops;
8571-
md_cluster_mod = module;
8572-
}
8573-
spin_unlock(&pers_lock);
8574-
return ret;
8575-
}
8576-
EXPORT_SYMBOL(register_md_cluster_operations);
8577-
8578-
int unregister_md_cluster_operations(void)
8579-
{
8580-
spin_lock(&pers_lock);
8581-
md_cluster_ops = NULL;
8582-
spin_unlock(&pers_lock);
8583-
return 0;
8584-
}
8585-
EXPORT_SYMBOL(unregister_md_cluster_operations);
8586-
85878558
int md_setup_cluster(struct mddev *mddev, int nodes)
85888559
{
85898560
int ret = get_cluster_ops(mddev);

drivers/md/md.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ struct mddev {
603603
mempool_t *serial_info_pool;
604604
void (*sync_super)(struct mddev *mddev, struct md_rdev *rdev);
605605
struct md_cluster_info *cluster_info;
606-
const struct md_cluster_operations *cluster_ops;
606+
struct md_cluster_operations *cluster_ops;
607607
unsigned int good_device_nr; /* good device num within cluster raid */
608608
unsigned int noio_flag; /* for memalloc scope API */
609609

0 commit comments

Comments
 (0)