SUNRPC: Add a flag to avoid reference counts on credentials
Add a flag to signal to the RPC layer that the credential is already pinned for the duration of the RPC call. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
1d179d6bd6
commit
7eac52648a
|
@ -132,6 +132,7 @@ struct rpc_task_setup {
|
|||
#define RPC_TASK_TIMEOUT 0x1000 /* fail with ETIMEDOUT on timeout */
|
||||
#define RPC_TASK_NOCONNECT 0x2000 /* return ENOTCONN if not connected */
|
||||
#define RPC_TASK_NO_RETRANS_TIMEOUT 0x4000 /* wait forever for a reply */
|
||||
#define RPC_TASK_CRED_NOREF 0x8000 /* No refcount on the credential */
|
||||
|
||||
#define RPC_IS_ASYNC(t) ((t)->tk_flags & RPC_TASK_ASYNC)
|
||||
#define RPC_IS_SWAPPER(t) ((t)->tk_flags & RPC_TASK_SWAPPER)
|
||||
|
|
|
@ -1099,8 +1099,9 @@ rpc_task_set_rpc_message(struct rpc_task *task, const struct rpc_message *msg)
|
|||
task->tk_msg.rpc_proc = msg->rpc_proc;
|
||||
task->tk_msg.rpc_argp = msg->rpc_argp;
|
||||
task->tk_msg.rpc_resp = msg->rpc_resp;
|
||||
if (msg->rpc_cred != NULL)
|
||||
task->tk_msg.rpc_cred = get_cred(msg->rpc_cred);
|
||||
task->tk_msg.rpc_cred = msg->rpc_cred;
|
||||
if (!(task->tk_flags & RPC_TASK_CRED_NOREF))
|
||||
get_cred(task->tk_msg.rpc_cred);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1162,7 +1162,8 @@ static void rpc_release_resources_task(struct rpc_task *task)
|
|||
{
|
||||
xprt_release(task);
|
||||
if (task->tk_msg.rpc_cred) {
|
||||
put_cred(task->tk_msg.rpc_cred);
|
||||
if (!(task->tk_flags & RPC_TASK_CRED_NOREF))
|
||||
put_cred(task->tk_msg.rpc_cred);
|
||||
task->tk_msg.rpc_cred = NULL;
|
||||
}
|
||||
rpc_task_release_client(task);
|
||||
|
|
Loading…
Reference in New Issue