From nobody@FreeBSD.org  Fri Sep  2 16:52:20 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 839A51065673
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  2 Sep 2011 16:52:20 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 734C78FC15
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  2 Sep 2011 16:52:20 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p82GqKij058886
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 2 Sep 2011 16:52:20 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p82GqKth058885;
	Fri, 2 Sep 2011 16:52:20 GMT
	(envelope-from nobody)
Message-Id: <201109021652.p82GqKth058885@red.freebsd.org>
Date: Fri, 2 Sep 2011 16:52:20 GMT
From: Nikolai Lifanov <lifanov@mail.lifanov.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: zfs rename dumps core
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         160400
>Category:       bin
>Synopsis:       zfs(1): zfs rename dumps core
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    mm
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Sep 02 17:00:24 UTC 2011
>Closed-Date:    Wed Oct 05 20:29:15 UTC 2011
>Last-Modified:  Wed Oct 05 20:29:15 UTC 2011
>Originator:     Nikolai Lifanov
>Release:        9.0 beta 2
>Organization:
>Environment:
FreeBSD lifanovbsd2 9.0-BETA2 FreeBSD 9.0-BETA2 #0: Fri Sep  2 03:47:59 EDT 2011     root@lifanovbsd2:/usr/obj/usr/src/sys/LIFANOV_FAST  amd64
>Description:
After creating a full boot environment and trying to boot into it, renaming the dataset containing the environment fails with a coredump.

[CODE]
lifanovbsd2# zfs list
NAME                                     USED  AVAIL  REFER  MOUNTPOINT
rpool                                   7.22G   891G   393M  none
rpool/ROOT                              3.84G   891G    31K  none
rpool/ROOT/be-base                      3.84G   891G   399M  legacy
rpool/ROOT/be-base/tmp                    76K   891G    44K  /tmp
rpool/ROOT/be-base/usr                  3.37G   891G  2.17G  /usr
rpool/ROOT/be-base/usr/home               88K   891G    67K  /usr/home
rpool/ROOT/be-base/usr/jail               31K   891G    31K  /usr/jail
rpool/ROOT/be-base/usr/ports             539M   891G   426M  /usr/ports
rpool/ROOT/be-base/usr/ports/distfiles   113M   891G   113M  /usr/ports/distfiles
rpool/ROOT/be-base/usr/ports/packages     31K   891G    31K  /usr/ports/packages
rpool/ROOT/be-base/usr/src               684M   891G   684M  /usr/src
rpool/ROOT/be-base/var                  84.0M   891G   136K  /var
rpool/ROOT/be-base/var/crash            31.5K   891G  31.5K  /var/crash
rpool/ROOT/be-base/var/db               82.9M   891G  80.3M  /var/db
rpool/ROOT/be-base/var/db/pkg           2.57M   891G  2.57M  /var/db/pkg
rpool/ROOT/be-base/var/empty              31K   891G    31K  /var/empty
rpool/ROOT/be-base/var/log               629K   891G   397K  /var/log
rpool/ROOT/be-base/var/mail               64K   891G    38K  /var/mail
rpool/ROOT/be-base/var/run               106K   891G  61.5K  /var/run
rpool/ROOT/be-base/var/tmp                52K   891G    32K  /var/tmp
rpool/tmp                                 45K   891G    44K  none
rpool/usr                               2.85G   891G  2.17G  none
rpool/usr/home                            69K   891G    68K  none
rpool/usr/jail                            31K   891G    31K  none
rpool/usr/ports                          345M   891G   232M  none
rpool/usr/ports/distfiles                113M   891G   113M  none
rpool/usr/ports/packages                  32K   891G    31K  none
rpool/usr/src                            348M   891G   348M  none
rpool/var                               81.9M   891G   133K  none
rpool/var/crash                         32.5K   891G  31.5K  none
rpool/var/db                            81.4M   891G  80.5M  none
rpool/var/db/pkg                         890K   891G   889K  none
rpool/var/empty                           31K   891G    31K  none
rpool/var/log                            146K   891G   112K  none
rpool/var/mail                          33.5K   891G  32.5K  none
rpool/var/run                           83.5K   891G  61.5K  none
rpool/var/tmp                             33K   891G    32K  none
lifanovbsd2# zfs rename rpool/ROOT/be-base rpool/ROOT/be-current
Assertion failed: (!clp->cl_alldependents), file /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c, line 470.
Abort (core dumped)
lifanovbsd2# 
[/CODE]

>How-To-Repeat:
Do roughly the following:

[CODE]

zfs snapshot -r rpool@snap0

zfs create -o dedup=on rpool/ROOT

zfs send rpool@snap0 | zfs recv rpool/ROOT/be-base

zfs destroy rpool/ROOT/be-base@snap0

for i in `zfs list -t snapshot | grep snap0 | cut -d@ -f1 | cut -c6-`; do (zfs send rpool${i}@snap0 | zfs recv rpool/ROOT/be-base${i}); done

