From owner-svn-soc-all@freebsd.org Thu Nov 9 16:03:24 2017 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E205EE5493F for ; Thu, 9 Nov 2017 16:03:23 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BD8DB6CEDB for ; Thu, 9 Nov 2017 16:03:19 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id vA9G3JLp040803 for ; Thu, 9 Nov 2017 16:03:19 GMT (envelope-from allanjude@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id vA9G3IaA040756 for svn-soc-all@FreeBSD.org; Thu, 9 Nov 2017 16:03:18 GMT (envelope-from allanjude@FreeBSD.org) Date: Thu, 9 Nov 2017 16:03:18 GMT Message-Id: <201711091603.vA9G3IaA040756@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to allanjude@FreeBSD.org using -f From: allanjude@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r329240 - soc2017/kneitinger/libbe-head/lib/libbe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Nov 2017 16:03:24 -0000 Author: allanjude Date: Thu Nov 9 16:03:18 2017 New Revision: 329240 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=329240 Log: Make be_create() and be_create_from_existing() just wrappers around be_create_from_existing_snap() Modified: soc2017/kneitinger/libbe-head/lib/libbe/be.c Modified: soc2017/kneitinger/libbe-head/lib/libbe/be.c ============================================================================== --- soc2017/kneitinger/libbe-head/lib/libbe/be.c Thu Nov 9 15:43:15 2017 (r329239) +++ soc2017/kneitinger/libbe-head/lib/libbe/be.c Thu Nov 9 16:03:18 2017 (r329240) @@ -231,79 +231,15 @@ } -// TODO: should be rewritten to just call be_create_from_existing() with -// the current bootenv! - /* * Create the boot environment specified by the name parameter */ int be_create(libbe_handle_t *lbh, char *name) { - int err, pos; - char be_path[BE_MAXPATHLEN]; - char snap_name[BE_MAXPATHLEN]; - time_t rawtime; - zfs_handle_t *snap_hdl; - nvlist_t *props; - - if (be_validate_name(lbh, name)) { - return (set_error(lbh, BE_ERR_INVALIDNAME)); - } - - if (err = be_root_concat(lbh, name, be_path)) { - return (set_error(lbh, err)); - } - - if (zfs_dataset_exists(lbh->lzh, be_path, ZFS_TYPE_DATASET)) { - err = set_error(lbh, BE_ERR_EXISTS); - return (err); - } - - - time(&rawtime); - // TODO: strcat! - pos = snprintf(snap_name, BE_MAXPATHLEN, "%s", be_active_path(lbh)); - strftime(snap_name + pos, BE_MAXPATHLEN - pos, - "@%F-%T", localtime(&rawtime)); - - if (err = zfs_snapshot(lbh->lzh, snap_name, false, NULL)) { - switch (err) { - case EZFS_SUCCESS: - break; - case EZFS_INVALIDNAME: - return (set_error(lbh, BE_ERR_INVALIDNAME)); - - default: - // TODO: elaborate return codes - return (set_error(lbh, BE_ERR_UNKNOWN)); - } - } - - if ((snap_hdl = zfs_open(lbh->lzh, snap_name, ZFS_TYPE_SNAPSHOT)) - == NULL) { - return (set_error(lbh, BE_ERR_ZFSOPEN)); - } - - nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP); - nvlist_add_string(props, "canmount", "noauto"); - nvlist_add_string(props, "mountpoint", "/"); - - - if (err = zfs_clone(snap_hdl, be_path, NULL)) { - switch (err) { - case EZFS_SUCCESS: - err = BE_ERR_SUCCESS; - break; - default: - err = BE_ERR_ZFSCLONE; - break; - } - } - - nvlist_free(props); + int err; - zfs_close(snap_hdl); + err = be_create_from_existing(lbh, name, (char *)be_active_path(lbh)); return (set_error(lbh, err)); } @@ -369,7 +305,7 @@ /* - * Create a copy of an existing boot environment + * Create a boot environment from an existing boot environment */ int be_create_from_existing(libbe_handle_t *lbh, char *name, char *old) @@ -377,24 +313,13 @@ int err; char buf[BE_MAXPATHLEN]; - - long int snap_num = random(); - - be_root_concat(lbh, old, buf); - snprintf(buf + strlen(buf), BE_MAXPATHLEN, "@%ld", snap_num); - - if (err = zfs_snapshot(lbh->lzh, buf, true, NULL)) { - // TODO correct error - return (-1); + if ((err = be_snapshot_recursive(lbh, old, NULL, true, (char *)&buf))) { + return (set_error(lbh, err)); } - snprintf(buf, BE_MAXPATHLEN, "%s@%ld", old, snap_num); - - err = be_create_from_existing_snap(lbh, name, buf); + err = be_create_from_existing_snap(lbh, name, (char *)buf); - // TODO: delete snap - - return (err); + return (set_error(lbh, err)); }