Commit 110946c8 authored by Joel Becker's avatar Joel Becker

ocfs2: Hang the locking proto on the cluster conn and use it in asts.

With the ocfs2_cluster_connection hanging off of the ocfs2_dlm_lksb, we
have access to it in the ast and bast wrapper functions.  Attach the
ocfs2_locking_protocol to the conn.

Now, instead of refering to a static variable for ast/bast pointers, the
wrappers can look at the connection.  This means different connections
can have different ast/bast pointers, and it reduces the need for the
static pointer.
Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
parent c0e41338
...@@ -163,28 +163,21 @@ static void o2dlm_lock_ast_wrapper(void *astarg) ...@@ -163,28 +163,21 @@ static void o2dlm_lock_ast_wrapper(void *astarg)
{ {
struct ocfs2_dlm_lksb *lksb = astarg; struct ocfs2_dlm_lksb *lksb = astarg;
BUG_ON(o2cb_stack.sp_proto == NULL); lksb->lksb_conn->cc_proto->lp_lock_ast(lksb);
o2cb_stack.sp_proto->lp_lock_ast(lksb);
} }
static void o2dlm_blocking_ast_wrapper(void *astarg, int level) static void o2dlm_blocking_ast_wrapper(void *astarg, int level)
{ {
struct ocfs2_dlm_lksb *lksb = astarg; struct ocfs2_dlm_lksb *lksb = astarg;
BUG_ON(o2cb_stack.sp_proto == NULL); lksb->lksb_conn->cc_proto->lp_blocking_ast(lksb, level);
o2cb_stack.sp_proto->lp_blocking_ast(lksb, level);
} }
static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status) static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status)
{ {
struct ocfs2_dlm_lksb *lksb = astarg; struct ocfs2_dlm_lksb *lksb = astarg;
int error = dlm_status_to_errno(status); int error = dlm_status_to_errno(status);
BUG_ON(o2cb_stack.sp_proto == NULL);
/* /*
* In o2dlm, you can get both the lock_ast() for the lock being * In o2dlm, you can get both the lock_ast() for the lock being
* granted and the unlock_ast() for the CANCEL failing. A * granted and the unlock_ast() for the CANCEL failing. A
...@@ -199,7 +192,7 @@ static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status) ...@@ -199,7 +192,7 @@ static void o2dlm_unlock_ast_wrapper(void *astarg, enum dlm_status status)
if (status == DLM_CANCELGRANT) if (status == DLM_CANCELGRANT)
return; return;
o2cb_stack.sp_proto->lp_unlock_ast(lksb, error); lksb->lksb_conn->cc_proto->lp_unlock_ast(lksb, error);
} }
static int o2cb_dlm_lock(struct ocfs2_cluster_connection *conn, static int o2cb_dlm_lock(struct ocfs2_cluster_connection *conn,
...@@ -284,7 +277,7 @@ static int o2cb_cluster_connect(struct ocfs2_cluster_connection *conn) ...@@ -284,7 +277,7 @@ static int o2cb_cluster_connect(struct ocfs2_cluster_connection *conn)
struct dlm_protocol_version fs_version; struct dlm_protocol_version fs_version;
BUG_ON(conn == NULL); BUG_ON(conn == NULL);
BUG_ON(o2cb_stack.sp_proto == NULL); BUG_ON(conn->cc_proto == NULL);
/* for now we only have one cluster/node, make sure we see it /* for now we only have one cluster/node, make sure we see it
* in the heartbeat universe */ * in the heartbeat universe */
......
...@@ -668,8 +668,6 @@ static void fsdlm_lock_ast_wrapper(void *astarg) ...@@ -668,8 +668,6 @@ static void fsdlm_lock_ast_wrapper(void *astarg)
struct ocfs2_dlm_lksb *lksb = astarg; struct ocfs2_dlm_lksb *lksb = astarg;
int status = lksb->lksb_fsdlm.sb_status; int status = lksb->lksb_fsdlm.sb_status;
BUG_ON(ocfs2_user_plugin.sp_proto == NULL);
/* /*
* For now we're punting on the issue of other non-standard errors * For now we're punting on the issue of other non-standard errors
* where we can't tell if the unlock_ast or lock_ast should be called. * where we can't tell if the unlock_ast or lock_ast should be called.
...@@ -681,18 +679,16 @@ static void fsdlm_lock_ast_wrapper(void *astarg) ...@@ -681,18 +679,16 @@ static void fsdlm_lock_ast_wrapper(void *astarg)
*/ */
if (status == -DLM_EUNLOCK || status == -DLM_ECANCEL) if (status == -DLM_EUNLOCK || status == -DLM_ECANCEL)
ocfs2_user_plugin.sp_proto->lp_unlock_ast(lksb, 0); lksb->lksb_conn->cc_proto->lp_unlock_ast(lksb, 0);
else else
ocfs2_user_plugin.sp_proto->lp_lock_ast(lksb); lksb->lksb_conn->cc_proto->lp_lock_ast(lksb);
} }
static void fsdlm_blocking_ast_wrapper(void *astarg, int level) static void fsdlm_blocking_ast_wrapper(void *astarg, int level)
{ {
struct ocfs2_dlm_lksb *lksb = astarg; struct ocfs2_dlm_lksb *lksb = astarg;
BUG_ON(ocfs2_user_plugin.sp_proto == NULL); lksb->lksb_conn->cc_proto->lp_blocking_ast(lksb, level);
ocfs2_user_plugin.sp_proto->lp_blocking_ast(lksb, level);
} }
static int user_dlm_lock(struct ocfs2_cluster_connection *conn, static int user_dlm_lock(struct ocfs2_cluster_connection *conn,
......
...@@ -343,6 +343,7 @@ int ocfs2_cluster_connect(const char *stack_name, ...@@ -343,6 +343,7 @@ int ocfs2_cluster_connect(const char *stack_name,
new_conn->cc_recovery_handler = recovery_handler; new_conn->cc_recovery_handler = recovery_handler;
new_conn->cc_recovery_data = recovery_data; new_conn->cc_recovery_data = recovery_data;
new_conn->cc_proto = lproto;
/* Start the new connection at our maximum compatibility level */ /* Start the new connection at our maximum compatibility level */
new_conn->cc_version = lproto->lp_max_version; new_conn->cc_version = lproto->lp_max_version;
......
...@@ -100,6 +100,7 @@ struct ocfs2_cluster_connection { ...@@ -100,6 +100,7 @@ struct ocfs2_cluster_connection {
char cc_name[GROUP_NAME_MAX]; char cc_name[GROUP_NAME_MAX];
int cc_namelen; int cc_namelen;
struct ocfs2_protocol_version cc_version; struct ocfs2_protocol_version cc_version;
struct ocfs2_locking_protocol *cc_proto;
void (*cc_recovery_handler)(int node_num, void *recovery_data); void (*cc_recovery_handler)(int node_num, void *recovery_data);
void *cc_recovery_data; void *cc_recovery_data;
void *cc_lockspace; void *cc_lockspace;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment