From owner-freebsd-fs@FreeBSD.ORG Mon Oct 4 07:29:41 2004 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1005816A4CE; Mon, 4 Oct 2004 07:29:41 +0000 (GMT) Received: from gen129.n001.c02.escapebox.net (gen129.n001.c02.escapebox.net [213.73.91.129]) by mx1.FreeBSD.org (Postfix) with ESMTP id A00CA43D39; Mon, 4 Oct 2004 07:29:40 +0000 (GMT) (envelope-from gemini@geminix.org) Message-ID: <4160FBD9.10603@geminix.org> Date: Mon, 04 Oct 2004 09:29:29 +0200 From: Uwe Doering Organization: Private UNIX Site User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.2) Gecko/20041002 X-Accept-Language: en-us, en MIME-Version: 1.0 To: takawata@jp.freebsd.org References: <200410040705.i9475jwq012503@sana.init-main.com> In-Reply-To: <200410040705.i9475jwq012503@sana.init-main.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Received: from gemini by geminix.org with asmtp (TLSv1:AES256-SHA:256) (Exim 3.36 #1) id 1CENHn-000OjA-00; Mon, 04 Oct 2004 09:29:32 +0200 cc: freebsd-fs@FreeBSD.org cc: Boris Popov cc: das@FreeBSD.org cc: freebsd-current@FreeBSD.org Subject: Re: Your CVS fix 1.109 to union_vnops.c X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Oct 2004 07:29:41 -0000 takawata@jp.freebsd.org wrote: > In message <4160ED06.6070603@geminix.org>, Uwe Doering wrote: > >>Takanori Watanabe wrote: >>[...] >>>Ok, the issue Uwe says is when underlying filesystem and >>>wrapping filesystem are diffent and if there are two files >>>with same identifier exists. >>>And the issue I want to fix is when underlying filesystem and >>>wrapping filesystem are same so getcwd routine failed to distinguish >>>the mount point. >>> >>>So it can be solved by translating fsid if the fsid of a file is same as >>>that of mountpoint. True? >> >>Correct. In this case the inode number is guaranteed to be unique. >>This might be okay as a local patch, but it is IMHO not a fix suited for >>FreeBSD in general. > > Ok. How about this? > > Index: union_vnops.c > =================================================================== > RCS file: /home/ncvs/src/sys/fs/unionfs/union_vnops.c,v > retrieving revision 1.109 > diff -u -r1.109 union_vnops.c > --- union_vnops.c 2 Oct 2004 17:17:04 -0000 1.109 > +++ union_vnops.c 4 Oct 2004 07:04:38 -0000 > @@ -951,6 +951,8 @@ > error = VOP_GETATTR(vp, vap, ap->a_cred, ap->a_td); > if (error) > return (error); > + ap->a_vap->va_fsid = ap->a_vp->v_mount->mnt_stat.f_fsid.val[0]; > + > /* XXX isn't this dangerous without a lock? */ > union_newsize(ap->a_vp, vap->va_size, VNOVAL); > } > @@ -972,7 +974,6 @@ > union_newsize(ap->a_vp, VNOVAL, vap->va_size); > } > > - ap->a_vap->va_fsid = ap->a_vp->v_mount->mnt_stat.f_fsid.val[0]; > > if ((vap != ap->a_vap) && (vap->va_type == VDIR)) > ap->a_vap->va_nlink += vap->va_nlink; This wouldn't be correct, either. Unionfs can be stacked, that is, you can't even be sure for a single layer that the passed up va_fsid will always be the same. The underlying unionfs can be comprised of two layers on two different file systems as well, and so on. You can override va_fsid only if the original file system id is guaranteed to be the same for all files in that layer (single file system case). Uwe -- Uwe Doering | EscapeBox - Managed On-Demand UNIX Servers gemini@geminix.org | http://www.escapebox.net