]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/rxrpc/ar-error.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[linux-2.6-omap-h63xx.git] / net / rxrpc / ar-error.c
index f5539e2f7b58aa54a0e548bdcad8494783267d10..6cb3e8890e7e8305fb702ab933aff4cc18b58bf4 100644 (file)
@@ -100,8 +100,10 @@ void rxrpc_UDP_error_report(struct sock *sk)
                }
 
                if (mtu < peer->mtu) {
+                       spin_lock_bh(&peer->lock);
                        peer->mtu = mtu;
                        peer->maxdata = peer->mtu - peer->hdrsize;
+                       spin_unlock_bh(&peer->lock);
                        _net("Net MTU %u (maxdata %u)",
                             peer->mtu, peer->maxdata);
                }
@@ -111,7 +113,7 @@ void rxrpc_UDP_error_report(struct sock *sk)
 
        /* pass the transport ref to error_handler to release */
        skb_queue_tail(&trans->error_queue, skb);
-       schedule_work(&trans->error_handler);
+       rxrpc_queue_work(&trans->error_handler);
 
        /* reset and regenerate socket error */
        spin_lock_bh(&sk->sk_error_queue.lock);
@@ -235,7 +237,7 @@ void rxrpc_UDP_error_handler(struct work_struct *work)
                            call->state < RXRPC_CALL_NETWORK_ERROR) {
                                call->state = RXRPC_CALL_NETWORK_ERROR;
                                set_bit(RXRPC_CALL_RCVD_ERROR, &call->events);
-                               schedule_work(&call->processor);
+                               rxrpc_queue_call(call);
                        }
                        write_unlock(&call->state_lock);
                        list_del_init(&call->error_link);
@@ -245,7 +247,7 @@ void rxrpc_UDP_error_handler(struct work_struct *work)
        }
 
        if (!skb_queue_empty(&trans->error_queue))
-               schedule_work(&trans->error_handler);
+               rxrpc_queue_work(&trans->error_handler);
 
        rxrpc_free_skb(skb);
        rxrpc_put_transport(trans);