]> err.no Git - linux-2.6/blobdiff - fs/open.c
Merge master.kernel.org:/home/rmk/linux-2.6-mmc
[linux-2.6] / fs / open.c
index 2835f096c683f6629ccd36cd763af9830002a00e..6e8136751e9a49e1c89f47eb1957ed9f635281a7 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -194,7 +194,7 @@ out:
        return error;
 }
 
-int do_truncate(struct dentry *dentry, loff_t length)
+int do_truncate(struct dentry *dentry, loff_t length, struct file *filp)
 {
        int err;
        struct iattr newattrs;
@@ -205,6 +205,10 @@ int do_truncate(struct dentry *dentry, loff_t length)
 
        newattrs.ia_size = length;
        newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
+       if (filp) {
+               newattrs.ia_file = filp;
+               newattrs.ia_valid |= ATTR_FILE;
+       }
 
        down(&dentry->d_inode->i_sem);
        err = notify_change(dentry, &newattrs);
@@ -262,7 +266,7 @@ static inline long do_sys_truncate(const char __user * path, loff_t length)
        error = locks_verify_truncate(inode, NULL, length);
        if (!error) {
                DQUOT_INIT(inode);
-               error = do_truncate(nd.dentry, length);
+               error = do_truncate(nd.dentry, length, NULL);
        }
        put_write_access(inode);
 
@@ -314,7 +318,7 @@ static inline long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
 
        error = locks_verify_truncate(inode, file, length);
        if (!error)
-               error = do_truncate(dentry, length);
+               error = do_truncate(dentry, length, file);
 out_putf:
        fput(file);
 out: