[PATCH 1/1] NFSv4.1: fix lone sequence transport assignment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When nconnect is used, SEQUENCE operation currently isn't bound to
a particular transport. The problem is created on an idle mount,
where SEQUENCE is the only operation being sent and opened TPC
connections are slowly being close from the lack of use. If SEQUENCE
is not assigned to the main connection, the main connection can
be closed and with that so is the back channel bound to that
connection.

Since the only way client handles callback_path down is by sending
BIND_CONN_TO_SESSION requesting to bind both backchannel and fore
channel on the connection that was left going, but that connection
was already bound to only forechannel. According to the spec, it's
not allowed to change channel binding after they are done.

The fix is to make sure that a lone SEQUENCE always goes on the
main connection, keeping backchannel alive.

Fixes: 5a0c257f8 ("NFS: send state management on a single connection")
Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx>
---
 fs/nfs/nfs4proc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 99e9f2e..461f85d 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -8857,7 +8857,7 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
 		.rpc_client = clp->cl_rpcclient,
 		.rpc_message = &msg,
 		.callback_ops = &nfs41_sequence_ops,
-		.flags = RPC_TASK_ASYNC | RPC_TASK_TIMEOUT,
+		.flags = RPC_TASK_ASYNC | RPC_TASK_TIMEOUT | RPC_TASK_NO_ROUND_ROBIN,
 	};
 	struct rpc_task *ret;
 
-- 
1.8.3.1




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux