summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2017-02-15 09:57:34 +0100
committerNiels de Vos <ndevos@redhat.com>2017-02-16 07:03:48 -0500
commitc0de166648ddfea03505e69bade06556a4f9ad65 (patch)
tree6f412bef49aa79657c46ccc3bb430fda2528c341 /xlators
parent6c707f442a74002356187bbd1c719b0f80dfebad (diff)
gNFS: Keep the mountdict as long as the service is active
We initialize and take ref once on mountdict during NFS/MNT3 server initialization but seem to be unref'in it for every UMNTALL request. This can lead to crash when there are multiple UMNTALL requests with >=1 active mount entry(/ies) in the mountlist. Since we take the ref only once, we should keep the mountdict through out the life of the process and dereference it only during unitialization of mnt3 service. Cherry picked from commit a88ae92de190af0956013780939ba6bdfd509ff8: > Change-Id: I3238a8df09b8972e56dd93fee426d866d40d9959 > BUG: 1421759 > Signed-off-by: Soumya Koduri <skoduri@redhat.com> > Reviewed-on: https://review.gluster.org/16611 > Smoke: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com> > NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> > Reviewed-by: Niels de Vos <ndevos@redhat.com> Change-Id: I3238a8df09b8972e56dd93fee426d866d40d9959 BUG: 1422394 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: https://review.gluster.org/16627 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: soumya k <skoduri@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/nfs/server/src/mount3.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/xlators/nfs/server/src/mount3.c b/xlators/nfs/server/src/mount3.c
index 48b719d29aa..b7350385c32 100644
--- a/xlators/nfs/server/src/mount3.c
+++ b/xlators/nfs/server/src/mount3.c
@@ -2544,8 +2544,6 @@ __mnt3svc_umountall (struct mount3_state *ms)
GF_FREE (me);
}
- dict_unref (ms->mountdict);
-
return 0;
}
@@ -3939,7 +3937,13 @@ mnt3svc_deinit (xlator_t *nfsx)
mnt3_auth_params_deinit (mstate->auth_params);
/* Unmount everything and clear mountdict */
- mnt3svc_umountall (mstate);
+ LOCK (&mstate->mountlock);
+ {
+ __mnt3svc_umountall (mstate);
+ dict_unref (mstate->mountdict);
+ }
+ UNLOCK (&mstate->mountlock);
+
}
rpcsvc_program_t *