for i in `mount | grep -v /mnt/ | grep rpool/ | cut -d' ' -f1 | cut -c6-`; do zfs set mountpoint=none rpool${i}; zfs set mountpoint=${i} rpool/ROOT/be-base${i}; done

#Check your mountpoints and fiddle to get everything right.

#Running previous command twice to start off might help.

#'zfs list' can lie

zfs set freebsd:boot-environment=1 rpool/ROOT/be-base

zfs set mountpoint=/mnt rpool/ROOT/be-base

sed -i 's/zfs:rpool/zfs:rpool\/ROOT\/be-base/g' /rpool/ROOT/be-base/boot/loader.conf

zfs set mountpoint=legacy rpool/ROOT/be-base

zpool set bootfs=rpool/ROOT/be-base rpool

reboot

[/CODE]

After this, do a 'zfs rename' on be-base.

>Fix:


>Release-Note:
>Audit-Trail:

From: Martin Matuska <mm@FreeBSD.org>
To: bug-followup@FreeBSD.org
Cc: zfs-devel@FreeBSD.org
Subject: [PATCH] Re: bin/160400: zfs(1): zfs rename dumps core
Date: Wed, 28 Sep 2011 10:59:06 +0200

 This is a multi-part message in MIME format.
 --------------020904070709010904030807
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 7bit
 
 The reproduction of this issue can be simplified and similiar case has
 already been reported on freebsd-fs@:
 http://lists.freebsd.org/pipermail/freebsd-fs/2010-September/009379.html
 http://lists.freebsd.org/pipermail/freebsd-fs/2011-August/012291.html
 
 It is important that the mountpoint of the dataset to be renamed is set
 to none or legacy, otherwise this assertion is not triggered.
 
 # zfs create -o mountpoint=none tank/a
 # zfs create tank/a/b
 # zfs rename tank/a tank/c
 Assertion failed: (!clp->cl_alldependents), file
 /usr/src/cddl/lib/libzfs/../../../cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c,
 line 470.
 Abort (core dumped)
 
 As to my code examination, the assertion in libzfs_changelist.c:
 change_one() is inproper or invalid. The code path is called with
 clp->cl_sorted = B_FALSE and  cl_alldependents = B_TRUE from
 changelist_gather() if mountpoint is legacy or none.
 
 This misbehaviour was introduced in this OpenSolaris commit:
 
 changeset:   10196:210962933dfd
 user:        William Gorrell <william.gorrell@sun.com>
 date:        Wed Jul 29 08:49:33 2009 -0600
 summary:     6612218 inherited zfs set mountpoint mounts children before
 parent
 
 https://github.com/illumos/illumos-gate/commit/3cc4a7920cf40de22a5c8c465a4676b2b7f620dd#usr/src/lib/libzfs/common/libzfs_changelist.c
 
 I am generally putting in question why that assertion was in this place
 at it concerns exclusively the case with mountpoint=none or
 mountpoint=legacy and it manages only the order of the datasets being
 processed. I suggest removing the assertion as we can safely try to
 unmount the dependent filesystems.
 
 Please review the attached patch.
 
 -- 
 Martin Matuska
 FreeBSD committer
 http://blog.vx.sk
 
 
 --------------020904070709010904030807
 Content-Type: text/plain;
  name="libzfs_changelist.c.patch"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment;
  filename="libzfs_changelist.c.patch"
 
 SW5kZXg6IGNkZGwvY29udHJpYi9vcGVuc29sYXJpcy9saWIvbGliemZzL2NvbW1vbi9saWJ6
 ZnNfY2hhbmdlbGlzdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNkZGwvY29udHJpYi9vcGVuc29s
 YXJpcy9saWIvbGliemZzL2NvbW1vbi9saWJ6ZnNfY2hhbmdlbGlzdC5jCShyZXZpc2lvbiAy
 MjU2ODkpCisrKyBjZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvbGliL2xpYnpmcy9jb21tb24v
 bGliemZzX2NoYW5nZWxpc3QuYwkod29ya2luZyBjb3B5KQpAQCAtNDY3LDcgKzQ2Nyw2IEBA
 IGNoYW5nZV9vbmUoemZzX2hhbmRsZV90ICp6aHAsIHZvaWQgKmRhdGEpCiAJCQkgKiBUaGlz
 IGlzIG5lY2Vzc2FyeSB3aGVuIHRoZSBvcmlnaW5hbCBtb3VudHBvaW50CiAJCQkgKiBpcyBs
 ZWdhY3kgb3Igbm9uZS4KIAkJCSAqLwotCQkJQVNTRVJUKCFjbHAtPmNsX2FsbGRlcGVuZGVu
 dHMpOwogCQkJdmVyaWZ5KHV1X2xpc3RfaW5zZXJ0X2JlZm9yZShjbHAtPmNsX2xpc3QsCiAJ
 CQkgICAgdXVfbGlzdF9maXJzdChjbHAtPmNsX2xpc3QpLCBjbikgPT0gMCk7CiAJCX0K
 --------------020904070709010904030807--
