getcwd lies on/under nfs4-mounted zfs dataset
Sergey Kandaurov
pluknet at gmail.com
Tue Jan 15 12:52:59 UTC 2013
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
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
More information about the freebsd-fs
mailing list