rxrpc: Don't change the epoch
authorDavid Howells <dhowells@redhat.com>
Sun, 4 Sep 2016 12:14:46 +0000 (13:14 +0100)
committerDavid Howells <dhowells@redhat.com>
Sun, 4 Sep 2016 20:41:39 +0000 (21:41 +0100)
It seems the local epoch should only be changed on boot, so remove the code
that changes it for client connections.

Signed-off-by: David Howells <dhowells@redhat.com>
net/rxrpc/conn_client.c

index e19804dd6c8dedfe28835d5e856c35d3bd136456..82de1aeaef214b145594dc1c453e47eb14802f4b 100644 (file)
@@ -108,12 +108,12 @@ static DECLARE_DELAYED_WORK(rxrpc_client_conn_reap,
 /*
  * Get a connection ID and epoch for a client connection from the global pool.
  * The connection struct pointer is then recorded in the idr radix tree.  The
- * epoch is changed if this wraps.
+ * epoch doesn't change until the client is rebooted (or, at least, unless the
+ * module is unloaded).
  */
 static int rxrpc_get_client_connection_id(struct rxrpc_connection *conn,
                                          gfp_t gfp)
 {
-       u32 epoch;
        int id;
 
        _enter("");
@@ -121,34 +121,18 @@ static int rxrpc_get_client_connection_id(struct rxrpc_connection *conn,
        idr_preload(gfp);
        spin_lock(&rxrpc_conn_id_lock);
 
-       epoch = rxrpc_epoch;
-
-       /* We could use idr_alloc_cyclic() here, but we really need to know
-        * when the thing wraps so that we can advance the epoch.
-        */
-       if (rxrpc_client_conn_ids.cur == 0)
-               rxrpc_client_conn_ids.cur = 1;
-       id = idr_alloc(&rxrpc_client_conn_ids, conn,
-                      rxrpc_client_conn_ids.cur, 0x40000000, GFP_NOWAIT);
-       if (id < 0) {
-               if (id != -ENOSPC)
-                       goto error;
-               id = idr_alloc(&rxrpc_client_conn_ids, conn,
-                              1, 0x40000000, GFP_NOWAIT);
-               if (id < 0)
-                       goto error;
-               epoch++;
-               rxrpc_epoch = epoch;
-       }
-       rxrpc_client_conn_ids.cur = id + 1;
+       id = idr_alloc_cyclic(&rxrpc_client_conn_ids, conn,
+                             1, 0x40000000, GFP_NOWAIT);
+       if (id < 0)
+               goto error;
 
        spin_unlock(&rxrpc_conn_id_lock);
        idr_preload_end();
 
-       conn->proto.epoch = epoch;
+       conn->proto.epoch = rxrpc_epoch;
        conn->proto.cid = id << RXRPC_CIDSHIFT;
        set_bit(RXRPC_CONN_HAS_IDR, &conn->flags);
-       _leave(" [CID %x:%x]", epoch, conn->proto.cid);
+       _leave(" [CID %x]", conn->proto.cid);
        return 0;
 
 error: