diff options
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 60 |
1 files changed, 42 insertions, 18 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index ddfc8b4d27a..26d9a5234dc 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -1418,39 +1418,64 @@ out: return ret; } -int -glusterfs_umount (char *vmp) -{ +inline int +_libgf_umount (char *vmp) +{ struct vmp_entry *entry= NULL; - int ret = -1; - char *vmp_resolved = NULL; - - GF_VALIDATE_OR_GOTO (LIBGF_XL_NAME, vmp, out); - - vmp_resolved = libgf_resolve_path_light (vmp); - if (!vmp_resolved) - goto out; + int ret = -1; - entry = libgf_vmp_search_entry (vmp_resolved); + entry = _libgf_vmp_search_entry (vmp); if (entry == NULL) { gf_log ("libglusterfsclient", GF_LOG_ERROR, - "path (%s) not mounted", vmp_resolved); + "path (%s) not mounted", vmp); goto out; } - /* FIXME: make this thread safe */ - list_del_init (&entry->list); - if (entry->handle == NULL) { gf_log ("libglusterfsclient", GF_LOG_ERROR, "path (%s) has no corresponding glusterfs handle", - vmp_resolved); + vmp); goto out; } ret = glusterfs_fini (entry->handle); libgf_free_vmp_entry (entry); + list_del_init (&entry->list); + vmplist.entries--; + +out: + return ret; +} + +inline int +libgf_umount (char *vmp) +{ + int ret = -1; + + pthread_mutex_lock (&lock); + { + ret = _libgf_umount (vmp); + } + pthread_mutex_unlock (&lock); + + return ret; +} + +int +glusterfs_umount (char *vmp) +{ + int ret = -1; + char *vmp_resolved = NULL; + + GF_VALIDATE_OR_GOTO (LIBGF_XL_NAME, vmp, out); + + vmp_resolved = libgf_resolve_path_light (vmp); + if (!vmp_resolved) + goto out; + + ret = libgf_umount (vmp_resolved); + out: if (vmp_resolved) FREE (vmp_resolved); @@ -1464,7 +1489,6 @@ glusterfs_reset (void) first_fini = first_init = 1; } - void glusterfs_log_lock (void) { |