diff options
author | Shehjar Tikoo <shehjart@gluster.com> | 2010-05-31 22:43:55 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-06-01 00:23:58 -0700 |
commit | 4f49c3d22599b4296e51da0d2684633904ec134e (patch) | |
tree | 3fbc013b4e33f6e7bf92844b3a8c2231e567f271 /xlators/nfs/server/src/mount3.c | |
parent | 91afbb094ce97fb8f8183227cd56410ad3746449 (diff) |
mount3: Handle unmount for unknown volume names
In case the nfs client sends an unmount request for a volume
that does not exist anymore.
Signed-off-by: Shehjar Tikoo <shehjart@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 961 (Unmount with invalid export crashes nfsx)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=961
Diffstat (limited to 'xlators/nfs/server/src/mount3.c')
-rw-r--r-- | xlators/nfs/server/src/mount3.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/xlators/nfs/server/src/mount3.c b/xlators/nfs/server/src/mount3.c index d0b46147c25..9b287cf907e 100644 --- a/xlators/nfs/server/src/mount3.c +++ b/xlators/nfs/server/src/mount3.c @@ -516,14 +516,26 @@ __mnt3svc_umount (struct mount3_state *ms, char *dirpath, char *hostname) if (list_empty (&ms->mountlist)) return 0; + if (dirpath[0] == '/') + exname = dirpath+1; + else + exname = dirpath; + list_for_each_entry (me, &ms->mountlist, mlist) { - if (dirpath[0] == '/') - exname = dirpath+1; - else - exname = dirpath; - if ((strcmp (me->exname, exname) == 0) && - (strcmp (me->hostname, hostname) == 0)) - break; + if ((strcmp (me->exname, exname) == 0) && + (strcmp (me->hostname, hostname) == 0)) { + ret = 0; + break; + } + } + + /* Need this check here because at the end of the search me might still + * be pointing to the last entry, which may not be the one we're + * looking for. + */ + if (ret == -1) {/* Not found in list. */ + gf_log (GF_MNT, GF_LOG_DEBUG, "Export not found"); + goto ret; } if (!me) |