From cb54018555ea5d10693fd7b72a56a37965ea3b07 Mon Sep 17 00:00:00 2001 From: Olga Kornievskaia Date: Mon, 23 May 2011 16:35:38 -0400 Subject: [PATCH] asking for persistent session from a server --- daemon/nfs41_const.h | 2 ++ daemon/nfs41_ops.c | 12 +++++++++++- daemon/nfs41_session.c | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/daemon/nfs41_const.h b/daemon/nfs41_const.h index 43ba70e..0d18974 100644 --- a/daemon/nfs41_const.h +++ b/daemon/nfs41_const.h @@ -305,7 +305,9 @@ enum nfs_ftype4 { NFS_FTYPE_MASK = 0xF }; +#define CREATE_SESSION4_FLAG_PERSIST 0x00000001 #define CREATE_SESSION4_FLAG_CONN_BACK_CHAN 0x00000002 +#define CREATE_SESSION4_FLAG_CONN_RDMA 0x00000004 /* ACLS aclsupport attribute values */ #define ACL4_SUPPORT_ALLOW_ACL 0x00000001 diff --git a/daemon/nfs41_ops.c b/daemon/nfs41_ops.c index a83e4de..94bab01 100644 --- a/daemon/nfs41_ops.c +++ b/daemon/nfs41_ops.c @@ -149,9 +149,19 @@ int nfs41_create_session(nfs41_client *clnt, nfs41_session *session, bool_t try_ goto out; } else clnt->seq_id++; - if (reply.csr_flags != req.csa_flags) + if (reply.csr_flags != req.csa_flags) { eprintf("WARNING: requested session flags %x received %x\n", req.csa_flags, reply.csr_flags); + if ((session->flags & CREATE_SESSION4_FLAG_CONN_BACK_CHAN) && + !(reply.csr_flags & CREATE_SESSION4_FLAG_CONN_BACK_CHAN)) + eprintf("WARNING: we asked to use this session for callbacks but " + "server refused\n"); + if ((session->flags & CREATE_SESSION4_FLAG_PERSIST) && + !(reply.csr_flags & CREATE_SESSION4_FLAG_PERSIST)) + eprintf("WARNING: we asked for persistent session but " + "server refused\n"); + session->flags = reply.csr_flags; + } else dprintf(1, "session flags %x\n", reply.csr_flags); diff --git a/daemon/nfs41_session.c b/daemon/nfs41_session.c index 2ceef20..aa63ee9 100644 --- a/daemon/nfs41_session.c +++ b/daemon/nfs41_session.c @@ -291,6 +291,7 @@ int nfs41_session_create( EXCHGID4_FLAG_USE_NON_PNFS)) #endif session->flags |= CREATE_SESSION4_FLAG_CONN_BACK_CHAN; + session->flags |= CREATE_SESSION4_FLAG_PERSIST; ReleaseSRWLockShared(&client->exid_lock); status = nfs41_create_session(client, session, TRUE);