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

next in thread | previous in thread | raw e-mail | index | archive | help

--IcaJnnNV5xAPxpBT
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Mar 15, 2013 at 05:21:18PM +0400, Ilia Noskov wrote:
> 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=3D0
> >>> sysctl debug.disablefullpath=3D0
> >>>
> >>> # 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=3D98, ino=3D2, mode=3Ddrwxr-=
xr-x ,
> >>> nlink=3D19, uid=3D0, gid=3D0, rdev=3D2120, atime=3D1363244893, stime=
=3D1362653279,
> >>> ctime=3D1362653279, birthtime=3D1200836451, size=3D1024, blksize=3D16=
384,
> >>> blocks=3D4, flags=3D0x0 }
> >>>    19527 pwd      RET   stat 0
> >>>    19527 pwd      CALL  lstat(0x80094779c,0x7fffffffd940)
> >>>    19527 pwd      NAMI  "."
> >>>    19527 pwd      STRU  struct stat {dev=3D1230702064, ino=3D145,
> >>> mode=3Ddrwxr-xr-x , nlink=3D2, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244672.246785874, stime=3D1363244792.864201338,
> >>> ctime=3D1363244792.864201338, birthtime=3D-1, size=3D3, blksize=3D409=
6,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    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=3D1230702064, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244665.232140704, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    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=3D1230702064, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244665.232140704, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    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=3D1230702064, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244665.232140704, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    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=3D973143810, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D4948, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244767.460164771, stime=3D1363172100.380266923,
> >>> ctime=3D1363172100.380266923, birthtime=3D-1, size=3D4948, blksize=3D=
4096,
> >>> blocks=3D713, flags=3D0x0 }
> >>>    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=3D973143810, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D4948, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363244767.460164771, stime=3D1363172100.380266923,
> >>> ctime=3D1363172100.380266923, birthtime=3D-1, size=3D4948, blksize=3D=
4096,
> >>> blocks=3D713, flags=3D0x0 }
> >>>    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=3D1774902232, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363009687.040357529, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    19527 pwd      RET   fstatat 0
> >>>    19527 pwd      CALL  fstatat(0x4,0x80101804c,0x7fffffffd940,0x200)
> >>>    19527 pwd      NAMI  "user2289"
> >>>    19527 pwd      STRU  struct stat {dev=3D1988229825, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363009687.040357529, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    19527 pwd      RET   fstatat 0
> >>>    19527 pwd      CALL  fstatat(0x4,0x801018068,0x7fffffffd940,0x200)
> >>>    19527 pwd      NAMI  "user4761"
> >>>    19527 pwd      STRU  struct stat {dev=3D2438657130, ino=3D4,
> >>> mode=3Ddrwxr-xr-x , nlink=3D9, uid=3D0, gid=3D0, rdev=3D4294967295,
> >>> atime=3D1363009687.040357529, stime=3D1363010116.496298252,
> >>> ctime=3D1363010116.496298252, birthtime=3D-1, size=3D14, blksize=3D40=
96,
> >>> blocks=3D3, flags=3D0x0 }
> >>>    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 "=
=2E"
> >> 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!
> >
>=20
> Yes.
> On latest r248313 similar situation - if path contains "." then=20
> nfsclient get stat of all directories in /home.

What path ?

Did you read the description of the situation when r248313 returns
ENOENT to delegate the resolving to usermode ? Can you confirm that
this is your situation ?

--IcaJnnNV5xAPxpBT
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iQIcBAEBAgAGBQJRQylVAAoJEJDCuSvBvK1BslAP/A28vT8tyv6iYpIKHO0Vthii
TKDhLNiCZMw/9udsddqgJfg2IbiqtNH+L/8KqHdpk5pkF7emfolQaeINY4AdxDvo
/0x6imNAGBbLkwIpyNGHJstLfqmF8FWBI9wu26wbIIV2Lv0darWkm1qzulJzC8B7
k1NIb5h2Y5SzwjG51ZOxXz5xikvpruDZnDIHKC/wnE+kqu1cy0kd/1aem8+3B5CT
J3yc95R+tMiYKkNssUxPgLaobSRF//k1H4uKjtYiEB+ceXoDuwaE7cXjmqrSHpnw
jgwdXZWE3b57pwv6Xs7bmAVLsWLTwqm0Qr9R7FcFcC8or9vNDz7dng6OayOS/zG/
tGYfCOldjDzznDQgF7gBDlUiqnBIy1pdwFA7asiwr89JiYv2055n67rxZGUJh590
enjhsCaKQSHONvskARmP+ETxqYHPnsUocku1ebJxkeQV0HQp/qHqnswhk3Sy4yqF
gNkKLyipgjUXsV1ryre3zWi8GIaEq4LRNi5BEOkBcPsZHohwZj2N02wnaUQcr6Bi
Ynup8pwerxOeBG1O9TiLMD/8VP6jM3mOD/UHtdE9cUFUACju+EMHhRtBo7yJdrXL
h/4GiK9Xvf1L3mHMNJv7Yg+f3xvEcGovP3pjYhNAjyusxntT0dHaJTMLgnA+Cf0Z
o5j6WYrqS/R0wjrofIOj
=Bk3F
-----END PGP SIGNATURE-----

--IcaJnnNV5xAPxpBT--



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