From hag@linnaean.org  Sun Feb  5 17:11:12 2012
Return-Path: <hag@linnaean.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 1118E106564A
	for <FreeBSD-gnats-submit@freebsd.org>; Sun,  5 Feb 2012 17:11:12 +0000 (UTC)
	(envelope-from hag@linnaean.org)
Received: from perdition.linnaean.org (perdition.linnaean.org [IPv6:2001:470:8917:1::1])
	by mx1.freebsd.org (Postfix) with ESMTP id E0AD18FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Sun,  5 Feb 2012 17:11:11 +0000 (UTC)
Received: by perdition.linnaean.org (Postfix, from userid 31013)
	id 48AB61FA; Sun,  5 Feb 2012 12:11:11 -0500 (EST)
Message-Id: <20120205171111.48AB61FA@perdition.linnaean.org>
Date: Sun,  5 Feb 2012 12:11:11 -0500 (EST)
From: Daniel Hagerty <hag@linnaean.org>
Reply-To: Daniel Hagerty <hag@linnaean.org>
To: FreeBSD-gnats-submit@freebsd.org
Subject: Can't destroy zfs snapshots in 8-stable w/o -R
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         164802
>Category:       bin
>Synopsis:       Can't destroy zfs snapshots in 8-stable w/o -R
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    mm
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Feb 05 17:20:06 UTC 2012
>Closed-Date:    Fri Feb 10 13:46:38 UTC 2012
>Last-Modified:  Fri Feb 10 13:46:38 UTC 2012
>Originator:     Daniel Hagerty
>Release:        FreeBSD 8.2-STABLE amd64
>Organization:
I'll let you know when I find some
>Environment:
System: FreeBSD perdition.linnaean.org 8.2-STABLE FreeBSD 8.2-STABLE #1 r230385+ec72e00: Fri Jan 27 18:41:46 EST 2012 root@perdition.linnaean.org:/usr/src/sys/amd64/compile/LINNAEAN64 amd64

	8.2-STABLE, git id bc00e44d, svn r230835, some irrelevant
local modifications.

>Description:
	With my most recent update, I am unable to destroy zfs
	snapshots without using -R.  This makes me unhappy, since -R
	is a big hammer.  This is also affect automatic deletion of
	local snapshots provided by the sysutils/zfs-periodic port I'm
	using; it (quite sanely) doesn't use -R.

>How-To-Repeat:

	$ zfs snapshot pool@snapshot
	$ zfs destroy -v pool@snapshot 
will destroy pool@snapshot
will reclaim 0
[Exit 1 ]
	$ zfs list pool@snapshot
NAME                    USED  AVAIL  REFER  MOUNTPOINT
pool@snapshot              0      -    35K  -
	
>Fix:

    Patch that fixes the issue below; it's based on the git id
bc00e44d/svn r230835 that I'm currently running.  The issue is the use
of an uninitialized variable "err".

commit 6233abc650e37b32f247f1e6690c9bc96395a6e8
Author: Daniel Hagerty <hag@linnaean.org>
Date:   Sun Feb 5 11:33:26 2012 -0500

    zfs destroy foo@bar fails due to uninitialized var

diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
index 78037d4..6bf3267 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
@@ -1206,7 +1206,7 @@ zfs_do_destroy(int argc, char **argv)
 
 	at = strchr(argv[0], '@');
 	if (at != NULL) {
-		int err;
+		int err = 0;
 
 		/* Build the list of snaps to destroy in cb_nvl. */
 		if (nvlist_alloc(&cb.cb_nvl, NV_UNIQUE_NAME, 0) != 0)
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->mm 
Responsible-Changed-By: mm 
Responsible-Changed-When: Tue Feb 7 21:42:38 UTC 2012 
Responsible-Changed-Why:  
I'll take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=164802 
State-Changed-From-To: open->patched 
State-Changed-By: mm 
State-Changed-When: Tue Feb 7 21:42:51 UTC 2012 
State-Changed-Why:  
Patched in r231144. Awaiting end of MFC term. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=164802 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/164802: commit references a PR
Date: Fri, 10 Feb 2012 13:36:01 +0000 (UTC)

 Author: mm
 Date: Fri Feb 10 13:35:49 2012
 New Revision: 231381
 URL: http://svn.freebsd.org/changeset/base/231381
 
 Log:
   MFC r231144:
   Merge illumos revision 13594:
   
   uninitialized variables in zfs(8) may make snapshots undestroyable [1]
   
   References:
   https://www.illumos.org/issues/2067 [1]
   
   Obtained from:	illumos (issue #2067)
   PR:		bin/164802
 
 Modified:
   stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
 Directory Properties:
   stable/9/cddl/contrib/opensolaris/   (props changed)
 
 Modified: stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
 ==============================================================================
 --- stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Fri Feb 10 13:15:11 2012	(r231380)
 +++ stable/9/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Fri Feb 10 13:35:49 2012	(r231381)
 @@ -590,7 +590,7 @@ zfs_do_clone(int argc, char **argv)
  	zfs_handle_t *zhp = NULL;
  	boolean_t parents = B_FALSE;
  	nvlist_t *props;
 -	int ret;
 +	int ret = 0;
  	int c;
  
  	if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0)
 @@ -1052,7 +1052,7 @@ destroy_print_cb(zfs_handle_t *zhp, void
  static int
  destroy_print_snapshots(zfs_handle_t *fs_zhp, destroy_cbdata_t *cb)
  {
 -	int err;
 +	int err = 0;
  	assert(cb->cb_firstsnap == NULL);
  	assert(cb->cb_prevsnap == NULL);
  	err = zfs_iter_snapshots_sorted(fs_zhp, destroy_print_cb, cb);
 @@ -1130,7 +1130,7 @@ destroy_clones(destroy_cbdata_t *cb)
  		    ZFS_TYPE_SNAPSHOT);
  		if (zhp != NULL) {
  			boolean_t defer = cb->cb_defer_destroy;
 -			int err;
 +			int err = 0;
  
  			/*
  			 * We can't defer destroy non-snapshots, so set it to
 @@ -1207,7 +1207,7 @@ zfs_do_destroy(int argc, char **argv)
  
  	at = strchr(argv[0], '@');
  	if (at != NULL) {
 -		int err;
 +		int err = 0;
  
  		/* Build the list of snaps to destroy in cb_nvl. */
  		if (nvlist_alloc(&cb.cb_nvl, NV_UNIQUE_NAME, 0) != 0)
 @@ -1474,7 +1474,7 @@ zfs_do_get(int argc, char **argv)
  	zprop_get_cbdata_t cb = { 0 };
  	int i, c, flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
  	char *value, *fields;
 -	int ret;
 +	int ret = 0;
  	int limit = 0;
  	zprop_list_t fake_name = { 0 };
  
 @@ -1711,7 +1711,7 @@ zfs_do_inherit(int argc, char **argv)
  	zfs_prop_t prop;
  	inherit_cbdata_t cb = { 0 };
  	char *propname;
 -	int ret;
 +	int ret = 0;
  	int flags = 0;
  	boolean_t received = B_FALSE;
  
 @@ -1917,7 +1917,7 @@ zfs_do_upgrade(int argc, char **argv)
  {
  	boolean_t all = B_FALSE;
  	boolean_t showversions = B_FALSE;
 -	int ret;
 +	int ret = 0;
  	upgrade_cbdata_t cb = { 0 };
  	char c;
  	int flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
 @@ -2206,7 +2206,7 @@ userspace_cb(void *arg, const char *doma
  		uid_t id;
  		uint64_t classes;
  #ifdef sun
 -		int err;
 +		int err = 0;
  		directory_error_t e;
  #endif
  
 @@ -2562,7 +2562,7 @@ zfs_do_userspace(int argc, char **argv)
  	boolean_t prtnum = B_FALSE;
  	boolean_t parseable = B_FALSE;
  	boolean_t sid2posix = B_FALSE;
 -	int error;
 +	int error = 0;
  	int c;
  	zfs_sort_column_t *default_sortcol = NULL;
  	zfs_sort_column_t *sortcol = NULL;
 @@ -2920,7 +2920,7 @@ zfs_do_list(int argc, char **argv)
  	list_cbdata_t cb = { 0 };
  	char *value;
  	int limit = 0;
 -	int ret;
 +	int ret = 0;
  	zfs_sort_column_t *sortcol = NULL;
  	int flags = ZFS_ITER_PROP_LISTSNAPS | ZFS_ITER_ARGS_CAN_BE_PATHS;
  
 @@ -3050,7 +3050,9 @@ zfs_do_rename(int argc, char **argv)
  {
  	zfs_handle_t *zhp;
  	renameflags_t flags = { 0 };
 -	int c, ret, types;
 +	int c;
 +	int ret = 0;
 +	int types;
  	boolean_t parents = B_FALSE;
  
  	/* check options */
 @@ -3143,7 +3145,7 @@ static int
  zfs_do_promote(int argc, char **argv)
  {
  	zfs_handle_t *zhp;
 -	int ret;
 +	int ret = 0;
  
  	/* check options */
  	if (argc > 1 && argv[1][0] == '-') {
 @@ -3264,7 +3266,7 @@ rollback_check(zfs_handle_t *zhp, void *
  static int
  zfs_do_rollback(int argc, char **argv)
  {
 -	int ret;
 +	int ret = 0;
  	int c;
  	boolean_t force = B_FALSE;
  	rollback_cbdata_t cb = { 0 };
 @@ -3382,7 +3384,7 @@ static int
  zfs_do_set(int argc, char **argv)
  {
  	set_cbdata_t cb;
 -	int ret;
 +	int ret = 0;
  
  	/* check for options */
  	if (argc > 1 && argv[1][0] == '-') {
 @@ -3436,7 +3438,7 @@ static int
  zfs_do_snapshot(int argc, char **argv)
  {
  	boolean_t recursive = B_FALSE;
 -	int ret;
 +	int ret = 0;
  	char c;
  	nvlist_t *props;
  
 @@ -5274,7 +5276,7 @@ zfs_do_holds(int argc, char **argv)
  	holds_cbdata_t cb = { 0 };
  
  	int limit = 0;
 -	int ret;
 +	int ret = 0;
  	int flags = 0;
  
  	/* check options */
 @@ -5851,7 +5853,7 @@ static int
  unshare_unmount_path(int op, char *path, int flags, boolean_t is_manual)
  {
  	zfs_handle_t *zhp;
 -	int ret;
 +	int ret = 0;
  	struct stat64 statbuf;
  	struct extmnttab entry;
  	const char *cmdname = (op == OP_SHARE) ? "unshare" : "unmount";
 @@ -6319,7 +6321,7 @@ manual_mount(int argc, char **argv)
  	zfs_handle_t *zhp;
  	char mountpoint[ZFS_MAXPROPLEN];
  	char mntopts[MNT_LINE_MAX] = { '\0' };
 -	int ret;
 +	int ret = 0;
  	int c;
  	int flags = 0;
  	char *dataset, *path;
 @@ -6469,7 +6471,7 @@ zfs_do_diff(int argc, char **argv)
  	char *tosnap = NULL;
  	char *fromsnap = NULL;
  	char *atp, *copy;
 -	int err;
 +	int err = 0;
  	int c;
  
  	while ((c = getopt(argc, argv, "FHt")) != -1) {
 @@ -6539,7 +6541,7 @@ zfs_do_diff(int argc, char **argv)
  int
  main(int argc, char **argv)
  {
 -	int ret;
 +	int ret = 0;
  	int i;
  	char *progname;
  	char *cmdname;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/164802: commit references a PR
Date: Fri, 10 Feb 2012 13:36:48 +0000 (UTC)

 Author: mm
 Date: Fri Feb 10 13:36:39 2012
 New Revision: 231382
 URL: http://svn.freebsd.org/changeset/base/231382
 
 Log:
   MFC r231144:
   Merge illumos revision 13594:
   
   uninitialized variables in zfs(8) may make snapshots undestroyable [1]
   
   References:
   https://www.illumos.org/issues/2067 [1]
   
   Obtained from:	illumos (issue #2067)
   PR:		bin/164802
 
 Modified:
   stable/8/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
 Directory Properties:
   stable/8/cddl/contrib/opensolaris/   (props changed)
 
 Modified: stable/8/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
 ==============================================================================
 --- stable/8/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Fri Feb 10 13:35:49 2012	(r231381)
 +++ stable/8/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c	Fri Feb 10 13:36:39 2012	(r231382)
 @@ -590,7 +590,7 @@ zfs_do_clone(int argc, char **argv)
  	zfs_handle_t *zhp = NULL;
  	boolean_t parents = B_FALSE;
  	nvlist_t *props;
 -	int ret;
 +	int ret = 0;
  	int c;
  
  	if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0)
 @@ -1052,7 +1052,7 @@ destroy_print_cb(zfs_handle_t *zhp, void
  static int
  destroy_print_snapshots(zfs_handle_t *fs_zhp, destroy_cbdata_t *cb)
  {
 -	int err;
 +	int err = 0;
  	assert(cb->cb_firstsnap == NULL);
  	assert(cb->cb_prevsnap == NULL);
  	err = zfs_iter_snapshots_sorted(fs_zhp, destroy_print_cb, cb);
 @@ -1130,7 +1130,7 @@ destroy_clones(destroy_cbdata_t *cb)
  		    ZFS_TYPE_SNAPSHOT);
  		if (zhp != NULL) {
  			boolean_t defer = cb->cb_defer_destroy;
 -			int err;
 +			int err = 0;
  
  			/*
  			 * We can't defer destroy non-snapshots, so set it to
 @@ -1207,7 +1207,7 @@ zfs_do_destroy(int argc, char **argv)
  
  	at = strchr(argv[0], '@');
  	if (at != NULL) {
 -		int err;
 +		int err = 0;
  
  		/* Build the list of snaps to destroy in cb_nvl. */
  		if (nvlist_alloc(&cb.cb_nvl, NV_UNIQUE_NAME, 0) != 0)
 @@ -1474,7 +1474,7 @@ zfs_do_get(int argc, char **argv)
  	zprop_get_cbdata_t cb = { 0 };
  	int i, c, flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
  	char *value, *fields;
 -	int ret;
 +	int ret = 0;
  	int limit = 0;
  	zprop_list_t fake_name = { 0 };
  
 @@ -1711,7 +1711,7 @@ zfs_do_inherit(int argc, char **argv)
  	zfs_prop_t prop;
  	inherit_cbdata_t cb = { 0 };
  	char *propname;
 -	int ret;
 +	int ret = 0;
  	int flags = 0;
  	boolean_t received = B_FALSE;
  
 @@ -1917,7 +1917,7 @@ zfs_do_upgrade(int argc, char **argv)
  {
  	boolean_t all = B_FALSE;
  	boolean_t showversions = B_FALSE;
 -	int ret;
 +	int ret = 0;
  	upgrade_cbdata_t cb = { 0 };
  	char c;
  	int flags = ZFS_ITER_ARGS_CAN_BE_PATHS;
 @@ -2206,7 +2206,7 @@ userspace_cb(void *arg, const char *doma
  		uid_t id;
  		uint64_t classes;
  #ifdef sun
 -		int err;
 +		int err = 0;
  		directory_error_t e;
  #endif
  
 @@ -2562,7 +2562,7 @@ zfs_do_userspace(int argc, char **argv)
  	boolean_t prtnum = B_FALSE;
  	boolean_t parseable = B_FALSE;
  	boolean_t sid2posix = B_FALSE;
 -	int error;
 +	int error = 0;
  	int c;
  	zfs_sort_column_t *default_sortcol = NULL;
  	zfs_sort_column_t *sortcol = NULL;
 @@ -2920,7 +2920,7 @@ zfs_do_list(int argc, char **argv)
  	list_cbdata_t cb = { 0 };
  	char *value;
  	int limit = 0;
 -	int ret;
 +	int ret = 0;
  	zfs_sort_column_t *sortcol = NULL;
  	int flags = ZFS_ITER_PROP_LISTSNAPS | ZFS_ITER_ARGS_CAN_BE_PATHS;
  
 @@ -3050,7 +3050,9 @@ zfs_do_rename(int argc, char **argv)
  {
  	zfs_handle_t *zhp;
  	renameflags_t flags = { 0 };
 -	int c, ret, types;
 +	int c;
 +	int ret = 0;
 +	int types;
  	boolean_t parents = B_FALSE;
  
  	/* check options */
 @@ -3143,7 +3145,7 @@ static int
  zfs_do_promote(int argc, char **argv)
  {
  	zfs_handle_t *zhp;
 -	int ret;
 +	int ret = 0;
  
  	/* check options */
  	if (argc > 1 && argv[1][0] == '-') {
 @@ -3264,7 +3266,7 @@ rollback_check(zfs_handle_t *zhp, void *
  static int
  zfs_do_rollback(int argc, char **argv)
  {
 -	int ret;
 +	int ret = 0;
  	int c;
  	boolean_t force = B_FALSE;
  	rollback_cbdata_t cb = { 0 };
 @@ -3382,7 +3384,7 @@ static int
  zfs_do_set(int argc, char **argv)
  {
  	set_cbdata_t cb;
 -	int ret;
 +	int ret = 0;
  
  	/* check for options */
  	if (argc > 1 && argv[1][0] == '-') {
 @@ -3436,7 +3438,7 @@ static int
  zfs_do_snapshot(int argc, char **argv)
  {
  	boolean_t recursive = B_FALSE;
 -	int ret;
 +	int ret = 0;
  	char c;
  	nvlist_t *props;
  
 @@ -5274,7 +5276,7 @@ zfs_do_holds(int argc, char **argv)
  	holds_cbdata_t cb = { 0 };
  
  	int limit = 0;
 -	int ret;
 +	int ret = 0;
  	int flags = 0;
  
  	/* check options */
 @@ -5851,7 +5853,7 @@ static int
  unshare_unmount_path(int op, char *path, int flags, boolean_t is_manual)
  {
  	zfs_handle_t *zhp;
 -	int ret;
 +	int ret = 0;
  	struct stat64 statbuf;
  	struct extmnttab entry;
  	const char *cmdname = (op == OP_SHARE) ? "unshare" : "unmount";
 @@ -6319,7 +6321,7 @@ manual_mount(int argc, char **argv)
  	zfs_handle_t *zhp;
  	char mountpoint[ZFS_MAXPROPLEN];
  	char mntopts[MNT_LINE_MAX] = { '\0' };
 -	int ret;
 +	int ret = 0;
  	int c;
  	int flags = 0;
  	char *dataset, *path;
 @@ -6469,7 +6471,7 @@ zfs_do_diff(int argc, char **argv)
  	char *tosnap = NULL;
  	char *fromsnap = NULL;
  	char *atp, *copy;
 -	int err;
 +	int err = 0;
  	int c;
  
  	while ((c = getopt(argc, argv, "FHt")) != -1) {
 @@ -6539,7 +6541,7 @@ zfs_do_diff(int argc, char **argv)
  int
  main(int argc, char **argv)
  {
 -	int ret;
 +	int ret = 0;
  	int i;
  	char *progname;
  	char *cmdname;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: mm 
State-Changed-When: Fri Feb 10 13:46:37 UTC 2012 
State-Changed-Why:  
Resolved. Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=164802 
>Unformatted:
