Skip to contentSkip to conversation

Introduce md_cluster_operations to handle cluster functions

PATCH In review Goldwyn Rodrigues 1 participant 1 message Dec 18, 2014 MD RAID

lore
Share & tools
lore
#0 lore raw

PATCH 5/24 Introduce md_cluster_operations to handle cluster functions

This allows dynamic registering of cluster hooks.

---
 drivers/md/md-cluster.c | 18 +++++++++++++++++
 drivers/md/md-cluster.h | 15 +++++++++++++++
 drivers/md/md.c         | 51 +++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/md/md.h         |  7 +++++++
 4 files changed, 91 insertions(+)
 create mode 100644 drivers/md/md-cluster.h
drivers/md/md-cluster.c +18 -0
index e555b76..d2d4d33 100644
@@ -16,6 +16,7 @@
 #include <linux/dlm.h>
 #include <linux/sched.h>
 #include "md.h"
+#include "md-cluster.h"
 
 #define LVB_SIZE	64
 
@@ -118,14 +119,31 @@ static void lockres_free(struct dlm_lock_resource *res)
 	return;
 }
 
+static int join(struct mddev *md, int nodes)
+{
+	return 0;
+}
+
+static int leave(struct mddev *md)
+{
+	return 0;
+}
+
+static struct md_cluster_operations cluster_ops = {
+	.join   = join,
+	.leave  = leave,
+};
+
 static int __init cluster_init(void)
 {
 	pr_info("Registering Cluster MD functions\n");
+	register_md_cluster_operations(&cluster_ops, THIS_MODULE);
 	return 0;
 }
 
 static void cluster_exit(void)
 {
+	unregister_md_cluster_operations();
 }
 
 module_init(cluster_init);
drivers/md/md-cluster.h new file +15 -0
new file mode 100644
index 0000000..aa9f07b
@@ -0,0 +1,15 @@
+
+
+#ifndef _MD_CLUSTER_H
+#define _MD_CLUSTER_H
+
+#include "md.h"
+
+struct mddev;
+
+struct md_cluster_operations {
+	int (*join)(struct mddev *mddev);
+	int (*leave)(struct mddev *mddev);
+};
+
+#endif /* _MD_CLUSTER_H */
drivers/md/md.c +51 -0

69 lines not on this page · raw message

drivers/md/md.h +7 -0
index 07bba96..076e1ae 100644
@@ -23,6 +23,7 @@
 #include <linux/timer.h>
 #include <linux/wait.h>
 #include <linux/workqueue.h>
+#include "md-cluster.h"
 
 #define MaxSector (~(sector_t)0)
 
@@ -575,6 +576,11 @@ static inline void safe_put_page(struct page *p)
 
 extern int register_md_personality(struct md_personality *p);
 extern int unregister_md_personality(struct md_personality *p);
+extern int register_md_cluster_operations(struct md_cluster_operations *ops,
+		struct module *module);
+extern int unregister_md_cluster_operations(void);
+extern int md_setup_cluster(struct mddev *mddev, int nodes);
+extern void md_cluster_stop(struct mddev *mddev);
 extern struct md_thread *md_register_thread(
 	void (*run)(struct md_thread *thread),
 	struct mddev *mddev,
@@ -627,4 +633,5 @@ static inline int mddev_check_plugged(struct mddev *mddev)
 	return !!blk_check_plugged(md_unplug, mddev,
 				   sizeof(struct blk_plug_cb));
 }
+extern struct md_cluster_operations *md_cluster_ops;
 #endif /* _MD_MD_H */
Signature · 1 line
2.1.2