Al Viro
a3fbbde70a
VFS: we need to set LOOKUP_JUMPED on mountpoint crossing
...
Mountpoint crossing is similar to following procfs symlinks - we do
not get ->d_revalidate() called for dentry we have arrived at, with
unpleasant consequences for NFS4.
Simple way to reproduce the problem in mainline:
cat >/tmp/a.c <<'EOF'
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
main()
{
struct flock fl = {.l_type = F_RDLCK, .l_whence = SEEK_SET, .l_len = 1};
if (fcntl(0, F_SETLK, &fl))
perror("setlk");
}
EOF
cc /tmp/a.c -o /tmp/test
then on nfs4:
mount --bind file1 file2
/tmp/test < file1 # ok
/tmp/test < file2 # spews "setlk: No locks available"...
What happens is the missing call of ->d_revalidate() after mountpoint
crossing and that's where NFS4 would issue OPEN request to server.
The fix is simple - treat mountpoint crossing the same way we deal with
following procfs-style symlinks. I.e. set LOOKUP_JUMPED...
Cc: stable@kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-07 14:58:06 -08:00
..
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-06 20:03:41 -08:00
2011-07-20 01:44:21 -04:00
2011-11-05 21:10:12 -07:00
2011-11-07 09:56:22 -08:00
2011-11-02 12:53:43 +01:00
2011-09-27 18:08:04 +02:00
2011-07-17 23:22:02 -04:00
2011-08-22 17:41:48 -07:00
2011-11-02 12:53:43 +01:00
2011-07-25 22:49:19 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-06 19:44:47 -08:00
2011-03-15 02:21:44 -04:00
2011-11-02 11:41:01 -07:00
2011-11-02 11:41:01 -07:00
2011-11-06 19:02:23 -08:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-07-21 10:59:16 -07:00
2011-11-06 19:44:47 -08:00
2011-11-06 19:44:47 -08:00
2011-11-02 16:07:27 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 11:41:01 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 16:07:27 -07:00
2011-11-01 19:04:59 -04:00
2011-11-01 19:09:18 -04:00
2011-11-07 09:11:16 -08:00
2011-11-06 19:44:47 -08:00
2011-09-14 08:21:48 -04:00
2011-11-06 19:44:47 -08:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-06 19:44:47 -08:00
2011-03-31 11:26:23 -03:00
2011-11-06 19:44:47 -08:00
2011-11-02 12:53:43 +01:00
2011-07-26 16:49:47 -07:00
2011-11-02 12:53:43 +01:00
2011-11-06 19:44:47 -08:00
2011-07-26 13:05:28 -04:00
2011-11-02 12:53:43 +01:00
2011-10-31 17:30:54 -07:00
2011-11-06 19:44:47 -08:00
2011-10-12 09:17:24 -07:00
2011-11-02 12:53:43 +01:00
2011-11-06 19:02:23 -08:00
2011-11-02 16:06:58 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-04 16:48:37 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-07 08:52:19 -08:00
2011-11-02 11:41:01 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:43 +01:00
2011-11-02 16:07:03 -07:00
2011-07-26 12:57:09 -04:00
2011-08-09 10:31:03 +10:00
2011-07-20 20:47:59 -04:00
2011-07-20 01:43:10 -04:00
2011-11-02 16:06:58 -07:00
2011-05-03 10:10:51 +10:00
2011-11-02 12:53:43 +01:00
2011-10-31 19:30:31 -04:00
2011-10-24 16:11:30 +02:00
2011-11-04 17:22:14 -07:00
2011-11-06 19:02:23 -08:00
2011-08-07 22:24:41 -07:00
2011-10-31 17:30:44 -07:00
2011-11-07 10:54:10 -08:00
2011-05-31 16:33:35 +02:00
2011-10-28 14:58:58 +02:00
2011-05-25 08:39:26 -07:00
2011-02-21 15:07:04 -08:00
2011-10-31 17:30:57 -07:00
2011-10-31 17:30:45 -07:00
2011-03-23 19:47:13 -07:00
2011-04-14 16:06:56 -07:00
2011-03-21 00:16:09 -04:00
2011-07-26 16:49:47 -07:00
2011-04-28 11:28:20 -07:00
2011-04-17 10:42:01 -07:00
2011-10-31 00:33:36 +08:00
2011-08-01 02:10:06 -04:00
2011-11-02 12:53:43 +01:00
2011-07-20 01:44:38 -04:00
2011-03-21 00:16:08 -04:00
2011-10-31 19:30:31 -04:00
2011-10-31 17:30:45 -07:00
2011-11-02 12:53:43 +01:00
2011-10-25 15:42:01 +02:00
2011-10-27 08:36:51 +02:00
2011-05-25 08:39:26 -07:00
2011-05-26 10:01:43 -06:00
2011-11-07 14:58:06 -08:00
2011-10-28 13:55:08 +02:00
2011-10-28 14:59:00 +02:00
2011-10-31 17:30:51 -07:00
2011-10-28 14:58:54 +02:00
2011-10-31 17:30:44 -07:00
2011-03-21 00:16:08 -04:00
2011-07-25 20:57:11 -07:00
2011-11-02 12:53:43 +01:00
2011-11-02 12:53:42 +01:00
2011-11-04 18:15:59 -07:00
2011-11-02 12:53:42 +01:00
2011-10-31 00:33:36 +08:00
2011-06-14 11:46:14 +02:00
2011-03-23 19:47:13 -07:00
2011-07-18 12:29:43 -04:00