2451 beadm umount should report if there is nothing to unmount
2450 beadm umount should support mountpoint name
Reviewed by: Dan Kruchinin <
[email protected]>
Reviewed by: Michael Schuster <
[email protected]>
Reviewed by: Gary Mills <
[email protected]>
Approved by: Gordon Ross <
[email protected]>
--- a/usr/src/cmd/beadm/beadm.c Fri Apr 06 18:41:42 2012 -0500
+++ b/usr/src/cmd/beadm/beadm.c Mon Apr 09 13:29:54 2012 +0400
@@ -133,8 +133,8 @@
"\tbeadm destroy [-F] beName@snapshot \n"
"\tbeadm list [[-a] | [-d] [-s]] [-H] [beName]\n"
"\tbeadm mount [-s ro|rw] beName [mountpoint]\n"
- "\tbeadm unmount [-f] beName\n"
- "\tbeadm umount [-f] beName\n"
+ "\tbeadm unmount [-f] beName | mountpoint\n"
+ "\tbeadm umount [-f] beName | mountpoint\n"
"\tbeadm rename origBeName newBeName\n"
"\tbeadm rollback beName snapshot\n"
"\tbeadm rollback beName@snapshot\n"));
--- a/usr/src/lib/libbe/common/be_mount.c Fri Apr 06 18:41:42 2012 -0500
+++ b/usr/src/lib/libbe/common/be_mount.c Mon Apr 09 13:29:54 2012 +0400
@@ -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 @@
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 @@
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 @@
}
ZFS_CLOSE(zhp);
- return (BE_SUCCESS);
+ return (BE_ERR_NOTMOUNTED);
}
/*
--- a/usr/src/man/man1m/beadm.1m Fri Apr 06 18:41:42 2012 -0500
+++ b/usr/src/man/man1m/beadm.1m Mon Apr 09 13:29:54 2012 +0400
@@ -1,5 +1,5 @@
'\" te
-.\" Copyright 2011 Nexenta Systems, Inc. All rights reserved.
+.\" Copyright 2012 Nexenta Systems, Inc. All rights reserved.
.TH BEADM 1M "Feb 26, 2011"
.SH NAME
beadm \- utility for managing zfs boot environments
@@ -33,7 +33,7 @@
.LP
.nf
-\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR
+\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR | \fImountpoint\fR
.fi
.LP
@@ -374,11 +374,12 @@
.sp
.ne 2
.na
-\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR
+\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR | \fImountpoint\fR
.ad
.sp .6
.RS 4n
-Unmounts the boot environment named beName.
+Unmounts the boot environment named beName. The command can also be given a path to a
+beName mount point on the system.
.sp
.ne 2
.na