Date: Thu, 25 Apr 2013 01:17:53 +0100 From: "Steven Hartland" <smh@freebsd.org> To: "Martin Matuska" <mm@FreeBSD.org>, <src-committers@freebsd.org>, <svn-src-all@freebsd.org>, <svn-src-head@freebsd.org> Subject: Re: svn commit: r249357 - head/cddl/contrib/opensolaris/lib/libzfs/common Message-ID: <CC65FE0CA4D94289B5AE9264C9F47D1C@multiplay.co.uk> References: <201304110749.r3B7nGxR071588@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I believe this needs a little tweak so you don't get issues with zfs send which makes use of holds to ensure snapshots being sent don't get deleted while processing. In essence it should honor the enoent_ok flag and not report such an error to stdout. @@ -4207,6 +4238,9 @@ if (nvlist_next_nvpair(ha.nvl, NULL) == NULL) { fnvlist_free(ha.nvl); ret = ENOENT; + if (enoent_ok) + return (ret); + (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot hold snapshot '%s@%s'"), zhp->zfs_name, snapname); ----- Original Message ----- From: "Martin Matuska" <mm@FreeBSD.org> To: <src-committers@freebsd.org>; <svn-src-all@freebsd.org>; <svn-src-head@freebsd.org> Sent: Thursday, April 11, 2013 8:49 AM Subject: svn commit: r249357 - head/cddl/contrib/opensolaris/lib/libzfs/common > Author: mm > Date: Thu Apr 11 07:49:16 2013 > New Revision: 249357 > URL: http://svnweb.freebsd.org/changeset/base/249357 > > Log: > Fix libzfs to report error instead of returning zero if trying to hold or > release a non-existing snapshot of a existing dataset. In recursive case > error is reported if no snapshots with the requested name have been found. > > Problem and proposed solution reported to illumos: > 3699 zfs hold or release of a non-existent snapshot does not output error > > MFC after: 8 days > > Modified: > head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c > > Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c > ============================================================================== > --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Thu Apr 11 07:40:30 2013 (r249356) > +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Thu Apr 11 07:49:16 2013 (r249357) > @@ -4203,6 +4203,17 @@ zfs_hold(zfs_handle_t *zhp, const char * > ha.tag = tag; > ha.recursive = recursive; > (void) zfs_hold_one(zfs_handle_dup(zhp), &ha); > + > + if (nvlist_next_nvpair(ha.nvl, NULL) == NULL) { > + fnvlist_free(ha.nvl); > + ret = ENOENT; > + (void) snprintf(errbuf, sizeof (errbuf), > + dgettext(TEXT_DOMAIN, "cannot hold snapshot '%s@%s'"), > + zhp->zfs_name, snapname); > + (void) zfs_standard_error(hdl, ret, errbuf); > + return (ret); > + } > + > ret = lzc_hold(ha.nvl, cleanup_fd, &errors); > fnvlist_free(ha.nvl); > > @@ -4304,12 +4315,25 @@ zfs_release(zfs_handle_t *zhp, const cha > nvlist_t *errors; > nvpair_t *elem; > libzfs_handle_t *hdl = zhp->zfs_hdl; > + char errbuf[1024]; > > ha.nvl = fnvlist_alloc(); > ha.snapname = snapname; > ha.tag = tag; > ha.recursive = recursive; > (void) zfs_release_one(zfs_handle_dup(zhp), &ha); > + > + if (nvlist_next_nvpair(ha.nvl, NULL) == NULL) { > + fnvlist_free(ha.nvl); > + ret = ENOENT; > + (void) snprintf(errbuf, sizeof (errbuf), > + dgettext(TEXT_DOMAIN, > + "cannot release hold from snapshot '%s@%s'"), > + zhp->zfs_name, snapname); > + (void) zfs_standard_error(hdl, ret, errbuf); > + return (ret); > + } > + > ret = lzc_release(ha.nvl, &errors); > fnvlist_free(ha.nvl); > > @@ -4318,8 +4342,6 @@ zfs_release(zfs_handle_t *zhp, const cha > > if (nvlist_next_nvpair(errors, NULL) == NULL) { > /* no hold-specific errors */ > - char errbuf[1024]; > - > (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, > "cannot release")); > switch (errno) { > @@ -4336,8 +4358,6 @@ zfs_release(zfs_handle_t *zhp, const cha > for (elem = nvlist_next_nvpair(errors, NULL); > elem != NULL; > elem = nvlist_next_nvpair(errors, elem)) { > - char errbuf[1024]; > - > (void) snprintf(errbuf, sizeof (errbuf), > dgettext(TEXT_DOMAIN, > "cannot release hold from snapshot '%s'"), >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CC65FE0CA4D94289B5AE9264C9F47D1C>