]> git.baikalelectronics.ru Git - kernel.git/commit
vfs: pass struct file to do_truncate on O_TRUNC opens (try #2)
authorJeff Layton <jlayton@redhat.com>
Tue, 7 Dec 2010 21:19:50 +0000 (16:19 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 13 Jan 2011 01:06:59 +0000 (20:06 -0500)
commit453c164780e799b6b98160e7510573700095892a
treecf1010ee6361e8bcd98ea2f29fa899fa52bf801d
parent7d3023163d836841c73cb75d92e888d10cfdc6df
vfs: pass struct file to do_truncate on O_TRUNC opens (try #2)

When a file is opened with O_TRUNC, the truncate processing is handled
by handle_truncate(). This function however doesn't receive any info
about the newly instantiated filp, and therefore can't pass that info
along so that the setattr can use it.

This makes NFSv4 misbehave. The client does an open and gets a valid
stateid, and then doesn't use that stateid on the subsequent truncate.
It uses the zero-stateid instead. Most servers ignore this fact and
just do the truncate anyway, but some don't like it (notably, RHEL4).

It seems more correct that since we have a fully instantiated file at
the time that handle_truncate is called, that we pass that along so
that the truncate operation can properly use it.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c