From owner-freebsd-bugs@FreeBSD.ORG Mon Jun 23 06:20:01 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9EBF5106566C for ; Mon, 23 Jun 2008 06:20:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 7C03E8FC16 for ; Mon, 23 Jun 2008 06:20:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m5N6K1HK084869 for ; Mon, 23 Jun 2008 06:20:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m5N6K1on084868; Mon, 23 Jun 2008 06:20:01 GMT (envelope-from gnats) Resent-Date: Mon, 23 Jun 2008 06:20:01 GMT Resent-Message-Id: <200806230620.m5N6K1on084868@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Masakazu Asama Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9104B1065671 for ; 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 ; 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 ; 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 To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/124899: [patch] Reboot hangs after ZFS snapshot directory lookup X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Jun 2008 06:20:01 -0000 >Number: 124899 >Category: kern >Synopsis: [patch] Reboot hangs after ZFS snapshot directory lookup >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Jun 23 06:20:01 UTC 2008 >Closed-Date: >Last-Modified: >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 infinit 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: >Unformatted: