24 Aug, 2016

33 commits


23 Aug, 2016

7 commits

  • Perform terminal call ACK/ABORT retransmission in the connection processor
    rather than in the call processor. With this change, once last_call is
    set, no more incoming packets will be routed to the corresponding call or
    any earlier calls on that channel (call IDs must only increase on a channel
    on a connection).

    Further, if a packet's callNumber is before the last_call ID or a packet is
    aimed at successfully completed service call then that packet is discarded
    and ignored.

    Signed-off-by: David Howells

    David Howells
     
  • Calculate the serial number skew in the data_ready handler when a packet
    has been received and a connection looked up. The skew is cached in the
    sk_buff's priority field.

    The connection highest received serial number is updated at this time also.
    This can be done without locks or atomic instructions because, at this
    point, the code is serialised by the socket.

    This generates more accurate skew data because if the packet is offloaded
    to a work queue before this is determined, more packets may come in,
    bumping the highest serial number and thereby increasing the apparent skew.

    This also removes some unnecessary atomic ops.

    Signed-off-by: David Howells

    David Howells
     
  • Set the connection expiry time when a connection becomes idle rather than
    doing this in rxrpc_put_connection(). This makes the put path more
    efficient (it is likely to be called occasionally whilst a connection has
    outstanding calls because active workqueue items needs to be given a ref).

    The time is also preset in the connection allocator in case the connection
    never gets used.

    Signed-off-by: David Howells

    David Howells
     
  • Use a tracepoint to log various skb accounting points to help in debugging
    refcounting errors.

    Signed-off-by: David Howells

    David Howells
     
  • Drop the channel number (channel) field from the rxrpc_call struct to
    reduce the size of the call struct. The field is redundant: if the call is
    attached to a connection, the channel can be obtained from there by AND'ing
    with RXRPC_CHANNELMASK.

    Signed-off-by: David Howells

    David Howells
     
  • When clearing a socket, we should clear the securing-in-progress list
    first, then the accept queue and last the main call tree because that's the
    order in which a call progresses. Not that a call should move from the
    accept queue to the main tree whilst we're shutting down a socket, but it a
    call could possibly move from sequreq to acceptq whilst we're clearing up.

    Signed-off-by: David Howells

    David Howells
     
  • Do a little tidying of the rxrpc_call struct:

    (1) in_clientflag is no longer compared against the value that's in the
    packet, so keeping it in this form isn't necessary. Use a flag in
    flags instead and provide a pair of wrapper functions.

    (2) We don't read the epoch value, so that can go.

    (3) Move what remains of the data that were used for hashing up in the
    struct to be with the channel number.

    (4) Get rid of the local pointer. We can get at this via the socket
    struct and we only use this in the procfs viewer.

    Signed-off-by: David Howells

    David Howells