--- x/net/rxrpc/call_accept.c +++ y/net/rxrpc/call_accept.c @@ -348,7 +348,7 @@ bool rxrpc_new_incoming_call(struct rxrp if (sp->hdr.type != RXRPC_PACKET_TYPE_DATA) return rxrpc_protocol_error(skb, rxrpc_eproto_no_service_call); - read_lock_irq(&local->services_lock); + read_lock_bh(&local->services_lock); /* Weed out packets to services we're not offering. Packets that would * begin a call are explicitly rejected and the rest are just @@ -405,7 +405,7 @@ bool rxrpc_new_incoming_call(struct rxrp spin_unlock(&conn->state_lock); spin_unlock(&rx->incoming_lock); - read_unlock_irq(&local->services_lock); + read_unlock_bh(&local->services_lock); if (hlist_unhashed(&call->error_link)) { spin_lock_irq(&call->peer->lock); @@ -419,20 +419,20 @@ bool rxrpc_new_incoming_call(struct rxrp return true; unsupported_service: - read_unlock_irq(&local->services_lock); + read_unlock_bh(&local->services_lock); return rxrpc_direct_abort(skb, rxrpc_abort_service_not_offered, RX_INVALID_OPERATION, -EOPNOTSUPP); unsupported_security: - read_unlock_irq(&local->services_lock); + read_unlock_bh(&local->services_lock); return rxrpc_direct_abort(skb, rxrpc_abort_service_not_offered, RX_INVALID_OPERATION, -EKEYREJECTED); no_call: spin_unlock(&rx->incoming_lock); - read_unlock_irq(&local->services_lock); + read_unlock_bh(&local->services_lock); _leave(" = f [%u]", skb->mark); return false; discard: - read_unlock_irq(&local->services_lock); + read_unlock_bh(&local->services_lock); return true; }