From ae450eb1cddbaac6793c5ac6d28a286904a3ce83 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Mon, 19 Jan 2004 05:15:12 -0800 Subject: [PATCH] [PATCH] rxrpc update From: David Howells Here's a patch to fix some bugs in my RxRPC code, including the fix for the transport initialisation failure recovery spotted by Pete Zaitcev. It also inserts some extra spaces in a few places. --- net/rxrpc/call.c | 12 +++++++----- net/rxrpc/krxiod.c | 10 ++-------- net/rxrpc/krxsecd.c | 6 ------ net/rxrpc/krxtimod.c | 6 ------ net/rxrpc/transport.c | 14 +++++++++++++- 5 files changed, 22 insertions(+), 26 deletions(-) diff --git a/net/rxrpc/call.c b/net/rxrpc/call.c index 0b8193629153a..f95617a597084 100644 --- a/net/rxrpc/call.c +++ b/net/rxrpc/call.c @@ -699,7 +699,7 @@ static int rxrpc_call_generate_ACK(struct rxrpc_call *call, timo = rxrpc_call_dfr_ack_timeout + jiffies; - _debug("START ACKR TIMER for cj=%lu", timo-call->cjif); + _debug("START ACKR TIMER for cj=%lu", timo - call->cjif); spin_lock(&call->lock); mod_timer(&call->ackr_dfr_timo, timo); @@ -722,7 +722,8 @@ static int rxrpc_call_generate_ACK(struct rxrpc_call *call, /* fill out the appropriate form */ ack.bufferSpace = htons(RXRPC_CALL_ACK_WINDOW_SIZE); - ack.maxSkew = htons(min(call->ackr_high_seq - seq,65535U)); + ack.maxSkew = htons(min(call->ackr_high_seq - seq, + 65535U)); ack.firstPacket = htonl(call->ackr_win_bot); ack.previousPacket = call->ackr_prev_seq; ack.serial = hdr->serial; @@ -825,7 +826,7 @@ void rxrpc_call_do_stuff(struct rxrpc_call *call) _leave(""); -} /* end rxrpc_call_do_timeout() */ +} /* end rxrpc_call_do_stuff() */ /*****************************************************************************/ /* @@ -1061,7 +1062,7 @@ static void rxrpc_call_receive_data_packet(struct rxrpc_call *call, _debug("Call add packet %d to unreadyq", msg->seq); /* insert in seq order */ - list_for_each(_p,&call->app_unreadyq) { + list_for_each(_p, &call->app_unreadyq) { pmsg = list_entry(_p, struct rxrpc_message, link); if (pmsg->seq > msg->seq) break; @@ -2095,7 +2096,8 @@ int rxrpc_call_flush(struct rxrpc_call *call) if (msg->hdr.flags & RXRPC_LAST_PACKET) { msg->hdr.flags &= ~RXRPC_MORE_PACKETS; - msg->hdr.flags |= RXRPC_REQUEST_ACK; + if (call->app_call_state != RXRPC_CSTATE_CLNT_SND_ARGS) + msg->hdr.flags |= RXRPC_REQUEST_ACK; } else { msg->hdr.flags |= RXRPC_MORE_PACKETS; diff --git a/net/rxrpc/krxiod.c b/net/rxrpc/krxiod.c index 051ae4b397d61..f343237017134 100644 --- a/net/rxrpc/krxiod.c +++ b/net/rxrpc/krxiod.c @@ -44,12 +44,6 @@ static int rxrpc_krxiod(void *arg) daemonize("krxiod"); - /* only certain signals are of interest */ - spin_lock_irq(¤t->sighand->siglock); - siginitsetinv(¤t->blocked, 0); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - /* loop around waiting for work to do */ do { /* wait for work or to be told to exit */ @@ -116,7 +110,7 @@ static int rxrpc_krxiod(void *arg) if (!list_empty(&rxrpc_krxiod_callq)) { call = list_entry(rxrpc_krxiod_callq.next, - struct rxrpc_call, + struct rxrpc_call, rcv_krxiodq_lk); list_del_init(&call->rcv_krxiodq_lk); atomic_dec(&rxrpc_krxiod_qcount); @@ -125,7 +119,7 @@ static int rxrpc_krxiod(void *arg) * away */ if (atomic_read(&call->usage) > 0) { _debug("@@@ KRXIOD" - " Begin Attend Call %p",call); + " Begin Attend Call %p", call); rxrpc_get_call(call); } else { diff --git a/net/rxrpc/krxsecd.c b/net/rxrpc/krxsecd.c index 81c0b73ab6f52..c9ee29eb20328 100644 --- a/net/rxrpc/krxsecd.c +++ b/net/rxrpc/krxsecd.c @@ -57,12 +57,6 @@ static int rxrpc_krxsecd(void *arg) daemonize("krxsecd"); - /* only certain signals are of interest */ - spin_lock_irq(¤t->sighand->siglock); - siginitsetinv(¤t->blocked, 0); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - /* loop around waiting for work to do */ do { /* wait for work or to be told to exit */ diff --git a/net/rxrpc/krxtimod.c b/net/rxrpc/krxtimod.c index 68ea67bf96238..31771577c5bbf 100644 --- a/net/rxrpc/krxtimod.c +++ b/net/rxrpc/krxtimod.c @@ -74,12 +74,6 @@ static int krxtimod(void *arg) complete(&krxtimod_alive); - /* only certain signals are of interest */ - spin_lock_irq(¤t->sighand->siglock); - siginitsetinv(¤t->blocked, 0); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - /* loop around looking for things to attend to */ loop: set_current_state(TASK_INTERRUPTIBLE); diff --git a/net/rxrpc/transport.c b/net/rxrpc/transport.c index 33b22b36d824d..70002b501f878 100644 --- a/net/rxrpc/transport.c +++ b/net/rxrpc/transport.c @@ -130,7 +130,19 @@ int rxrpc_create_transport(unsigned short port, return 0; error: - rxrpc_put_transport(trans); + /* finish cleaning up the transport (not really needed here, but...) */ + if (trans->socket) + trans->socket->ops->shutdown(trans->socket, 2); + + /* close the socket */ + if (trans->socket) { + trans->socket->sk->sk_user_data = NULL; + sock_release(trans->socket); + trans->socket = NULL; + } + + kfree(trans); + _leave(" = %d", ret); return ret; -- 2.53.0