|
@@ -7610,16 +7610,12 @@ EXPORT_SYMBOL(unregister_md_cluster_operations);
|
|
|
|
|
|
int md_setup_cluster(struct mddev *mddev, int nodes)
|
|
int md_setup_cluster(struct mddev *mddev, int nodes)
|
|
{
|
|
{
|
|
- int err;
|
|
|
|
-
|
|
|
|
- err = request_module("md-cluster");
|
|
|
|
- if (err) {
|
|
|
|
- pr_err("md-cluster module not found.\n");
|
|
|
|
- return -ENOENT;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ if (!md_cluster_ops)
|
|
|
|
+ request_module("md-cluster");
|
|
spin_lock(&pers_lock);
|
|
spin_lock(&pers_lock);
|
|
|
|
+ /* ensure module won't be unloaded */
|
|
if (!md_cluster_ops || !try_module_get(md_cluster_mod)) {
|
|
if (!md_cluster_ops || !try_module_get(md_cluster_mod)) {
|
|
|
|
+ pr_err("can't find md-cluster module or get it's reference.\n");
|
|
spin_unlock(&pers_lock);
|
|
spin_unlock(&pers_lock);
|
|
return -ENOENT;
|
|
return -ENOENT;
|
|
}
|
|
}
|