Commit 090f85de authored by David Howells's avatar David Howells

rxrpc: Don't change the epoch

It seems the local epoch should only be changed on boot, so remove the code
that changes it for client connections.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent 5f2d9c44
...@@ -108,12 +108,12 @@ static DECLARE_DELAYED_WORK(rxrpc_client_conn_reap, ...@@ -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. * 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 * 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, static int rxrpc_get_client_connection_id(struct rxrpc_connection *conn,
gfp_t gfp) gfp_t gfp)
{ {
u32 epoch;
int id; int id;
_enter(""); _enter("");
...@@ -121,34 +121,18 @@ static int rxrpc_get_client_connection_id(struct rxrpc_connection *conn, ...@@ -121,34 +121,18 @@ static int rxrpc_get_client_connection_id(struct rxrpc_connection *conn,
idr_preload(gfp); idr_preload(gfp);
spin_lock(&rxrpc_conn_id_lock); spin_lock(&rxrpc_conn_id_lock);
epoch = rxrpc_epoch; id = idr_alloc_cyclic(&rxrpc_client_conn_ids, conn,
1, 0x40000000, GFP_NOWAIT);
/* We could use idr_alloc_cyclic() here, but we really need to know if (id < 0)
* when the thing wraps so that we can advance the epoch. goto error;
*/
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;
spin_unlock(&rxrpc_conn_id_lock); spin_unlock(&rxrpc_conn_id_lock);
idr_preload_end(); idr_preload_end();
conn->proto.epoch = epoch; conn->proto.epoch = rxrpc_epoch;
conn->proto.cid = id << RXRPC_CIDSHIFT; conn->proto.cid = id << RXRPC_CIDSHIFT;
set_bit(RXRPC_CONN_HAS_IDR, &conn->flags); set_bit(RXRPC_CONN_HAS_IDR, &conn->flags);
_leave(" [CID %x:%x]", epoch, conn->proto.cid); _leave(" [CID %x]", conn->proto.cid);
return 0; return 0;
error: error:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment