Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140508178
D22306.id70433.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D22306.id70433.diff
View Options
Index: head/cddl/contrib/opensolaris/cmd/zfs/zfs.8
===================================================================
--- head/cddl/contrib/opensolaris/cmd/zfs/zfs.8
+++ head/cddl/contrib/opensolaris/cmd/zfs/zfs.8
@@ -32,7 +32,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 16, 2019
+.Dd February 16, 2020
.Dt ZFS 8
.Os
.Sh NAME
@@ -201,12 +201,12 @@
.Fl t Ar receive_resume_token
.Nm
.Cm receive Ns | Ns Cm recv
-.Op Fl vnsFu
+.Op Fl vnsFMu
.Op Fl o Sy origin Ns = Ns Ar snapshot
.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot
.Nm
.Cm receive Ns | Ns Cm recv
-.Op Fl vnsFu
+.Op Fl vnsFMu
.Op Fl d | e
.Op Fl o Sy origin Ns = Ns Ar snapshot
.Ar filesystem
@@ -2909,14 +2909,14 @@
.It Xo
.Nm
.Cm receive Ns | Ns Cm recv
-.Op Fl vnsFu
+.Op Fl vnsFMu
.Op Fl o Sy origin Ns = Ns Ar snapshot
.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot
.Xc
.It Xo
.Nm
.Cm receive Ns | Ns Cm recv
-.Op Fl vnsFu
+.Op Fl vnsFMu
.Op Fl d | e
.Op Fl o Sy origin Ns = Ns Ar snapshot
.Ar filesystem
@@ -3016,6 +3016,9 @@
stream (for example, one generated by
.Qq Nm Cm send Fl R Bro Fl i | Fl I Brc ) ,
destroy snapshots and file systems that do not exist on the sending side.
+.It Fl M
+Force an unmount of the file system while receiving a snapshot.
+This option is not supported on Linux.
.It Fl s
If the receive is interrupted, save the partially received state, rather
than deleting it. Interruption may be due to premature termination of
Index: head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
===================================================================
--- head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
+++ head/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
@@ -274,9 +274,9 @@
case HELP_PROMOTE:
return (gettext("\tpromote <clone-filesystem>\n"));
case HELP_RECEIVE:
- return (gettext("\treceive|recv [-vnsFu] <filesystem|volume|"
+ return (gettext("\treceive|recv [-vnsFMu] <filesystem|volume|"
"snapshot>\n"
- "\treceive|recv [-vnsFu] [-o origin=<snapshot>] [-d | -e] "
+ "\treceive|recv [-vnsFMu] [-o origin=<snapshot>] [-d | -e] "
"<filesystem>\n"
"\treceive|recv -A <filesystem|volume>\n"));
case HELP_RENAME:
@@ -4078,7 +4078,7 @@
nomem();
/* check options */
- while ((c = getopt(argc, argv, ":o:denuvFsA")) != -1) {
+ while ((c = getopt(argc, argv, ":o:denuvMFsA")) != -1) {
switch (c) {
case 'o':
if (parseprop(props, optarg) != 0)
@@ -4105,6 +4105,9 @@
break;
case 'F':
flags.force = B_TRUE;
+ break;
+ case 'M':
+ flags.forceunmount = B_TRUE;
break;
case 'A':
abort_resumable = B_TRUE;
Index: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
===================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
@@ -737,6 +737,9 @@
/* do not mount file systems as they are extracted (private) */
boolean_t nomount;
+
+ /* force unmount while recv snapshot (private) */
+ boolean_t forceunmount;
} recvflags_t;
extern int zfs_receive(libzfs_handle_t *, const char *, nvlist_t *,
Index: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
===================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
@@ -2913,7 +2913,8 @@
ZFS_TYPE_FILESYSTEM);
if (zhp != NULL) {
clp = changelist_gather(zhp,
- ZFS_PROP_MOUNTPOINT, 0, 0);
+ ZFS_PROP_MOUNTPOINT, 0,
+ flags->forceunmount ? MS_FORCE : 0);
zfs_close(zhp);
if (clp != NULL) {
softerr |=
@@ -3435,7 +3436,8 @@
if (!flags->dryrun && zhp->zfs_type == ZFS_TYPE_FILESYSTEM &&
stream_wantsnewfs) {
/* We can't do online recv in this case */
- clp = changelist_gather(zhp, ZFS_PROP_NAME, 0, 0);
+ clp = changelist_gather(zhp, ZFS_PROP_NAME, 0,
+ flags->forceunmount ? MS_FORCE : 0);
if (clp == NULL) {
zfs_close(zhp);
zcmd_free_nvlists(&zc);
@@ -3881,6 +3883,7 @@
int cleanup_fd;
uint64_t action_handle = 0;
char *originsnap = NULL;
+
if (props) {
err = nvlist_lookup_string(props, "origin", &originsnap);
if (err && err != ENOENT)
@@ -3902,7 +3905,8 @@
zhp = zfs_open(hdl, top_zfs, ZFS_TYPE_FILESYSTEM);
if (zhp != NULL) {
clp = changelist_gather(zhp, ZFS_PROP_MOUNTPOINT,
- CL_GATHER_MOUNT_ALWAYS, 0);
+ CL_GATHER_MOUNT_ALWAYS,
+ flags->forceunmount ? MS_FORCE : 0);
zfs_close(zhp);
if (clp != NULL) {
/* mount and share received datasets */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Dec 25, 6:27 PM (16 m, 44 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27256148
Default Alt Text
D22306.id70433.diff (4 KB)
Attached To
Mode
D22306: zfs: add option for forcible unmounting dataset while receiving snapshot.
Attached
Detach File
Event Timeline
Log In to Comment