Skip to content

Commit 4de48af

Browse files
committed
rxrpc: Pass struct socket * to more rxrpc kernel interface functions
Pass struct socket * to more rxrpc kernel interface functions. They should be starting from this rather than the socket pointer in the rxrpc_call struct if they need to access the socket. I have left: rxrpc_kernel_is_data_last() rxrpc_kernel_get_abort_code() rxrpc_kernel_get_error_number() rxrpc_kernel_free_skb() rxrpc_kernel_data_consumed() unmodified as they're all about to be removed (and, in any case, don't touch the socket). Signed-off-by: David Howells <[email protected]>
1 parent ea82aae commit 4de48af

File tree

5 files changed

+44
-28
lines changed

5 files changed

+44
-28
lines changed

Documentation/networking/rxrpc.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -725,15 +725,18 @@ The kernel interface functions are as follows:
725725

726726
(*) End a client call.
727727

728-
void rxrpc_kernel_end_call(struct rxrpc_call *call);
728+
void rxrpc_kernel_end_call(struct socket *sock,
729+
struct rxrpc_call *call);
729730

730731
This is used to end a previously begun call. The user_call_ID is expunged
731732
from AF_RXRPC's knowledge and will not be seen again in association with
732733
the specified call.
733734

734735
(*) Send data through a call.
735736

736-
int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
737+
int rxrpc_kernel_send_data(struct socket *sock,
738+
struct rxrpc_call *call,
739+
struct msghdr *msg,
737740
size_t len);
738741

739742
This is used to supply either the request part of a client call or the
@@ -747,7 +750,9 @@ The kernel interface functions are as follows:
747750

748751
(*) Abort a call.
749752

750-
void rxrpc_kernel_abort_call(struct rxrpc_call *call, u32 abort_code);
753+
void rxrpc_kernel_abort_call(struct socket *sock,
754+
struct rxrpc_call *call,
755+
u32 abort_code);
751756

752757
This is used to abort a call if it's still in an abortable state. The
753758
abort code specified will be placed in the ABORT message sent.

fs/afs/rxrpc.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ static void afs_free_call(struct afs_call *call)
207207
static void afs_end_call_nofree(struct afs_call *call)
208208
{
209209
if (call->rxcall) {
210-
rxrpc_kernel_end_call(call->rxcall);
210+
rxrpc_kernel_end_call(afs_socket, call->rxcall);
211211
call->rxcall = NULL;
212212
}
213213
if (call->type->destructor)
@@ -325,8 +325,8 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg,
325325
* returns from sending the request */
326326
if (first + loop >= last)
327327
call->state = AFS_CALL_AWAIT_REPLY;
328-
ret = rxrpc_kernel_send_data(call->rxcall, msg,
329-
to - offset);
328+
ret = rxrpc_kernel_send_data(afs_socket, call->rxcall,
329+
msg, to - offset);
330330
kunmap(pages[loop]);
331331
if (ret < 0)
332332
break;
@@ -406,7 +406,8 @@ int afs_make_call(struct in_addr *addr, struct afs_call *call, gfp_t gfp,
406406
* request */
407407
if (!call->send_pages)
408408
call->state = AFS_CALL_AWAIT_REPLY;
409-
ret = rxrpc_kernel_send_data(rxcall, &msg, call->request_size);
409+
ret = rxrpc_kernel_send_data(afs_socket, rxcall,
410+
&msg, call->request_size);
410411
if (ret < 0)
411412
goto error_do_abort;
412413

@@ -421,7 +422,7 @@ int afs_make_call(struct in_addr *addr, struct afs_call *call, gfp_t gfp,
421422
return wait_mode->wait(call);
422423

423424
error_do_abort:
424-
rxrpc_kernel_abort_call(rxcall, RX_USER_ABORT);
425+
rxrpc_kernel_abort_call(afs_socket, rxcall, RX_USER_ABORT);
425426
while ((skb = skb_dequeue(&call->rx_queue)))
426427
afs_free_skb(skb);
427428
error_kill_call:
@@ -509,7 +510,8 @@ static void afs_deliver_to_call(struct afs_call *call)
509510
if (call->state != AFS_CALL_AWAIT_REPLY)
510511
abort_code = RXGEN_SS_UNMARSHAL;
511512
do_abort:
512-
rxrpc_kernel_abort_call(call->rxcall,
513+
rxrpc_kernel_abort_call(afs_socket,
514+
call->rxcall,
513515
abort_code);
514516
call->error = ret;
515517
call->state = AFS_CALL_ERROR;
@@ -605,7 +607,7 @@ static int afs_wait_for_call_to_complete(struct afs_call *call)
605607
/* kill the call */
606608
if (call->state < AFS_CALL_COMPLETE) {
607609
_debug("call incomplete");
608-
rxrpc_kernel_abort_call(call->rxcall, RX_CALL_DEAD);
610+
rxrpc_kernel_abort_call(afs_socket, call->rxcall, RX_CALL_DEAD);
609611
while ((skb = skb_dequeue(&call->rx_queue)))
610612
afs_free_skb(skb);
611613
}
@@ -823,14 +825,15 @@ void afs_send_empty_reply(struct afs_call *call)
823825
msg.msg_flags = 0;
824826

825827
call->state = AFS_CALL_AWAIT_ACK;
826-
switch (rxrpc_kernel_send_data(call->rxcall, &msg, 0)) {
828+
switch (rxrpc_kernel_send_data(afs_socket, call->rxcall, &msg, 0)) {
827829
case 0:
828830
_leave(" [replied]");
829831
return;
830832

831833
case -ENOMEM:
832834
_debug("oom");
833-
rxrpc_kernel_abort_call(call->rxcall, RX_USER_ABORT);
835+
rxrpc_kernel_abort_call(afs_socket, call->rxcall,
836+
RX_USER_ABORT);
834837
default:
835838
afs_end_call(call);
836839
_leave(" [error]");
@@ -859,7 +862,7 @@ void afs_send_simple_reply(struct afs_call *call, const void *buf, size_t len)
859862
msg.msg_flags = 0;
860863

861864
call->state = AFS_CALL_AWAIT_ACK;
862-
n = rxrpc_kernel_send_data(call->rxcall, &msg, len);
865+
n = rxrpc_kernel_send_data(afs_socket, call->rxcall, &msg, len);
863866
if (n >= 0) {
864867
/* Success */
865868
_leave(" [replied]");
@@ -868,7 +871,8 @@ void afs_send_simple_reply(struct afs_call *call, const void *buf, size_t len)
868871

869872
if (n == -ENOMEM) {
870873
_debug("oom");
871-
rxrpc_kernel_abort_call(call->rxcall, RX_USER_ABORT);
874+
rxrpc_kernel_abort_call(afs_socket, call->rxcall,
875+
RX_USER_ABORT);
872876
}
873877
afs_end_call(call);
874878
_leave(" [error]");

include/net/af_rxrpc.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
#include <linux/skbuff.h>
1616
#include <linux/rxrpc.h>
1717

18+
struct key;
19+
struct sock;
20+
struct socket;
1821
struct rxrpc_call;
1922

2023
/*
@@ -39,10 +42,11 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *,
3942
struct key *,
4043
unsigned long,
4144
gfp_t);
42-
int rxrpc_kernel_send_data(struct rxrpc_call *, struct msghdr *, size_t);
45+
int rxrpc_kernel_send_data(struct socket *, struct rxrpc_call *,
46+
struct msghdr *, size_t);
4347
void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *);
44-
void rxrpc_kernel_abort_call(struct rxrpc_call *, u32);
45-
void rxrpc_kernel_end_call(struct rxrpc_call *);
48+
void rxrpc_kernel_abort_call(struct socket *, struct rxrpc_call *, u32);
49+
void rxrpc_kernel_end_call(struct socket *, struct rxrpc_call *);
4650
bool rxrpc_kernel_is_data_last(struct sk_buff *);
4751
u32 rxrpc_kernel_get_abort_code(struct sk_buff *);
4852
int rxrpc_kernel_get_error_number(struct sk_buff *);

net/rxrpc/af_rxrpc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,16 @@ EXPORT_SYMBOL(rxrpc_kernel_begin_call);
279279

280280
/**
281281
* rxrpc_kernel_end_call - Allow a kernel service to end a call it was using
282+
* @sock: The socket the call is on
282283
* @call: The call to end
283284
*
284285
* Allow a kernel service to end a call it was using. The call must be
285286
* complete before this is called (the call should be aborted if necessary).
286287
*/
287-
void rxrpc_kernel_end_call(struct rxrpc_call *call)
288+
void rxrpc_kernel_end_call(struct socket *sock, struct rxrpc_call *call)
288289
{
289290
_enter("%d{%d}", call->debug_id, atomic_read(&call->usage));
290-
rxrpc_remove_user_ID(call->socket, call);
291+
rxrpc_remove_user_ID(rxrpc_sk(sock->sk), call);
291292
rxrpc_put_call(call);
292293
}
293294
EXPORT_SYMBOL(rxrpc_kernel_end_call);

net/rxrpc/output.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len)
239239

240240
/**
241241
* rxrpc_kernel_send_data - Allow a kernel service to send data on a call
242+
* @sock: The socket the call is on
242243
* @call: The call to send data through
243244
* @msg: The data to send
244245
* @len: The amount of data to send
@@ -248,8 +249,8 @@ int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len)
248249
* nor should an address be supplied. MSG_MORE should be flagged if there's
249250
* more data to come, otherwise this data will end the transmission phase.
250251
*/
251-
int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
252-
size_t len)
252+
int rxrpc_kernel_send_data(struct socket *sock, struct rxrpc_call *call,
253+
struct msghdr *msg, size_t len)
253254
{
254255
int ret;
255256

@@ -258,7 +259,7 @@ int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
258259
ASSERTCMP(msg->msg_name, ==, NULL);
259260
ASSERTCMP(msg->msg_control, ==, NULL);
260261

261-
lock_sock(&call->socket->sk);
262+
lock_sock(sock->sk);
262263

263264
_debug("CALL %d USR %lx ST %d on CONN %p",
264265
call->debug_id, call->user_call_ID, call->state, call->conn);
@@ -270,35 +271,36 @@ int rxrpc_kernel_send_data(struct rxrpc_call *call, struct msghdr *msg,
270271
call->state != RXRPC_CALL_SERVER_SEND_REPLY) {
271272
ret = -EPROTO; /* request phase complete for this client call */
272273
} else {
273-
ret = rxrpc_send_data(call->socket, call, msg, len);
274+
ret = rxrpc_send_data(rxrpc_sk(sock->sk), call, msg, len);
274275
}
275276

276-
release_sock(&call->socket->sk);
277+
release_sock(sock->sk);
277278
_leave(" = %d", ret);
278279
return ret;
279280
}
280-
281281
EXPORT_SYMBOL(rxrpc_kernel_send_data);
282282

283283
/**
284284
* rxrpc_kernel_abort_call - Allow a kernel service to abort a call
285+
* @sock: The socket the call is on
285286
* @call: The call to be aborted
286287
* @abort_code: The abort code to stick into the ABORT packet
287288
*
288289
* Allow a kernel service to abort a call, if it's still in an abortable state.
289290
*/
290-
void rxrpc_kernel_abort_call(struct rxrpc_call *call, u32 abort_code)
291+
void rxrpc_kernel_abort_call(struct socket *sock, struct rxrpc_call *call,
292+
u32 abort_code)
291293
{
292294
_enter("{%d},%d", call->debug_id, abort_code);
293295

294-
lock_sock(&call->socket->sk);
296+
lock_sock(sock->sk);
295297

296298
_debug("CALL %d USR %lx ST %d on CONN %p",
297299
call->debug_id, call->user_call_ID, call->state, call->conn);
298300

299301
rxrpc_send_abort(call, abort_code);
300302

301-
release_sock(&call->socket->sk);
303+
release_sock(sock->sk);
302304
_leave("");
303305
}
304306

0 commit comments

Comments
 (0)