From owner-freebsd-fs@FreeBSD.ORG Wed Jan 16 14:33:53 2013 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 161AC1DA for ; Wed, 16 Jan 2013 14:33:53 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) Received: from esa-annu.net.uoguelph.ca (esa-annu.mail.uoguelph.ca [131.104.91.36]) by mx1.freebsd.org (Postfix) with ESMTP id D4988D11 for ; Wed, 16 Jan 2013 14:33:52 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqAEAFC59lCDaFvO/2dsb2JhbABFhjq3YnOCHgEBAQMBAQEBICsgCwUWDgoCAg0ZAiMGAQkmBggHBAEcBIdmAwkGDKZdiR4Nh36BI4plgQiDFYETA4hhin1YgVaBHIobhRKDE4FRNQ X-IronPort-AV: E=Sophos;i="4.84,479,1355115600"; d="scan'208";a="9319197" Received: from erie.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.206]) by esa-annu.net.uoguelph.ca with ESMTP; 16 Jan 2013 09:33:51 -0500 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id ED68BB3F0B; Wed, 16 Jan 2013 09:33:51 -0500 (EST) Date: Wed, 16 Jan 2013 09:33:51 -0500 (EST) From: Rick Macklem To: Sergey Kandaurov Message-ID: <227703439.2036949.1358346831962.JavaMail.root@erie.cs.uoguelph.ca> In-Reply-To: Subject: Re: getcwd lies on/under nfs4-mounted zfs dataset MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [172.17.91.203] X-Mailer: Zimbra 6.0.10_GA_2692 (ZimbraWebClient - FF3.0 (Win)/6.0.10_GA_2692) Cc: freebsd-fs@freebsd.org X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Jan 2013 14:33:53 -0000 pluknet@gmail.com wrote: > Hi. > > We stuck with the problem getting wrong current directory path > when sitting on/under zfs dataset filesystem mounted over NFSv4. > Both nfs server and client are 10.0-CURRENT from December or so. > > The component path "user3" unexpectedly appears to be "." (dot). > nfs-client:/home/user3 # pwd > /home/. > nfs-client:/home/user3/var/run # pwd > /home/./var/run > Although you are welcome to try the patch I emailed you yesterday, I think it will result in the tree traversal algorithm in libc complaining about a cycle at some point, because there could be another node in the file system on the server that has the same fileno as the mounted-on-fileno. I need to take a close look at getcwd() and see how it handles mount point crossings. The trick is that the NFSv4 client must make getcwd() happy, but also try to avoid duplicate fileno (i-node #s) values within a subtree of the mount that has a given fsid. Since I can reproduce it here, I'll work on it and post if/when I have a better patch. rick > nfs-client:~ # procstat -f 3225 > PID COMM FD T V FLAGS REF OFFSET PRO NAME > 3225 a.out text v r r-------- - - - /home/./var/a.out > 3225 a.out ctty v c rw------- - - - /dev/pts/2 > 3225 a.out cwd v d r-------- - - - /home/./var > 3225 a.out root v d r-------- - - - / > > The used setup follows. > > 1. NFS Server with local ZFS: > # cat /etc/exports > V4: / -sec=sys > > # zfs list > pool1 10.4M 122G 580K /pool1 > pool1/user3 on /pool1/user3 (zfs, NFS exported, local, nfsv4acls) > > Exports list on localhost: > /pool1/user3 109.70.28.0 > /pool1 109.70.28.0 > > # zfs get sharenfs pool1/user3 > NAME PROPERTY VALUE SOURCE > pool1/user3 sharenfs -alldirs -maproot=root -network=109.70.28.0/24 > local > > 2. pool1 is mounted on NFSv4 client: > nfs-server:/pool1 on /home (nfs, noatime, nfsv4acls) > > So that on NFS client the "pool1/user3" dataset comes at /home/user3. > / - ufs > /home - zpool-over-nfsv4 > /home/user3 - zfs dataset "pool1/user3" > > At the same time it works as expected when we're not on zfs dataset, > but directly on its parent zfs pool (also over NFSv4), e.g. > nfs-client:/home/non_dataset_dir # pwd > /home/non_dataset_dir > > The ls command works as expected: > nfs-client:/# ls -dl /home/user3/var/ > drwxrwxrwt+ 6 root wheel 6 Jan 10 16:19 /home/user3/var/ > > -- > wbr, > pluknet > _______________________________________________ > freebsd-fs@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-fs > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"