From nobody@FreeBSD.org  Wed Nov 21 09:06:35 2007
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 5939A16A420
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 21 Nov 2007 09:06:35 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 4FD6F13C4AC
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 21 Nov 2007 09:06:35 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.1/8.14.1) with ESMTP id lAL95nvZ003594
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 21 Nov 2007 09:05:49 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.1/8.14.1/Submit) id lAL95nVM003593;
	Wed, 21 Nov 2007 09:05:49 GMT
	(envelope-from nobody)
Message-Id: <200711210905.lAL95nVM003593@www.freebsd.org>
Date: Wed, 21 Nov 2007 09:05:49 GMT
From: KOIE Hidetaka <koie@suri.co.jp>
To: freebsd-gnats-submit@FreeBSD.org
Subject: /bin/pwd fails under .zfs/snapshot
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         118170
>Category:       kern
>Synopsis:       [zfs] /bin/pwd fails under .zfs/snapshot
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-fs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Nov 21 09:10:02 UTC 2007
>Closed-Date:    Thu May 28 23:10:25 UTC 2009
>Last-Modified:  Fri May 29 14:00:11 UTC 2009
>Originator:     KOIE Hidetaka
>Release:        current
>Organization:
Surigiken
>Environment:
FreeBSD guriandgura 8.0-CURRENT FreeBSD 8.0-CURRENT #2: Fri Nov 16 14:33:17 JST 2007     koie@guria\
ndgura:/usr/obj/usr/src/sys/GURIANDGURA  amd64
>Description:
/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

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->pjd 
Responsible-Changed-By: remko 
Responsible-Changed-When: Wed Nov 21 09:15:26 UTC 2007 
Responsible-Changed-Why:  
Over to ZFS maintainer 


http://www.freebsd.org/cgi/query-pr.cgi?pr=118170 
State-Changed-From-To: open->patched 
State-Changed-By: kmacy 
State-Changed-When: Sun May 17 05:04:10 UTC 2009 
State-Changed-Why:  


not present in recent sources 

kmacy@delirium [/usr/.zfs/snapshot/foo|22:04|39] pwd 
/usr/.zfs/snapshot/foo 


http://www.freebsd.org/cgi/query-pr.cgi?pr=118170 
Responsible-Changed-From-To: pjd->freebsd-fs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Thu May 28 22:20:57 UTC 2009 
Responsible-Changed-Why:  
With pjd's permission, reassing ZFS-related PRs to freebsd-fs. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=118170 
State-Changed-From-To: patched->closed 
State-Changed-By: kmacy 
State-Changed-When: Thu May 28 23:09:37 UTC 2009 
State-Changed-Why:  


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]  



http://www.freebsd.org/cgi/query-pr.cgi?pr=118170 

From: Jaakko Heinonen <jh@saunalahti.fi>
To: kmacy@FreeBSD.org
Cc: koie@suri.co.jp, bug-followup@FreeBSD.org
Subject: Re: kern/118170: [zfs] /bin/pwd fails under .zfs/snapshot
Date: Fri, 29 May 2009 16:58:50 +0300

 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
>Unformatted:
