Commit 3f78cd7d authored by Alexander Aring's avatar Alexander Aring Committed by David Teigland

fs: dlm: fix mark per nodeid setting

This patch fixes to set per nodeid mark configuration for accepted
sockets as well. Before this patch only the listen socket mark value was
used for all accepted connections. This patch will ensure that the
cluster mark attribute value will be always used for all sockets, if a
per nodeid mark value is specified dlm will use this value for the
specific node.
Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 0461e0db
...@@ -860,18 +860,22 @@ int dlm_comm_seq(int nodeid, uint32_t *seq) ...@@ -860,18 +860,22 @@ int dlm_comm_seq(int nodeid, uint32_t *seq)
return 0; return 0;
} }
int dlm_comm_mark(int nodeid, unsigned int *mark) void dlm_comm_mark(int nodeid, unsigned int *mark)
{ {
struct dlm_comm *cm; struct dlm_comm *cm;
cm = get_comm(nodeid); cm = get_comm(nodeid);
if (!cm) if (!cm) {
return -ENOENT; *mark = dlm_config.ci_mark;
return;
}
if (cm->mark)
*mark = cm->mark; *mark = cm->mark;
put_comm(cm); else
*mark = dlm_config.ci_mark;
return 0; put_comm(cm);
} }
int dlm_our_nodeid(void) int dlm_our_nodeid(void)
......
...@@ -46,7 +46,7 @@ void dlm_config_exit(void); ...@@ -46,7 +46,7 @@ void dlm_config_exit(void);
int dlm_config_nodes(char *lsname, struct dlm_config_node **nodes_out, int dlm_config_nodes(char *lsname, struct dlm_config_node **nodes_out,
int *count_out); int *count_out);
int dlm_comm_seq(int nodeid, uint32_t *seq); int dlm_comm_seq(int nodeid, uint32_t *seq);
int dlm_comm_mark(int nodeid, unsigned int *mark); void dlm_comm_mark(int nodeid, unsigned int *mark);
int dlm_our_nodeid(void); int dlm_our_nodeid(void);
int dlm_our_addr(struct sockaddr_storage *addr, int num); int dlm_our_addr(struct sockaddr_storage *addr, int num);
......
...@@ -790,6 +790,7 @@ static int accept_from_sock(struct connection *con) ...@@ -790,6 +790,7 @@ static int accept_from_sock(struct connection *con)
int nodeid; int nodeid;
struct connection *newcon; struct connection *newcon;
struct connection *addcon; struct connection *addcon;
unsigned int mark;
if (!dlm_allow_conn) { if (!dlm_allow_conn) {
return -1; return -1;
...@@ -826,6 +827,9 @@ static int accept_from_sock(struct connection *con) ...@@ -826,6 +827,9 @@ static int accept_from_sock(struct connection *con)
return -1; return -1;
} }
dlm_comm_mark(nodeid, &mark);
sock_set_mark(newsock->sk, mark);
log_print("got connection from %d", nodeid); log_print("got connection from %d", nodeid);
/* Check to see if we already have a connection to this node. This /* Check to see if we already have a connection to this node. This
...@@ -971,9 +975,7 @@ static void sctp_connect_to_sock(struct connection *con) ...@@ -971,9 +975,7 @@ static void sctp_connect_to_sock(struct connection *con)
return; return;
} }
result = dlm_comm_mark(con->nodeid, &mark); dlm_comm_mark(con->nodeid, &mark);
if (result < 0)
return;
mutex_lock(&con->sock_mutex); mutex_lock(&con->sock_mutex);
...@@ -1071,9 +1073,7 @@ static void tcp_connect_to_sock(struct connection *con) ...@@ -1071,9 +1073,7 @@ static void tcp_connect_to_sock(struct connection *con)
return; return;
} }
result = dlm_comm_mark(con->nodeid, &mark); dlm_comm_mark(con->nodeid, &mark);
if (result < 0)
return;
mutex_lock(&con->sock_mutex); mutex_lock(&con->sock_mutex);
if (con->retries++ > MAX_CONNECT_RETRIES) if (con->retries++ > MAX_CONNECT_RETRIES)
......
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