From nobody@FreeBSD.org  Mon Jun 23 06:13:04 2008
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 9104B1065671
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 23 Jun 2008 06:13:04 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 80C088FC16
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 23 Jun 2008 06:13:04 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m5N6D4EN088431
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 23 Jun 2008 06:13:04 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m5N6D3nN088430;
	Mon, 23 Jun 2008 06:13:03 GMT
	(envelope-from nobody)
Message-Id: <200806230613.m5N6D3nN088430@www.freebsd.org>
Date: Mon, 23 Jun 2008 06:13:03 GMT
From: Masakazu Asama <m-asama@ginzado.ne.jp>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] Reboot hangs after ZFS snapshot directory lookup
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         124899
>Category:       kern
>Synopsis:       [zfs] [patch] Reboot hangs after ZFS snapshot directory lookup
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-fs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jun 23 06:20:01 UTC 2008
>Closed-Date:    Thu May 28 23:21:40 UTC 2009
>Last-Modified:  Thu May 28 23:21:40 UTC 2009
>Originator:     Masakazu Asama
>Release:        FreeBSD 7.0-STABLE (GENERIC)
>Organization:
Ginzado Co., Ltd.
>Environment:
FreeBSD xxx 7.0-STABLE FreeBSD 7.0-STABLE #1: Sat Jun 21 17:27:55 JST 2008     root@xxx:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
Reboot hangs after ZFS snapshot directory lookup.

In zfsctl_snapdir_lookup(zfs_ctldir.c) line at 681, macro ZFS_ENTER
called, but ZFS_EXIT missing case exists.

When unmounting ZFS snapshot directory, zfs_umount(zfs_vfsops.c) line
at 737 going infinite loop, because zfsvfs_t->z_op_cnt never to zero.

>How-To-Repeat:
[root@srv2 ~]# zpool create tank da0s1d
[root@srv2 ~]# zfs create tank/vol01
[root@srv2 ~]# zfs snapshot tank/vol01@snap01
[root@srv2 ~]# df
Filesystem  1K-blocks    Used   Avail Capacity  Mounted on
/dev/da0s1a   5077038 3983846  687030    85%    /
devfs               1       1       0   100%    /dev
tank          2047872     128 2047744     0%    /tank
tank/vol01    2047872     128 2047744     0%    /tank/vol01
[root@srv2 ~]# ls /tank/vol01/.zfs/snapshot/snap01
[root@srv2 ~]# df
Filesystem        1K-blocks    Used   Avail Capacity  Mounted on
/dev/da0s1a         5077038 3983846  687030    85%    /
devfs                     1       1       0   100%    /dev
tank                2047872     128 2047744     0%    /tank
tank/vol01          2047872     128 2047744     0%    /tank/vol01
tank/vol01@snap01   2047872     128 2047744     0%    /tank/vol01/.zfs/snapshot/snap01
[root@srv2 ~]# cd /
[root@srv2 /]# shutdown -r now
hangs...

>Fix:
Apply the patch.


Patch attached with submission follows:

--- /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c.orig	2008-04-17 10:23:33.000000000 +0900
+++ /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	2008-06-24 23:06:00.000000000 +0900
@@ -734,6 +734,7 @@
 	if (err == 0)
 		vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY, curthread);
 	mutex_exit(&sdp->sd_lock);
+	ZFS_EXIT(zfsvfs);
 
 	/*
 	 * If we had an error, drop our hold on the vnode and


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->patched 
State-Changed-By: pjd 
State-Changed-When: pon 15 wrz 11:27:39 2008 UTC 
State-Changed-Why:  
Fix committed to HEAD, thanks! 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/124899: commit references a PR
Date: Mon, 15 Sep 2008 11:27:52 +0000 (UTC)

 pjd         2008-09-15 11:27:25 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_ctldir.c 
   Log:
   SVN rev 183037 on 2008-09-15 11:27:25Z by pjd
   
   Add missing ZFS_EXIT().
   
   PR:             kern/124899
   Submitted by:   Masakazu Asama <m-asama@ginzado.ne.jp>
   
   Revision  Changes    Path
   1.11      +1 -0      src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
Responsible-Changed-From-To: freebsd-bugs->pjd 
Responsible-Changed-By: brooks 
Responsible-Changed-When: Fri Oct 17 14:21:21 UTC 2008 
Responsible-Changed-Why:  
pjd committed the patch to assign to him for MFC. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=124899 
Responsible-Changed-From-To: pjd->freebsd-fs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Thu May 28 22:23:46 UTC 2009 
Responsible-Changed-Why:  
With pjd's permission, reassing ZFS-related PRs to freebsd-fs. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=124899 
State-Changed-From-To: patched->closed 
State-Changed-By: kmacy 
State-Changed-When: Thu May 28 23:21:14 UTC 2009 
State-Changed-Why:  


Patch available and fixed in v13. 

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