should vn_fullpath1() ever return a path with "." in it?
Ilia Noskov
phantom at phantom.su
Fri Mar 15 13:21:27 UTC 2013
On 03/14/2013 02:10 PM, Ilia Noskov wrote:
> On 03/14/2013 01:08 PM, Konstantin Belousov wrote:
>> On Thu, Mar 14, 2013 at 11:29:11AM +0400, Noskov Ilia wrote:
>>> Strange behavior on nfs-client after apply this patch:
>>>
>>> sysctl debug.disablecwd=0
>>> sysctl debug.disablefullpath=0
>>>
>>> # mount -v -t nfs
>>> 192.168.168.1:/pool on /home (nfs, noatime, nfsv4acls, fsid
>>> 02ff003a3a000000)
>>> # ls /home | wc -l
>>> 4946
>>> # cd /home/user6308/.ro
>>> # time pwd
>>> /home/user6308/.ro
>>> 0.008u 0.269s 0:08.47 3.0% 4+157k 0+0io 0pf+0w
>>> # ktrace -t+ -i pwd
>>>
>>>
>>> ktrace.out is big (1MB). Attach or not?
>>>
>>>
>>>
>>> A small piece of trace:
>>> 19527 pwd CALL
>>> mmap(0,0x400000,0x3<PROT_READ|PROT_WRITE>,0x1002<MAP_PRIVATE|MAP_ANON>,0xffffffff,0)
>>>
>>> 19527 pwd RET mmap 34376515584/0x801000000
>>> 19527 pwd CALL __getcwd(0x801006400,0x400)
>>> 19527 pwd NAMI ".."
>>> 19527 pwd NAMI ".."
>>> 19527 pwd RET __getcwd -1 errno 2 No such file or directory
>>> 19527 pwd CALL stat(0x800947a14,0x7fffffffd940)
>>> 19527 pwd NAMI "/"
>>> 19527 pwd STRU struct stat {dev=98, ino=2, mode=drwxr-xr-x ,
>>> nlink=19, uid=0, gid=0, rdev=2120, atime=1363244893, stime=1362653279,
>>> ctime=1362653279, birthtime=1200836451, size=1024, blksize=16384,
>>> blocks=4, flags=0x0 }
>>> 19527 pwd RET stat 0
>>> 19527 pwd CALL lstat(0x80094779c,0x7fffffffd940)
>>> 19527 pwd NAMI "."
>>> 19527 pwd STRU struct stat {dev=1230702064, ino=145,
>>> mode=drwxr-xr-x , nlink=2, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244672.246785874, stime=1363244792.864201338,
>>> ctime=1363244792.864201338, birthtime=-1, size=3, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET lstat 0
>>> 19527 pwd CALL openat(0xffffff9c,0x80094779b,0x100000,0x2)
>>> 19527 pwd NAMI ".."
>>> 19527 pwd RET openat 3
>>> 19527 pwd CALL fstat(0x3,0x7fffffffd880)
>>> 19527 pwd STRU struct stat {dev=1230702064, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244665.232140704, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstat 0
>>> 19527 pwd CALL fcntl(0x3,F_SETFD,FD_CLOEXEC)
>>> 19527 pwd RET fcntl 0
>>> 19527 pwd CALL fstatfs(0x3,0x7fffffffd660)
>>> 19527 pwd RET fstatfs 0
>>> 19527 pwd CALL fstat(0x3,0x7fffffffd940)
>>> 19527 pwd STRU struct stat {dev=1230702064, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244665.232140704, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstat 0
>>> 19527 pwd CALL
>>> getdirentries(0x3,0x801018000,0x1000,0x8010160a8)
>>> 19527 pwd RET getdirentries 4096/0x1000
>>> 19527 pwd CALL fstat(0x3,0x7fffffffd940)
>>> 19527 pwd STRU struct stat {dev=1230702064, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244665.232140704, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstat 0
>>> 19527 pwd CALL openat(0x3,0x80094779b,0x100000,0)
>>> 19527 pwd NAMI ".."
>>> 19527 pwd RET openat 4
>>> [..............................]
>>> 19527 pwd CALL madvise(0x801016000,0x1000,MADV_FREE)
>>> 19527 pwd RET madvise 0
>>> 19527 pwd CALL madvise(0x801018000,0x2000,MADV_FREE)
>>> 19527 pwd RET madvise 0
>>> 19527 pwd CALL close(0x3)
>>> 19527 pwd RET close 0
>>> 19527 pwd CALL fstat(0x4,0x7fffffffd880)
>>> 19527 pwd STRU struct stat {dev=973143810, ino=4,
>>> mode=drwxr-xr-x , nlink=4948, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244767.460164771, stime=1363172100.380266923,
>>> ctime=1363172100.380266923, birthtime=-1, size=4948, blksize=4096,
>>> blocks=713, flags=0x0 }
>>> 19527 pwd RET fstat 0
>>> 19527 pwd CALL fcntl(0x4,F_SETFD,FD_CLOEXEC)
>>> 19527 pwd RET fcntl 0
>>> 19527 pwd CALL fstatfs(0x4,0x7fffffffd660)
>>> 19527 pwd RET fstatfs 0
>>> 19527 pwd CALL fstat(0x4,0x7fffffffd940)
>>> 19527 pwd STRU struct stat {dev=973143810, ino=4,
>>> mode=drwxr-xr-x , nlink=4948, uid=0, gid=0, rdev=4294967295,
>>> atime=1363244767.460164771, stime=1363172100.380266923,
>>> ctime=1363172100.380266923, birthtime=-1, size=4948, blksize=4096,
>>> blocks=713, flags=0x0 }
>>> 19527 pwd RET fstat 0
>>> 19527 pwd CALL
>>> getdirentries(0x4,0x801018000,0x1000,0x8010160a8)
>>> 19527 pwd RET getdirentries 4096/0x1000
>>> 19527 pwd CALL fstatat(0x4,0x801018030,0x7fffffffd940,0x200)
>>> 19527 pwd NAMI "user6158"
>>> 19527 pwd STRU struct stat {dev=1774902232, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363009687.040357529, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstatat 0
>>> 19527 pwd CALL fstatat(0x4,0x80101804c,0x7fffffffd940,0x200)
>>> 19527 pwd NAMI "user2289"
>>> 19527 pwd STRU struct stat {dev=1988229825, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363009687.040357529, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstatat 0
>>> 19527 pwd CALL fstatat(0x4,0x801018068,0x7fffffffd940,0x200)
>>> 19527 pwd NAMI "user4761"
>>> 19527 pwd STRU struct stat {dev=2438657130, ino=4,
>>> mode=drwxr-xr-x , nlink=9, uid=0, gid=0, rdev=4294967295,
>>> atime=1363009687.040357529, stime=1363010116.496298252,
>>> ctime=1363010116.496298252, birthtime=-1, size=14, blksize=4096,
>>> blocks=3, flags=0x0 }
>>> 19527 pwd RET fstatat 0
>>> 19527 pwd CALL fstatat(0x4,0x801018084,0x7fffffffd940,0x200)
>>> 19527 pwd NAMI "user6055"
>>> [.........................................]
>>>
>>> and next get stat of all directories in /home
>>
>> Slightly different version of the patch was committed as r247560.
>>
>> The situation could only happen if the parent directory contains the "."
>> entry with inode number equal to the inode number of the subdirectory.
>> Can you confirm that this is your case ?
>>
>
> Yes, it is.
> I'll try again on the latest snapshot. Thanks!
>
Yes.
On latest r248313 similar situation - if path contains "." then
nfsclient get stat of all directories in /home.
--
Best Regards,
Ilia Noskov
Regional Network Information Center (RU-CENTER)
phone: +7 495 737-0601
fax: +7 495 737-0602
http://www.nic.ru
More information about the freebsd-fs
mailing list