• David Howells's avatar
    rxrpc: Provide functions for allowing cleaner handling of signals · f4d15fb6
    David Howells authored
    Provide a couple of functions to allow cleaner handling of signals in a
    kernel service.  They are:
    
     (1) rxrpc_kernel_get_rtt()
    
         This allows the kernel service to find out the RTT time for a call, so
         as to better judge how large a timeout to employ.
    
         Note, though, that whilst this returns a value in nanoseconds, the
         timeouts can only actually be in jiffies.
    
     (2) rxrpc_kernel_check_life()
    
         This returns a number that is updated when ACKs are received from the
         peer (notably including PING RESPONSE ACKs which we can elicit by
         sending PING ACKs to see if the call still exists on the server).
    
         The caller should compare the numbers of two calls to see if the call
         is still alive.
    
    These can be used to provide an extending timeout rather than returning
    immediately in the case that a signal occurs that would otherwise abort an
    RPC operation.  The timeout would be extended if the server is still
    responsive and the call is still apparently alive on the server.
    
    For most operations this isn't that necessary - but for FS.StoreData it is:
    OpenAFS writes the data to storage as it comes in without making a backup,
    so if we immediately abort it when partially complete on a CTRL+C, say, we
    have no idea of the state of the file after the abort.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    f4d15fb6
af_rxrpc.c 24.8 KB