From: Ricardo Labiaga <ricardo.labiaga@xxxxxxxxxx> Frees the preallocated backchannel resources that are associated with this session when the session is destroyed. A backchannel is currently created once per session. Destroy the backchannel only when the session is destroyed. Signed-off-by: Ricardo Labiaga <ricardo.labiaga@xxxxxxxxxx> Signed-off-by: Andy Adamson<andros@xxxxxxxxxx> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> --- fs/nfs/nfs4proc.c | 6 ++++++ fs/nfs/super.c | 1 - 2 files changed, 6 insertions(+), 1 deletions(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index f6a9894..b57ff19 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -57,6 +57,7 @@ #if defined(CONFIG_NFS_V4_1) #include "callback.h" #include <linux/nfs41_session_recovery.h> +#include <linux/sunrpc/bc_xprt.h> #endif /* CONFIG_NFS_V4_1 */ #define NFSDBG_FACILITY NFSDBG_PROC @@ -4588,6 +4589,11 @@ void nfs4_put_session(struct nfs4_session **session) { dprintk("--> nfs4_put_session()\n"); if (atomic_dec_and_test(&((*session)->ref_count))) { + nfs4_proc_destroy_session(*session); + dprintk("%s Destroy backchannel for xprt%p\n", + __func__, (*session)->clnt->cl_xprt); + xprt_destroy_backchannel((*session)->clnt->cl_xprt, + NFS41_BC_MIN_CALLBACKS); nfs4_destroy_slot_table(&((*session)->fore_channel)); nfs4_free_session(*session); *session = NULL; diff --git a/fs/nfs/super.c b/fs/nfs/super.c index d7f99f8..e005889 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -2434,7 +2434,6 @@ static void nfs4_kill_super(struct super_block *sb) dprintk("--> %s\n", __func__); nfs_return_all_delegations(sb); kill_anon_super(sb); - nfs4_renewd_prepare_shutdown(server); nfs_free_server(server); dprintk("<-- %s\n", __func__); -- 1.6.0.2 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html