should vn_fullpath1() ever return a path with "." in it?

Konstantin Belousov kostikbel at gmail.com
Thu Mar 14 09:09:01 UTC 2013


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 ?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20130314/55082879/attachment.sig>


More information about the freebsd-fs mailing list