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: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
5f2d9c4438
commit
090f85deb6
@ -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,
|
|||||||
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,
|
||||||
|
|
||||||
/* 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);
|
1, 0x40000000, GFP_NOWAIT);
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
goto error;
|
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:
|
||||||
|
Loading…
Reference in New Issue
Block a user