From owner-svn-src-head@FreeBSD.ORG Mon Apr 13 19:56:35 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E8D5106568C; Mon, 13 Apr 2009 19:56:35 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: from kientzle.com (kientzle.com [66.166.149.50]) by mx1.freebsd.org (Postfix) with ESMTP id 6C7558FC08; Mon, 13 Apr 2009 19:56:35 +0000 (UTC) (envelope-from kientzle@freebsd.org) Received: (from root@localhost) by kientzle.com (8.14.3/8.14.3) id n3DJuZ35073162; Mon, 13 Apr 2009 12:56:35 -0700 (PDT) (envelope-from kientzle@freebsd.org) Received: from dark.x.kientzle.com (fw2.kientzle.com [10.123.1.2]) by kientzle.com with SMTP id gyggie2dks6eu6ifwf5r5ptv5s; Mon, 13 Apr 2009 12:56:34 -0700 (PDT) (envelope-from kientzle@freebsd.org) Message-ID: <49E398F2.7090604@freebsd.org> Date: Mon, 13 Apr 2009 12:56:34 -0700 From: Tim Kientzle User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.21) Gecko/20090409 SeaMonkey/1.1.15 MIME-Version: 1.0 To: John Baldwin References: <200903181619.n2IGJifl031031@svn.freebsd.org> <200903181406.32619.jhb@freebsd.org> In-Reply-To: <200903181406.32619.jhb@freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r189967 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2009 19:56:37 -0000 John Baldwin wrote: > On Wednesday 18 March 2009 12:19:44 pm John Baldwin wrote: >> Author: jhb >> Date: Wed Mar 18 16:19:44 2009 >> New Revision: 189967 >> URL: http://svn.freebsd.org/changeset/base/189967 >> >> Log: >> The zfs_get_xattrdir() function is used to find the extended attribute >> directory for a znode. When the directory already exists, it returns a >> referenced but unlocked vnode. When a directory does not yet exist, it >> calls zfs_make_xattrdir() to create a new one. zfs_make_xattrdir() returns >> the vnode both referenced and and locked and zfs_get_xattrdir() was leaking >> this vnode lock to its callers. Fix this by dropping the vnode lock if >> zfs_make_xattrdir() successfully creates a new extended attribute >> directory. > > This should fix the panics with ZFS and tar + EA. Thanks. One point I'm curious about. This problem was originally triggered by calls to extattr_list_fd(). This seems to imply that any call to extattr_list_fd() will allocate an extended attribute directory if it doesn't already exist. This is surprising. It also raises questions about both performance (tar now does extattr_list_fd() for every file being archived) and operation with read-only mounts. Tim