Fix the rxrpc call expiration timeouts and make them settable from userspace. By analogy with other rx implementations, there should be three timeouts: (1) "Normal timeout" This is set for all calls and is triggered if we haven't received any packets from the peer in a while. It is measured from the last time we received any packet on that call. This is not reset by any connection packets (such as CHALLENGE/RESPONSE packets). If a service operation takes a long time, the server should generate PING ACKs at a duration that's substantially less than the normal timeout so is to keep both sides alive. This is set at 1/6 of normal timeout. (2) "Idle timeout" This is set only for a service call and is triggered if we stop receiving the DATA packets that comprise the request data. It is measured from the last time we received a DATA packet. (3) "Hard timeout" This can be set for a call and specified the maximum lifetime of that call. It should not be specified by default. Some operations (such as volume transfer) take a long time. Allow userspace to set/change the timeouts on a call with sendmsg, using a control message: RXRPC_SET_CALL_TIMEOUTS The data to the message is a number of 32-bit words, not all of which need be given: u32 hard_timeout; /* sec from first packet */ u32 idle_timeout; /* msec from packet Rx */ u32 normal_timeout; /* msec from data Rx */ This can be set in combination with any other sendmsg() that affects a call.
Showing the changes to include/uapi/linux (1 of 11 files). Show all
Unified · Split
| @@ -59,6 +59,7 @@ enum rxrpc_cmsg_type { · 58 unmodified lines | |||
| 59 | RXRPC_EXCLUSIVE_CALL = 10, /* s-: Call should be on exclusive connection */ | 59 | RXRPC_EXCLUSIVE_CALL = 10, /* s-: Call should be on exclusive connection */ |
| 60 | RXRPC_UPGRADE_SERVICE = 11, /* s-: Request service upgrade for client call */ | 60 | RXRPC_UPGRADE_SERVICE = 11, /* s-: Request service upgrade for client call */ |
| 61 | RXRPC_TX_LENGTH = 12, /* s-: Total length of Tx data */ | 61 | RXRPC_TX_LENGTH = 12, /* s-: Total length of Tx data */ |
| 62 | RXRPC_SET_CALL_TIMEOUT = 13, /* s-: Set one or more call timeouts */ | ||
| 62 | RXRPC__SUPPORTED | 63 | RXRPC__SUPPORTED |
| 63 | }; | 64 | }; |
| 64 | 65 | ||