forked from Minki/linux
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: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
04bedd79a7
commit
6861f35078
@ -459,9 +459,9 @@ static void process_sctp_notification(struct connection *con,
|
||||
int prim_len, ret;
|
||||
int addr_len;
|
||||
struct connection *new_con;
|
||||
struct file *file;
|
||||
sctp_peeloff_arg_t parg;
|
||||
int parglen = sizeof(parg);
|
||||
int err;
|
||||
|
||||
/*
|
||||
* We get this before any data for an association.
|
||||
@ -516,19 +516,22 @@ static void process_sctp_notification(struct connection *con,
|
||||
ret = kernel_getsockopt(con->sock, IPPROTO_SCTP,
|
||||
SCTP_SOCKOPT_PEELOFF,
|
||||
(void *)&parg, &parglen);
|
||||
if (ret) {
|
||||
if (ret < 0) {
|
||||
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);
|
||||
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);
|
||||
fput(file);
|
||||
put_unused_fd(parg.sd);
|
||||
sockfd_put(new_con->sock);
|
||||
|
||||
log_print("got new/restarted association %d nodeid %d",
|
||||
(int)sn->sn_assoc_change.sac_assoc_id, nodeid);
|
||||
log_print("connecting to %d sctp association %d",
|
||||
nodeid, (int)sn->sn_assoc_change.sac_assoc_id);
|
||||
|
||||
/* Send any pending writes */
|
||||
clear_bit(CF_CONNECT_PENDING, &new_con->flags);
|
||||
@ -841,8 +844,6 @@ static void sctp_init_assoc(struct connection *con)
|
||||
if (con->retries++ > MAX_CONNECT_RETRIES)
|
||||
return;
|
||||
|
||||
log_print("Initiating association with node %d", con->nodeid);
|
||||
|
||||
if (nodeid_to_addr(con->nodeid, (struct sockaddr *)&rem_addr)) {
|
||||
log_print("no address for nodeid %d", con->nodeid);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user