aboutsummaryrefslogtreecommitdiffstats
path: root/fs/namei.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 13:27:28 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 13:27:28 -0500
commitb2034d474b7e1e8578bd5c2977024b51693269d9 (patch)
treee43969bf7c2ba89884c2580f56978826f1014520 /fs/namei.c
parent27d189c02ba25851973c8582e419c0bded9f7e5b (diff)
parent924241575a85249b9d410e38f5b2fcad9035e45c (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (41 commits) fs: add documentation on fallocate hole punching Gfs2: fail if we try to use hole punch Btrfs: fail if we try to use hole punch Ext4: fail if we try to use hole punch Ocfs2: handle hole punching via fallocate properly XFS: handle hole punching via fallocate properly fs: add hole punching to fallocate vfs: pass struct file to do_truncate on O_TRUNC opens (try #2) fix signedness mess in rw_verify_area() on 64bit architectures fs: fix kernel-doc for dcache::prepend_path fs: fix kernel-doc for dcache::d_validate sanitize ecryptfs ->mount() switch afs move internal-only parts of ncpfs headers to fs/ncpfs switch ncpfs switch 9p pass default dentry_operations to mount_pseudo() switch hostfs switch affs switch configfs ...
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 24ece10470b6..0b14f6910fc6 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1950,8 +1950,9 @@ int may_open(struct path *path, int acc_mode, int flag)
1950 return break_lease(inode, flag); 1950 return break_lease(inode, flag);
1951} 1951}
1952 1952
1953static int handle_truncate(struct path *path) 1953static int handle_truncate(struct file *filp)
1954{ 1954{
1955 struct path *path = &filp->f_path;
1955 struct inode *inode = path->dentry->d_inode; 1956 struct inode *inode = path->dentry->d_inode;
1956 int error = get_write_access(inode); 1957 int error = get_write_access(inode);
1957 if (error) 1958 if (error)
@@ -1965,7 +1966,7 @@ static int handle_truncate(struct path *path)
1965 if (!error) { 1966 if (!error) {
1966 error = do_truncate(path->dentry, 0, 1967 error = do_truncate(path->dentry, 0,
1967 ATTR_MTIME|ATTR_CTIME|ATTR_OPEN, 1968 ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
1968 NULL); 1969 filp);
1969 } 1970 }
1970 put_write_access(inode); 1971 put_write_access(inode);
1971 return error; 1972 return error;
@@ -2063,7 +2064,7 @@ static struct file *finish_open(struct nameidata *nd,
2063 } 2064 }
2064 if (!IS_ERR(filp)) { 2065 if (!IS_ERR(filp)) {
2065 if (will_truncate) { 2066 if (will_truncate) {
2066 error = handle_truncate(&nd->path); 2067 error = handle_truncate(filp);
2067 if (error) { 2068 if (error) {
2068 fput(filp); 2069 fput(filp);
2069 filp = ERR_PTR(error); 2070 filp = ERR_PTR(error);