@@ -896,7 +896,8 @@ static int join(struct mddev *mddev, int nodes)
memset(str, 0, 64);
sprintf(str, "%pU", mddev->uuid);
- ret = dlm_new_lockspace(str, mddev->bitmap_info.cluster_name,
+ ret = dlm_new_lockspace(&init_net, str,
+ mddev->bitmap_info.cluster_name,
DLM_LSFL_SOFTIRQ, LVB_SIZE, &md_ls_ops, mddev,
&ops_rv, &cinfo->lockspace);
if (ret)
@@ -663,8 +663,9 @@ static int __dlm_new_lockspace(const char *name, const char *cluster,
return error;
}
-int dlm_new_lockspace(const char *name, const char *cluster, uint32_t flags,
- int lvblen, const struct dlm_lockspace_ops *ops,
+int dlm_new_lockspace(struct net *net, const char *name, const char *cluster,
+ uint32_t flags, int lvblen,
+ const struct dlm_lockspace_ops *ops,
void *ops_arg, int *ops_result,
dlm_lockspace_t **lockspace)
{
@@ -1328,9 +1328,9 @@ static int gdlm_mount(struct gfs2_sbd *sdp, const char *table)
* create/join lockspace
*/
- error = dlm_new_lockspace(fsname, cluster, flags, GDLM_LVB_SIZE,
- &gdlm_lockspace_ops, sdp, &ops_result,
- &ls->ls_dlm);
+ error = dlm_new_lockspace(&init_net, fsname, cluster, flags,
+ GDLM_LVB_SIZE, &gdlm_lockspace_ops, sdp,
+ &ops_result, &ls->ls_dlm);
if (error) {
fs_err(sdp, "dlm_new_lockspace error %d\n", error);
goto fail_free;
@@ -984,7 +984,7 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn)
conn->cc_private = lc;
lc->oc_type = NO_CONTROLD;
- rc = dlm_new_lockspace(conn->cc_name, conn->cc_cluster_name,
+ rc = dlm_new_lockspace(&init_net, conn->cc_name, conn->cc_cluster_name,
DLM_LSFL_NEWEXCL, DLM_LVB_LEN,
&ocfs2_ls_ops, conn, &ops_rv, &fsdlm);
if (rc) {
@@ -11,9 +11,9 @@
#ifndef __DLM_DOT_H__
#define __DLM_DOT_H__
+#include <net/net_namespace.h>
#include <uapi/linux/dlm.h>
-
struct dlm_slot {
int nodeid; /* 1 to MAX_INT */
int slot; /* 1 to MAX_INT */
@@ -43,6 +43,11 @@ struct dlm_lockspace_ops {
*
* Create/join a lockspace.
*
+ * net: the net namespace context pointer where the lockspace belongs to.
+ * DLM lockspaces can be separated according to net namespaces. As DLM
+ * requires networking communication this net namespace can be used to
+ * have a own DLM lockspace on each network entity e.g. a DLM node.
+ *
* name: lockspace name, null terminated, up to DLM_LOCKSPACE_LEN (not
* including terminating null).
*
@@ -82,7 +87,7 @@ struct dlm_lockspace_ops {
* lockspace: handle for dlm functions
*/
-int dlm_new_lockspace(const char *name, const char *cluster,
+int dlm_new_lockspace(struct net *net, const char *name, const char *cluster,
uint32_t flags, int lvblen,
const struct dlm_lockspace_ops *ops, void *ops_arg,
int *ops_result, dlm_lockspace_t **lockspace);
To prepare a namespace separation for each DLM lockspaces context we add a struct net parameter that the user tells us in which net-namespace the lockspace should be created. We are using net-namespace here because a DLM lockspaces context acts like a per cluster node separation and the created per node sockets need to be separated by their net-namespaces anyway. It just fits that the DLM lockspaces are also separated by a per "network entity". This patch only prepares for such parameter for a functionality that does not exist yet. It does not have any effect. If there will be support for such handling the DLM user need to activate it anyway as the applied parameter for now is the "&init_net" instance that is the default namespace which we are currently using. Signed-off-by: Alexander Aring <aahringo@redhat.com> --- drivers/md/md-cluster.c | 3 ++- fs/dlm/lockspace.c | 5 +++-- fs/gfs2/lock_dlm.c | 6 +++--- fs/ocfs2/stack_user.c | 2 +- include/linux/dlm.h | 9 +++++++-- 5 files changed, 16 insertions(+), 9 deletions(-)