/bin/pwd reports "No such file or directory" on any directory under .zfs/snapshot. % echo $PWD /home/koie/.zfs/snapshot % ls 20071109-first/ 20071118/ 20071119/ 20071120/ 20071121/ % /bin/pwd pwd: .: No such file or directory % stat . 3942394176 2 dr-xr-xr-x 2 root wheel 0 2 "Nov 21 17:52:27 2007" "Nov 15 16:06:35 2007" "Nov 15 1\ 6:06:35 2007" "Nov 15 16:06:35 2007" 4096 0 0 . % The following is output of truss(1): % cd .zfs/snapshot/ % truss /bin/pwd __sysctl(0x7fffffffe520,0x2,0x7fffffffe53c,0x7fffffffe530,0x0,0x0) = 0 (0x0) mmap(0x0,560,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365132800 (0x800525000) munmap(0x800525000,560) = 0 (0x0) __sysctl(0x7fffffffe590,0x2,0x80062dde8,0x7fffffffe588,0x0,0x0) = 0 (0x0) mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34365132800 (0x800525000) issetugid(0x800526015,0x800521669,0x800631730,0x800631700,0x49ac,0x7fffffffe588) = 0 (0x0) open("/etc/libmap.conf",O_RDONLY,0666) ERR#2 'No such file or directory' open("/var/run/ld-elf.so.hints",O_RDONLY,057) = 3 (0x3) read(3,"Ehnt\^A\0\0\0\M^@\0\0\0m\0\0\0\0"...,128) = 128 (0x80) lseek(3,0x80,SEEK_SET) = 128 (0x80) read(3,"/lib:/usr/lib:/usr/lib/compat:/u"...,109) = 109 (0x6d) close(3) = 0 (0x0) access("/lib/libc.so.7",0) = 0 (0x0) open("/lib/libc.so.7",O_RDONLY,030556300) = 3 (0x3) fstat(3,{mode=-r--r--r-- ,inode=16548,size=1159360,blksize=4096}) = 0 (0x0) read(3,"\^?ELF\^B\^A\^A\t\0\0\0\0\0\0\0"...,4096) = 4096 (0x1000) mmap(0x0,2224128,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_NOCORE,3,0x0) = 34366234624 (0x800632000) mprotect(0x80071d000,4096,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0) mprotect(0x80071d000,4096,PROT_READ|PROT_EXEC) = 0 (0x0) mmap(0x80081d000,118784,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED,3,0xeb000) = 34368245760 (0x80081d000) mmap(0x80083a000,94208,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34368364544 (0x80083a000) close(3) = 0 (0x0) sysarch(0x81,0x7fffffffe610,0x80052a088,0x0,0xffffffffffd02c90,0x7fffffffe368) = 0 (0x0) mmap(0x0,288,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) munmap(0x80052d000,288) = 0 (0x0) mmap(0x0,41776,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) munmap(0x80052d000,41776) = 0 (0x0) __sysctl(0x7fffffffe5c0,0x2,0x80083b360,0x7fffffffe5b8,0x0,0x0) = 0 (0x0) sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0) sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe620,0x2,0x80083f3c8,0x7fffffffe638,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe180,0x2,0x80084dff8,0x7fffffffe178,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe1c0,0x2,0x7fffffffe1dc,0x7fffffffe1d0,0x0,0x0) = 0 (0x0) readlink("/etc/malloc.conf",0x7fffffffe210,1024) ERR#2 'No such file or directory' issetugid(0x8007151b5,0x7fffffffe210,0x0,0x2,0xffffff004a09a000,0x7fffffffe1f8) = 0 (0x0) __sysctl(0x7fffffffe110,0x2,0x7fffffffe12c,0x7fffffffe120,0x0,0x0) = 0 (0x0) mmap(0x0,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) mmap(0x0,2097152,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34368458752 (0x800851000) munmap(0x800851000,716800) = 0 (0x0) munmap(0x800a00000,331776) = 0 (0x0) __getcwd(0x800901400,1024) ERR#20 'Not a directory' stat("/",{mode=drwxr-xr-x ,inode=2,size=512,blksize=4096}) = 0 (0x0) lstat(".",{mode=dr-xr-xr-x ,inode=2,size=2,blksize=4096}) = 0 (0x0) stat("..",{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) open("..",O_NONBLOCK,035277024500) = 3 (0x3) fstat(3,{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) fcntl(3,F_SETFD,FD_CLOEXEC) = 0 (0x0) fstatfs(0x3,0x7fffffffe420,0x0,0x0,0x60,0x7fffffffe3d8) = 0 (0x0) fstat(3,{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) koie@guriandgura% truss /bin/pwd __sysctl(0x7fffffffe520,0x2,0x7fffffffe53c,0x7fffffffe530,0x0,0x0) = 0 (0x0) mmap(0x0,560,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365132800 (0x800525000) munmap(0x800525000,560) = 0 (0x0) __sysctl(0x7fffffffe590,0x2,0x80062dde8,0x7fffffffe588,0x0,0x0) = 0 (0x0) mmap(0x0,32768,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34365132800 (0x800525000) issetugid(0x800526015,0x800521669,0x800631730,0x800631700,0x49ac,0x7fffffffe588) = 0 (0x0) open("/etc/libmap.conf",O_RDONLY,0666) ERR#2 'No such file or directory' open("/var/run/ld-elf.so.hints",O_RDONLY,057) = 3 (0x3) read(3,"Ehnt\^A\0\0\0\M^@\0\0\0m\0\0\0\0"...,128) = 128 (0x80) lseek(3,0x80,SEEK_SET) = 128 (0x80) read(3,"/lib:/usr/lib:/usr/lib/compat:/u"...,109) = 109 (0x6d) close(3) = 0 (0x0) access("/lib/libc.so.7",0) = 0 (0x0) open("/lib/libc.so.7",O_RDONLY,030556300) = 3 (0x3) fstat(3,{mode=-r--r--r-- ,inode=16548,size=1159360,blksize=4096}) = 0 (0x0) read(3,"\^?ELF\^B\^A\^A\t\0\0\0\0\0\0\0"...,4096) = 4096 (0x1000) mmap(0x0,2224128,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_NOCORE,3,0x0) = 34366234624 (0x800632000) mprotect(0x80071d000,4096,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0) mprotect(0x80071d000,4096,PROT_READ|PROT_EXEC) = 0 (0x0) mmap(0x80081d000,118784,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED,3,0xeb000) = 34368245760 (0x80081d000) mmap(0x80083a000,94208,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANON,-1,0x0) = 34368364544 (0x80083a000) close(3) = 0 (0x0) sysarch(0x81,0x7fffffffe610,0x80052a088,0x0,0xffffffffffd02c90,0x7fffffffe368) = 0 (0x0) mmap(0x0,288,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) munmap(0x80052d000,288) = 0 (0x0) mmap(0x0,41776,PROT_READ|PROT_WRITE,MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) munmap(0x80052d000,41776) = 0 (0x0) __sysctl(0x7fffffffe5c0,0x2,0x80083b360,0x7fffffffe5b8,0x0,0x0) = 0 (0x0) sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0) sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe620,0x2,0x80083f3c8,0x7fffffffe638,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe180,0x2,0x80084dff8,0x7fffffffe178,0x0,0x0) = 0 (0x0) __sysctl(0x7fffffffe1c0,0x2,0x7fffffffe1dc,0x7fffffffe1d0,0x0,0x0) = 0 (0x0) readlink("/etc/malloc.conf",0x7fffffffe210,1024) ERR#2 'No such file or directory' issetugid(0x8007151b5,0x7fffffffe210,0x0,0x2,0xffffff003bc7e000,0x7fffffffe1f8) = 0 (0x0) __sysctl(0x7fffffffe110,0x2,0x7fffffffe12c,0x7fffffffe120,0x0,0x0) = 0 (0x0) mmap(0x0,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34365165568 (0x80052d000) mmap(0x0,2097152,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0x0) = 34368458752 (0x800851000) munmap(0x800851000,716800) = 0 (0x0) munmap(0x800a00000,331776) = 0 (0x0) __getcwd(0x800901400,1024) ERR#20 'Not a directory' stat("/",{mode=drwxr-xr-x ,inode=2,size=512,blksize=4096}) = 0 (0x0) lstat(".",{mode=dr-xr-xr-x ,inode=2,size=2,blksize=4096}) = 0 (0x0) stat("..",{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) open("..",O_NONBLOCK,035277024500) = 3 (0x3) fstat(3,{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) fcntl(3,F_SETFD,FD_CLOEXEC) = 0 (0x0) fstatfs(0x3,0x7fffffffe420,0x0,0x0,0x60,0x7fffffffe3d8) = 0 (0x0) fstat(3,{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) getdirentries(0x3,0x80090b000,0x1000,0x8009090a8,0xffffff003bc7e000,0x7fffffffe6b8) = 44 (0x2c) lseek(3,0x0,SEEK_SET) = 0 (0x0) close(3) = 0 (0x0) lstat("../",{mode=dr-xr-xr-x ,inode=1,size=3,blksize=4096}) = 0 (0x0) stat("../..",{mode=drwxr-xr-x ,inode=3,size=89,blksize=4096}) = 0 (0x0) open("../..",O_NONBLOCK,035277024500) = 3 (0x3) fstat(3,{mode=drwxr-xr-x ,inode=3,size=89,blksize=4096}) = 0 (0x0) fcntl(3,F_SETFD,FD_CLOEXEC) = 0 (0x0) fstatfs(0x3,0x7fffffffe420,0x0,0x0,0x60,0x7fffffffe3d8) = 0 (0x0) fstat(3,{mode=drwxr-xr-x ,inode=3,size=89,blksize=4096}) = 0 (0x0) getdirentries(0x3,0x80090b000,0x1000,0x8009090a8,0xffffff003bc7e000,0x7fffffffe6b8) = 1772 (0x6ec) getdirentries(0x3,0x80090b000,0x1000,0x8009090a8,0xffffff003bc7e000,0x7fffffffe698) = 0 (0x0) lseek(3,0x0,SEEK_SET) = 0 (0x0) close(3) = 0 (0x0) pwd: write(2,"pwd: ",5) = 5 (0x5) .write(2,".",1) = 1 (0x1) : write(2,": ",2) = 2 (0x2) No such file or directory write(2,"No such file or directory\n",26) = 26 (0x1a) process exit, rval = 1 % How-To-Repeat: cd .zfs/snapshot /bin/pwd
Responsible Changed From-To: freebsd-bugs->pjd Over to ZFS maintainer
State Changed From-To: open->patched not present in recent sources kmacy@delirium [/usr/.zfs/snapshot/foo|22:04|39] pwd /usr/.zfs/snapshot/foo
Responsible Changed From-To: pjd->freebsd-fs With pjd's permission, reassing ZFS-related PRs to freebsd-fs.
State Changed From-To: patched->closed no longer applies kmacy@delirium [~|16:08|103] zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT usr@foo 493M - 14.9G - kmacy@delirium [~|16:08|104] zfs list NAME USED AVAIL REFER MOUNTPOINT usr 27.4G 70.5G 16.5G /usr usr/tmp 10.4G 70.5G 10.4G /usr/tmp kmacy@delirium [~|16:08|105] cd /usr/.zfs/snapshot kmacy@delirium [/usr/.zfs/snapshot|16:09|106] pwd /usr/.zfs/snapshot kmacy@delirium [/usr/.zfs/snapshot|16:09|107] ls foo kmacy@delirium [/usr/.zfs/snapshot|16:09|108] ls foo X11R6 crash include libexec ports tmp bar foo lib local sbin trash bin games lib32 local.tgz share compat home libdata obj src kmacy@delirium [/usr/.zfs/snapshot|16:09|109] cd foo kmacy@delirium [/usr/.zfs/snapshot/foo|16:09|110] pwd /usr/.zfs/snapshot/foo kmacy@delirium [/usr/.zfs/snapshot/foo|16:09|111]
Hi, On 2009-05-28, kmacy@FreeBSD.org wrote: > no longer applies > > kmacy@delirium [/usr/.zfs/snapshot|16:09|109] cd foo > kmacy@delirium [/usr/.zfs/snapshot/foo|16:09|110] pwd > /usr/.zfs/snapshot/foo The problem still exists. It seems that you used shell built-in pwd which doesn't call getcwd(3) but uses it's own bookkeeping for working directory. The problem was discussed on -fs in February and I described it in this message: http://lists.freebsd.org/pipermail/freebsd-fs/2009-February/005671.html Since then __getcwd() has improved because vop_stdvptocnp() can now use readdir("..") to resolve component names. However it can't cross mount points and because zfs snapshot are mounted the problem is still there. -- Jaakko