summaryrefslogtreecommitdiff
path: root/usr/src/lib/libbe
diff options
context:
space:
mode:
authorAlexander Eremin <a.eremin@nexenta.com>2012-04-09 13:29:54 +0400
committerAlexander Eremin <a.eremin@nexenta.com>2012-04-09 13:29:54 +0400
commit89d19e002086cf26431426fe713cfef456067882 (patch)
tree0eb279f60ae767fa4d4459a8a46c1398010cc84e /usr/src/lib/libbe
parent9dc42874cbf5b71e55522fc6ab014d911f8d174a (diff)
downloadillumos-joyent-89d19e002086cf26431426fe713cfef456067882.tar.gz
2451 beadm umount should report if there is nothing to unmount
2450 beadm umount should support mountpoint name Reviewed by: Dan Kruchinin <dkruchinin@acm.org> Reviewed by: Michael Schuster <michaelsprivate@gmail.com> Reviewed by: Gary Mills <gary_mills@fastmail.fm> Approved by: Gordon Ross <gwr@nexenta.com>
Diffstat (limited to 'usr/src/lib/libbe')
-rw-r--r--usr/src/lib/libbe/common/be_mount.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/usr/src/lib/libbe/common/be_mount.c b/usr/src/lib/libbe/common/be_mount.c
index bacb5d4ab4..6c631da67d 100644
--- a/usr/src/lib/libbe/common/be_mount.c
+++ b/usr/src/lib/libbe/common/be_mount.c
@@ -22,6 +22,9 @@
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
+/*
+ * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
+ */
/*
* System includes
@@ -167,6 +170,8 @@ int
be_unmount(nvlist_t *be_attrs)
{
char *be_name = NULL;
+ char *be_name_mnt = NULL;
+ char *ds = NULL;
uint16_t flags = 0;
int ret = BE_SUCCESS;
@@ -182,6 +187,20 @@ be_unmount(nvlist_t *be_attrs)
return (BE_ERR_INVAL);
}
+ /* Check if we have mountpoint argument instead of BE name */
+ if (be_name[0] == '/') {
+ if ((ds = be_get_ds_from_dir(be_name)) != NULL) {
+ if ((be_name_mnt = strrchr(ds, '/')) != NULL) {
+ free(be_name);
+ be_name = be_name_mnt + 1;
+ }
+ } else {
+ be_print_err(gettext("be_unmount: no datasets mounted "
+ "at '%s'\n"), be_name);
+ return (BE_ERR_INVAL);
+ }
+ }
+
/* Validate original BE name */
if (!be_valid_be_name(be_name)) {
be_print_err(gettext("be_unmount: invalid BE name %s\n"),
@@ -449,7 +468,7 @@ _be_unmount(char *be_name, int flags)
}
ZFS_CLOSE(zhp);
- return (BE_SUCCESS);
+ return (BE_ERR_NOTMOUNTED);
}
/*