Author: avg
Date: Fri Sep 22 08:15:35 2017
New Revision: 323912
URL: https://svnweb.freebsd.org/changeset/base/323912

Log:
  8592 ZFS channel programs - rollback
  
  illumos/illumos-gate@000cce6b6fad4a8b0eecef6e1251f6aca1719c55
  
https://github.com/illumos/illumos-gate/commit/000cce6b6fad4a8b0eecef6e1251f6aca1719c55
  
  https://www.illumos.org/issues/8592
    ZFS channel programs should be able to perform a rollback. This logic will
    probably look pretty similar to zfs.sync.destroy().
  
  Reviewed by: Chris Williamson <chris.william...@delphix.com>
  Reviewed by: Matthew Ahrens <mahr...@delphix.com>
  Approved by: Robert Mustacchi <r...@joyent.com>
  Author: Brad Lewis <brad.le...@delphix.com>

Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h
  vendor-sys/illumos/dist/uts/common/fs/zfs/zcp_synctask.c

Changes in other areas also in this revision:
Modified:
  vendor/illumos/dist/man/man1m/zfs-program.1m

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c     Fri Sep 22 
08:13:09 2017        (r323911)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c     Fri Sep 22 
08:15:35 2017        (r323912)
@@ -21,7 +21,7 @@
 
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2016 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2017 by Delphix. All rights reserved.
  * Copyright (c) 2014, Joyent, Inc. All rights reserved.
  * Copyright (c) 2014 RackTop Systems.
  * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
@@ -2452,14 +2452,7 @@ dsl_dataset_handoff_check(dsl_dataset_t *ds, void *own
        return (0);
 }
 
-typedef struct dsl_dataset_rollback_arg {
-       const char *ddra_fsname;
-       const char *ddra_tosnap;
-       void *ddra_owner;
-       nvlist_t *ddra_result;
-} dsl_dataset_rollback_arg_t;
-
-static int
+int
 dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx)
 {
        dsl_dataset_rollback_arg_t *ddra = arg;
@@ -2567,7 +2560,7 @@ dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx)
        return (0);
 }
 
-static void
+void
 dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx)
 {
        dsl_dataset_rollback_arg_t *ddra = arg;

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h Fri Sep 22 
08:13:09 2017        (r323911)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h Fri Sep 22 
08:15:35 2017        (r323912)
@@ -20,7 +20,7 @@
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011, 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2017 by Delphix. All rights reserved.
  * Copyright (c) 2013, Joyent, Inc. All rights reserved.
  * Copyright (c) 2013 Steven Hartland. All rights reserved.
  * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
@@ -237,6 +237,13 @@ typedef struct dsl_dataset_promote_arg {
        cred_t *cr;
 } dsl_dataset_promote_arg_t;
 
+typedef struct dsl_dataset_rollback_arg {
+       const char *ddra_fsname;
+       const char *ddra_tosnap;
+       void *ddra_owner;
+       nvlist_t *ddra_result;
+} dsl_dataset_rollback_arg_t;
+
 /*
  * The max length of a temporary tag prefix is the number of hex digits
  * required to express UINT64_MAX plus one for the hyphen.
@@ -375,6 +382,9 @@ void dsl_dataset_set_refreservation_sync_impl(dsl_data
 void dsl_dataset_zapify(dsl_dataset_t *ds, dmu_tx_t *tx);
 boolean_t dsl_dataset_is_zapified(dsl_dataset_t *ds);
 boolean_t dsl_dataset_has_resume_receive_state(dsl_dataset_t *ds);
+
+int dsl_dataset_rollback_check(void *arg, dmu_tx_t *tx);
+void dsl_dataset_rollback_sync(void *arg, dmu_tx_t *tx);
 int dsl_dataset_rollback(const char *fsname, const char *tosnap, void *owner,
     nvlist_t *result);
 

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/zcp_synctask.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/zcp_synctask.c    Fri Sep 22 
08:13:09 2017        (r323911)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/zcp_synctask.c    Fri Sep 22 
08:15:35 2017        (r323912)
@@ -14,7 +14,7 @@
  */
 
 /*
- * Copyright (c) 2016 by Delphix. All rights reserved.
+ * Copyright (c) 2016, 2017 by Delphix. All rights reserved.
  */
 
 #include "lua.h"
@@ -177,6 +177,37 @@ zcp_synctask_promote(lua_State *state, boolean_t sync,
        return (err);
 }
 
+static int zcp_synctask_rollback(lua_State *, boolean_t, nvlist_t 
*err_details);
+static zcp_synctask_info_t zcp_synctask_rollback_info = {
+       .name = "rollback",
+       .func = zcp_synctask_rollback,
+       .space_check = ZFS_SPACE_CHECK_RESERVED,
+       .blocks_modified = 1,
+       .pargs = {
+           {.za_name = "filesystem", .za_lua_type = LUA_TSTRING},
+           {NULL, NULL}
+       },
+       .kwargs = {
+           {NULL, NULL}
+       }
+};
+
+static int
+zcp_synctask_rollback(lua_State *state, boolean_t sync, nvlist_t *err_details)
+{
+       int err;
+       const char *dsname = lua_tostring(state, 1);
+       dsl_dataset_rollback_arg_t ddra = { 0 };
+
+       ddra.ddra_fsname = dsname;
+       ddra.ddra_result = err_details;
+
+       err = zcp_sync_task(state, dsl_dataset_rollback_check,
+           dsl_dataset_rollback_sync, &ddra, sync, dsname);
+
+       return (err);
+}
+
 void
 zcp_synctask_wrapper_cleanup(void *arg)
 {
@@ -247,6 +278,7 @@ zcp_load_synctask_lib(lua_State *state, boolean_t sync
        zcp_synctask_info_t *zcp_synctask_funcs[] = {
                &zcp_synctask_destroy_info,
                &zcp_synctask_promote_info,
+               &zcp_synctask_rollback_info,
                NULL
        };
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to