mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
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.
|
||||
* 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:
|
||||
|
Loading…
Reference in New Issue
Block a user