diff options
Diffstat (limited to 'net/rxrpc')
| -rw-r--r-- | net/rxrpc/ar-ack.c | 2 | ||||
| -rw-r--r-- | net/rxrpc/ar-connevent.c | 3 | ||||
| -rw-r--r-- | net/rxrpc/ar-error.c | 5 | ||||
| -rw-r--r-- | net/rxrpc/ar-input.c | 1 | ||||
| -rw-r--r-- | net/rxrpc/ar-key.c | 19 | ||||
| -rw-r--r-- | net/rxrpc/ar-peer.c | 32 | ||||
| -rw-r--r-- | net/rxrpc/ar-transport.c | 3 |
7 files changed, 32 insertions, 33 deletions
diff --git a/net/rxrpc/ar-ack.c b/net/rxrpc/ar-ack.c index b6ffe4e1b84a..f99cfce7ca97 100644 --- a/net/rxrpc/ar-ack.c +++ b/net/rxrpc/ar-ack.c | |||
| @@ -375,7 +375,6 @@ protocol_error: | |||
| 375 | */ | 375 | */ |
| 376 | static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) | 376 | static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) |
| 377 | { | 377 | { |
| 378 | struct rxrpc_skb_priv *sp; | ||
| 379 | unsigned long _skb; | 378 | unsigned long _skb; |
| 380 | int tail = call->acks_tail, old_tail; | 379 | int tail = call->acks_tail, old_tail; |
| 381 | int win = CIRC_CNT(call->acks_head, tail, call->acks_winsz); | 380 | int win = CIRC_CNT(call->acks_head, tail, call->acks_winsz); |
| @@ -387,7 +386,6 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, u32 hard) | |||
| 387 | while (call->acks_hard < hard) { | 386 | while (call->acks_hard < hard) { |
| 388 | smp_read_barrier_depends(); | 387 | smp_read_barrier_depends(); |
| 389 | _skb = call->acks_window[tail] & ~1; | 388 | _skb = call->acks_window[tail] & ~1; |
| 390 | sp = rxrpc_skb((struct sk_buff *) _skb); | ||
| 391 | rxrpc_free_skb((struct sk_buff *) _skb); | 389 | rxrpc_free_skb((struct sk_buff *) _skb); |
| 392 | old_tail = tail; | 390 | old_tail = tail; |
| 393 | tail = (tail + 1) & (call->acks_winsz - 1); | 391 | tail = (tail + 1) & (call->acks_winsz - 1); |
diff --git a/net/rxrpc/ar-connevent.c b/net/rxrpc/ar-connevent.c index 0505cdc4d6d4..e7ed43a54c41 100644 --- a/net/rxrpc/ar-connevent.c +++ b/net/rxrpc/ar-connevent.c | |||
| @@ -259,7 +259,6 @@ void rxrpc_process_connection(struct work_struct *work) | |||
| 259 | { | 259 | { |
| 260 | struct rxrpc_connection *conn = | 260 | struct rxrpc_connection *conn = |
| 261 | container_of(work, struct rxrpc_connection, processor); | 261 | container_of(work, struct rxrpc_connection, processor); |
| 262 | struct rxrpc_skb_priv *sp; | ||
| 263 | struct sk_buff *skb; | 262 | struct sk_buff *skb; |
| 264 | u32 abort_code = RX_PROTOCOL_ERROR; | 263 | u32 abort_code = RX_PROTOCOL_ERROR; |
| 265 | int ret; | 264 | int ret; |
| @@ -276,8 +275,6 @@ void rxrpc_process_connection(struct work_struct *work) | |||
| 276 | /* go through the conn-level event packets, releasing the ref on this | 275 | /* go through the conn-level event packets, releasing the ref on this |
| 277 | * connection that each one has when we've finished with it */ | 276 | * connection that each one has when we've finished with it */ |
| 278 | while ((skb = skb_dequeue(&conn->rx_queue))) { | 277 | while ((skb = skb_dequeue(&conn->rx_queue))) { |
| 279 | sp = rxrpc_skb(skb); | ||
| 280 | |||
| 281 | ret = rxrpc_process_event(conn, skb, &abort_code); | 278 | ret = rxrpc_process_event(conn, skb, &abort_code); |
| 282 | switch (ret) { | 279 | switch (ret) { |
| 283 | case -EPROTO: | 280 | case -EPROTO: |
diff --git a/net/rxrpc/ar-error.c b/net/rxrpc/ar-error.c index d4d1ae26d293..5d6b572a6704 100644 --- a/net/rxrpc/ar-error.c +++ b/net/rxrpc/ar-error.c | |||
| @@ -139,7 +139,7 @@ void rxrpc_UDP_error_handler(struct work_struct *work) | |||
| 139 | struct rxrpc_transport *trans = | 139 | struct rxrpc_transport *trans = |
| 140 | container_of(work, struct rxrpc_transport, error_handler); | 140 | container_of(work, struct rxrpc_transport, error_handler); |
| 141 | struct sk_buff *skb; | 141 | struct sk_buff *skb; |
| 142 | int local, err; | 142 | int err; |
| 143 | 143 | ||
| 144 | _enter(""); | 144 | _enter(""); |
| 145 | 145 | ||
| @@ -157,7 +157,6 @@ void rxrpc_UDP_error_handler(struct work_struct *work) | |||
| 157 | 157 | ||
| 158 | switch (ee->ee_origin) { | 158 | switch (ee->ee_origin) { |
| 159 | case SO_EE_ORIGIN_ICMP: | 159 | case SO_EE_ORIGIN_ICMP: |
| 160 | local = 0; | ||
| 161 | switch (ee->ee_type) { | 160 | switch (ee->ee_type) { |
| 162 | case ICMP_DEST_UNREACH: | 161 | case ICMP_DEST_UNREACH: |
| 163 | switch (ee->ee_code) { | 162 | switch (ee->ee_code) { |
| @@ -207,7 +206,6 @@ void rxrpc_UDP_error_handler(struct work_struct *work) | |||
| 207 | case SO_EE_ORIGIN_LOCAL: | 206 | case SO_EE_ORIGIN_LOCAL: |
| 208 | _proto("Rx Received local error { error=%d }", | 207 | _proto("Rx Received local error { error=%d }", |
| 209 | ee->ee_errno); | 208 | ee->ee_errno); |
| 210 | local = 1; | ||
| 211 | break; | 209 | break; |
| 212 | 210 | ||
| 213 | case SO_EE_ORIGIN_NONE: | 211 | case SO_EE_ORIGIN_NONE: |
| @@ -215,7 +213,6 @@ void rxrpc_UDP_error_handler(struct work_struct *work) | |||
| 215 | default: | 213 | default: |
| 216 | _proto("Rx Received error report { orig=%u }", | 214 | _proto("Rx Received error report { orig=%u }", |
| 217 | ee->ee_origin); | 215 | ee->ee_origin); |
| 218 | local = 0; | ||
| 219 | break; | 216 | break; |
| 220 | } | 217 | } |
| 221 | 218 | ||
diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c index 89315009bab1..1a2b0633fece 100644 --- a/net/rxrpc/ar-input.c +++ b/net/rxrpc/ar-input.c | |||
| @@ -423,6 +423,7 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb) | |||
| 423 | goto protocol_error; | 423 | goto protocol_error; |
| 424 | } | 424 | } |
| 425 | 425 | ||
| 426 | case RXRPC_PACKET_TYPE_ACKALL: | ||
| 426 | case RXRPC_PACKET_TYPE_ACK: | 427 | case RXRPC_PACKET_TYPE_ACK: |
| 427 | /* ACK processing is done in process context */ | 428 | /* ACK processing is done in process context */ |
| 428 | read_lock_bh(&call->state_lock); | 429 | read_lock_bh(&call->state_lock); |
diff --git a/net/rxrpc/ar-key.c b/net/rxrpc/ar-key.c index d763793d39de..43ea7de2fc8e 100644 --- a/net/rxrpc/ar-key.c +++ b/net/rxrpc/ar-key.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <keys/user-type.h> | 25 | #include <keys/user-type.h> |
| 26 | #include "ar-internal.h" | 26 | #include "ar-internal.h" |
| 27 | 27 | ||
| 28 | static int rxrpc_vet_description_s(const char *); | ||
| 28 | static int rxrpc_instantiate(struct key *, const void *, size_t); | 29 | static int rxrpc_instantiate(struct key *, const void *, size_t); |
| 29 | static int rxrpc_instantiate_s(struct key *, const void *, size_t); | 30 | static int rxrpc_instantiate_s(struct key *, const void *, size_t); |
| 30 | static void rxrpc_destroy(struct key *); | 31 | static void rxrpc_destroy(struct key *); |
| @@ -52,6 +53,7 @@ EXPORT_SYMBOL(key_type_rxrpc); | |||
| 52 | */ | 53 | */ |
| 53 | struct key_type key_type_rxrpc_s = { | 54 | struct key_type key_type_rxrpc_s = { |
| 54 | .name = "rxrpc_s", | 55 | .name = "rxrpc_s", |
| 56 | .vet_description = rxrpc_vet_description_s, | ||
| 55 | .instantiate = rxrpc_instantiate_s, | 57 | .instantiate = rxrpc_instantiate_s, |
| 56 | .match = user_match, | 58 | .match = user_match, |
| 57 | .destroy = rxrpc_destroy_s, | 59 | .destroy = rxrpc_destroy_s, |
| @@ -59,6 +61,23 @@ struct key_type key_type_rxrpc_s = { | |||
| 59 | }; | 61 | }; |
| 60 | 62 | ||
| 61 | /* | 63 | /* |
| 64 | * Vet the description for an RxRPC server key | ||
| 65 | */ | ||
| 66 | static int rxrpc_vet_description_s(const char *desc) | ||
| 67 | { | ||
| 68 | unsigned long num; | ||
| 69 | char *p; | ||
| 70 | |||
| 71 | num = simple_strtoul(desc, &p, 10); | ||
| 72 | if (*p != ':' || num > 65535) | ||
| 73 | return -EINVAL; | ||
| 74 | num = simple_strtoul(p + 1, &p, 10); | ||
| 75 | if (*p || num < 1 || num > 255) | ||
| 76 | return -EINVAL; | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | /* | ||
| 62 | * parse an RxKAD type XDR format token | 81 | * parse an RxKAD type XDR format token |
| 63 | * - the caller guarantees we have at least 4 words | 82 | * - the caller guarantees we have at least 4 words |
| 64 | */ | 83 | */ |
diff --git a/net/rxrpc/ar-peer.c b/net/rxrpc/ar-peer.c index a53fb25a64ed..2754f098d436 100644 --- a/net/rxrpc/ar-peer.c +++ b/net/rxrpc/ar-peer.c | |||
| @@ -36,31 +36,16 @@ static void rxrpc_destroy_peer(struct work_struct *work); | |||
| 36 | static void rxrpc_assess_MTU_size(struct rxrpc_peer *peer) | 36 | static void rxrpc_assess_MTU_size(struct rxrpc_peer *peer) |
| 37 | { | 37 | { |
| 38 | struct rtable *rt; | 38 | struct rtable *rt; |
| 39 | struct flowi fl; | 39 | struct flowi4 fl4; |
| 40 | int ret; | ||
| 41 | 40 | ||
| 42 | peer->if_mtu = 1500; | 41 | peer->if_mtu = 1500; |
| 43 | 42 | ||
| 44 | memset(&fl, 0, sizeof(fl)); | 43 | rt = ip_route_output_ports(&init_net, &fl4, NULL, |
| 45 | 44 | peer->srx.transport.sin.sin_addr.s_addr, 0, | |
| 46 | switch (peer->srx.transport.family) { | 45 | htons(7000), htons(7001), |
| 47 | case AF_INET: | 46 | IPPROTO_UDP, 0, 0); |
| 48 | fl.oif = 0; | 47 | if (IS_ERR(rt)) { |
| 49 | fl.proto = IPPROTO_UDP, | 48 | _leave(" [route err %ld]", PTR_ERR(rt)); |
| 50 | fl.fl4_dst = peer->srx.transport.sin.sin_addr.s_addr; | ||
| 51 | fl.fl4_src = 0; | ||
| 52 | fl.fl4_tos = 0; | ||
| 53 | /* assume AFS.CM talking to AFS.FS */ | ||
| 54 | fl.fl_ip_sport = htons(7001); | ||
| 55 | fl.fl_ip_dport = htons(7000); | ||
| 56 | break; | ||
| 57 | default: | ||
| 58 | BUG(); | ||
| 59 | } | ||
| 60 | |||
| 61 | ret = ip_route_output_key(&init_net, &rt, &fl); | ||
| 62 | if (ret < 0) { | ||
| 63 | _leave(" [route err %d]", ret); | ||
| 64 | return; | 49 | return; |
| 65 | } | 50 | } |
| 66 | 51 | ||
| @@ -172,6 +157,7 @@ struct rxrpc_peer *rxrpc_get_peer(struct sockaddr_rxrpc *srx, gfp_t gfp) | |||
| 172 | /* we can now add the new candidate to the list */ | 157 | /* we can now add the new candidate to the list */ |
| 173 | peer = candidate; | 158 | peer = candidate; |
| 174 | candidate = NULL; | 159 | candidate = NULL; |
| 160 | usage = atomic_read(&peer->usage); | ||
| 175 | 161 | ||
| 176 | list_add_tail(&peer->link, &rxrpc_peers); | 162 | list_add_tail(&peer->link, &rxrpc_peers); |
| 177 | write_unlock_bh(&rxrpc_peer_lock); | 163 | write_unlock_bh(&rxrpc_peer_lock); |
| @@ -186,7 +172,7 @@ success: | |||
| 186 | &peer->srx.transport.sin.sin_addr, | 172 | &peer->srx.transport.sin.sin_addr, |
| 187 | ntohs(peer->srx.transport.sin.sin_port)); | 173 | ntohs(peer->srx.transport.sin.sin_port)); |
| 188 | 174 | ||
| 189 | _leave(" = %p {u=%d}", peer, atomic_read(&peer->usage)); | 175 | _leave(" = %p {u=%d}", peer, usage); |
| 190 | return peer; | 176 | return peer; |
| 191 | 177 | ||
| 192 | /* we found the peer in the list immediately */ | 178 | /* we found the peer in the list immediately */ |
diff --git a/net/rxrpc/ar-transport.c b/net/rxrpc/ar-transport.c index 5e0226fe587e..92df566930b9 100644 --- a/net/rxrpc/ar-transport.c +++ b/net/rxrpc/ar-transport.c | |||
| @@ -111,6 +111,7 @@ struct rxrpc_transport *rxrpc_get_transport(struct rxrpc_local *local, | |||
| 111 | /* we can now add the new candidate to the list */ | 111 | /* we can now add the new candidate to the list */ |
| 112 | trans = candidate; | 112 | trans = candidate; |
| 113 | candidate = NULL; | 113 | candidate = NULL; |
| 114 | usage = atomic_read(&trans->usage); | ||
| 114 | 115 | ||
| 115 | rxrpc_get_local(trans->local); | 116 | rxrpc_get_local(trans->local); |
| 116 | atomic_inc(&trans->peer->usage); | 117 | atomic_inc(&trans->peer->usage); |
| @@ -125,7 +126,7 @@ success: | |||
| 125 | trans->local->debug_id, | 126 | trans->local->debug_id, |
| 126 | trans->peer->debug_id); | 127 | trans->peer->debug_id); |
| 127 | 128 | ||
| 128 | _leave(" = %p {u=%d}", trans, atomic_read(&trans->usage)); | 129 | _leave(" = %p {u=%d}", trans, usage); |
| 129 | return trans; | 130 | return trans; |
| 130 | 131 | ||
| 131 | /* we found the transport in the list immediately */ | 132 | /* we found the transport in the list immediately */ |