Responsible-Changed-From-To: freebsd-bugs->mm 
Responsible-Changed-By: mm 
Responsible-Changed-When: Wed Sep 28 10:44:20 UTC 2011 
Responsible-Changed-Why:  
I am taking this. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/160400: commit references a PR
Date: Wed, 28 Sep 2011 11:57:18 +0000 (UTC)

 Author: mm
 Date: Wed Sep 28 11:57:10 2011
 New Revision: 225828
 URL: http://svn.freebsd.org/changeset/base/225828
 
 Log:
   Remove assertion that prevents zfs rename of datasets with mountpoint=none
   or mountpoint=legacy that have children datasets. This also fixes dataset
   rename when receiving incremental snapshots as reported on freebsd-fs@
   
   This assertion was made triggerable by opensolaris change #10196.
   
   PR:		bin/160400
   Reviewed by:	pjd
   MFC after:	1 week
 
 Modified:
   head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 
 Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 ==============================================================================
 --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Sep 28 08:47:17 2011	(r225827)
 +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Sep 28 11:57:10 2011	(r225828)
 @@ -467,7 +467,6 @@ change_one(zfs_handle_t *zhp, void *data
  			 * This is necessary when the original mountpoint
  			 * is legacy or none.
  			 */
 -			ASSERT(!clp->cl_alldependents);
  			verify(uu_list_insert_before(clp->cl_list,
  			    uu_list_first(clp->cl_list), cn) == 0);
  		}
 _______________________________________________
 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: open->patched 
State-Changed-By: linimon 
State-Changed-When: Wed Oct 5 04:28:38 UTC 2011 
State-Changed-Why:  
Set state as MFC reminder. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/160400: commit references a PR
Date: Wed,  5 Oct 2011 19:58:16 +0000 (UTC)

 Author: mm
 Date: Wed Oct  5 19:57:59 2011
 New Revision: 226044
 URL: http://svn.freebsd.org/changeset/base/226044
 
 Log:
   MFC r225828:
   Remove assertion that prevents zfs rename of datasets with mountpoint=none
   or mountpoint=legacy that have children datasets. This also fixes dataset
   rename when receiving incremental snapshots as reported on freebsd-fs@
   
   This assertion was made triggerable by opensolaris change #10196.
   
   PR:		bin/160400
   Reviewed by:	pjd
   Approved by:	re (kib)
 
 Modified:
   stable/9/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 Directory Properties:
   stable/9/cddl/contrib/opensolaris/   (props changed)
 
 Modified: stable/9/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 ==============================================================================
 --- stable/9/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Oct  5 17:29:49 2011	(r226043)
 +++ stable/9/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Oct  5 19:57:59 2011	(r226044)
 @@ -467,7 +467,6 @@ change_one(zfs_handle_t *zhp, void *data
  			 * This is necessary when the original mountpoint
  			 * is legacy or none.
  			 */
 -			ASSERT(!clp->cl_alldependents);
  			verify(uu_list_insert_before(clp->cl_list,
  			    uu_list_first(clp->cl_list), cn) == 0);
  		}
 _______________________________________________
 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/160400: commit references a PR
Date: Wed,  5 Oct 2011 20:01:08 +0000 (UTC)

 Author: mm
 Date: Wed Oct  5 20:00:50 2011
 New Revision: 226045
 URL: http://svn.freebsd.org/changeset/base/226045
 
 Log:
   MFC r225828:
   Remove assertion that prevents zfs rename of datasets with mountpoint=none
   or mountpoint=legacy that have children datasets. This also fixes dataset
   rename when receiving incremental snapshots as reported on freebsd-fs@
   
   This assertion was made triggerable by opensolaris change #10196.
   
   PR:		bin/160400
   Reviewed by:	pjd
 
 Modified:
   stable/8/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 Directory Properties:
   stable/8/cddl/contrib/opensolaris/   (props changed)
 
 Modified: stable/8/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c
 ==============================================================================
 --- stable/8/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Oct  5 19:57:59 2011	(r226044)
 +++ stable/8/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_changelist.c	Wed Oct  5 20:00:50 2011	(r226045)
 @@ -467,7 +467,6 @@ change_one(zfs_handle_t *zhp, void *data
  			 * This is necessary when the original mountpoint
  			 * is legacy or none.
  			 */
 -			ASSERT(!clp->cl_alldependents);
  			verify(uu_list_insert_before(clp->cl_list,
  			    uu_list_first(clp->cl_list), cn) == 0);
  		}
 _______________________________________________
 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: Wed Oct 5 20:29:14 UTC 2011 
State-Changed-Why:  
Resolved. Thanks! 

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