1
0
Files
linux/fs
Miklos Szeredi 0ef97dcfce nfs: don't open in ->d_revalidate
NFSv4 can't do reliable opens in d_revalidate, since it cannot know whether a
mount needs to be followed or not.  It does check d_mountpoint() on the dentry,
which can result in a weird error if the VFS found that the mount does not in
fact need to be followed, e.g.:

  # mount --bind /mnt/nfs /mnt/nfs-clone
  # echo something > /mnt/nfs/tmp/bar
  # echo x > /tmp/file
  # mount --bind /tmp/file /mnt/nfs-clone/tmp/bar
  # cat  /mnt/nfs/tmp/bar
  cat: /mnt/nfs/tmp/bar: Not a directory

Which should, by any sane filesystem, result in "something" being printed.

So instead do the open in f_op->open() and in the unlikely case that the cached
dentry turned out to be invalid, drop the dentry and return EOPENSTALE to let
the VFS retry.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2012-06-01 12:12:02 -04:00
..
2012-05-29 23:28:34 -04:00
2012-05-29 23:28:34 -04:00
2012-05-29 23:28:33 -04:00
2012-05-29 23:28:33 -04:00
2012-05-29 23:28:33 -04:00
2012-05-29 23:28:33 -04:00
2012-05-29 23:28:33 -04:00
2012-05-30 21:04:52 -04:00
2012-04-13 13:50:52 -04:00
2012-06-01 12:12:02 -04:00
2012-05-29 23:28:33 -04:00
2012-05-29 23:28:40 -04:00
2012-03-20 21:29:52 -04:00
2012-03-20 21:29:38 -04:00
2012-05-29 23:28:32 -04:00
2012-05-29 23:28:33 -04:00
2012-03-20 21:29:46 -04:00
2012-03-20 21:29:46 -04:00
2012-05-29 23:28:41 -04:00
2012-06-01 12:12:00 -04:00
2012-05-29 23:28:31 -04:00
2012-03-20 21:29:38 -04:00
2012-05-29 23:28:41 -04:00
2012-05-29 23:28:41 -04:00
2012-05-29 23:28:29 -04:00