Commit 6861f350 authored by David Teigland's avatar David Teigland

dlm: fix socket fd translation

The code to set up sctp sockets was not using the sockfd_lookup()
and sockfd_put() routines to translate an fd to a socket.  The
direct fget and fput calls were resulting in error messages from
alloc_fd().

Also clean up two log messages and remove a third, related to
setting up sctp associations.
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 04bedd79
...@@ -459,9 +459,9 @@ static void process_sctp_notification(struct connection *con, ...@@ -459,9 +459,9 @@ static void process_sctp_notification(struct connection *con,
int prim_len, ret; int prim_len, ret;
int addr_len; int addr_len;
struct connection *new_con; struct connection *new_con;
struct file *file;
sctp_peeloff_arg_t parg; sctp_peeloff_arg_t parg;
int parglen = sizeof(parg); int parglen = sizeof(parg);
int err;
/* /*
* We get this before any data for an association. * We get this before any data for an association.
...@@ -516,19 +516,22 @@ static void process_sctp_notification(struct connection *con, ...@@ -516,19 +516,22 @@ static void process_sctp_notification(struct connection *con,
ret = kernel_getsockopt(con->sock, IPPROTO_SCTP, ret = kernel_getsockopt(con->sock, IPPROTO_SCTP,
SCTP_SOCKOPT_PEELOFF, SCTP_SOCKOPT_PEELOFF,
(void *)&parg, &parglen); (void *)&parg, &parglen);
if (ret) { if (ret < 0) {
log_print("Can't peel off a socket for " log_print("Can't peel off a socket for "
"connection %d to node %d: err=%d\n", "connection %d to node %d: err=%d",
parg.associd, nodeid, ret); parg.associd, nodeid, ret);
return;
}
new_con->sock = sockfd_lookup(parg.sd, &err);
if (!new_con->sock) {
log_print("sockfd_lookup error %d", err);
return;
} }
file = fget(parg.sd);
new_con->sock = SOCKET_I(file->f_dentry->d_inode);
add_sock(new_con->sock, new_con); add_sock(new_con->sock, new_con);
fput(file); sockfd_put(new_con->sock);
put_unused_fd(parg.sd);
log_print("got new/restarted association %d nodeid %d", log_print("connecting to %d sctp association %d",
(int)sn->sn_assoc_change.sac_assoc_id, nodeid); nodeid, (int)sn->sn_assoc_change.sac_assoc_id);
/* Send any pending writes */ /* Send any pending writes */
clear_bit(CF_CONNECT_PENDING, &new_con->flags); clear_bit(CF_CONNECT_PENDING, &new_con->flags);
...@@ -841,8 +844,6 @@ static void sctp_init_assoc(struct connection *con) ...@@ -841,8 +844,6 @@ static void sctp_init_assoc(struct connection *con)
if (con->retries++ > MAX_CONNECT_RETRIES) if (con->retries++ > MAX_CONNECT_RETRIES)
return; return;
log_print("Initiating association with node %d", con->nodeid);
if (nodeid_to_addr(con->nodeid, (struct sockaddr *)&rem_addr)) { if (nodeid_to_addr(con->nodeid, (struct sockaddr *)&rem_addr)) {
log_print("no address for nodeid %d", con->nodeid); log_print("no address for nodeid %d", con->nodeid);
return; return;
......
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