Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Mar 2013 14:10:26 +0400
From:      Ilia Noskov <phantom@phantom.su>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: should vn_fullpath1() ever return a path with "." in it?
Message-ID:  <5141A212.9050909@phantom.su>
In-Reply-To: <20130314090847.GH3794@kib.kiev.ua>
References:  <1208475167.3432384.1362099531469.JavaMail.root@erie.cs.uoguelph.ca> <51417C47.8010304@phantom.su> <20130314090847.GH3794@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
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!



-- 
      Best Regards,

      Ilia Noskov
      Regional Network Information Center (RU-CENTER)
      phone: +7 495 737-0601
      fax: +7 495 737-0602
      http://www.nic.ru



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5141A212.9050909>