|
@@ -1950,8 +1950,9 @@ int may_open(struct path *path, int acc_mode, int flag)
|
|
|
return break_lease(inode, flag);
|
|
|
}
|
|
|
|
|
|
-static int handle_truncate(struct path *path)
|
|
|
+static int handle_truncate(struct file *filp)
|
|
|
{
|
|
|
+ struct path *path = &filp->f_path;
|
|
|
struct inode *inode = path->dentry->d_inode;
|
|
|
int error = get_write_access(inode);
|
|
|
if (error)
|
|
@@ -1965,7 +1966,7 @@ static int handle_truncate(struct path *path)
|
|
|
if (!error) {
|
|
|
error = do_truncate(path->dentry, 0,
|
|
|
ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
|
|
|
- NULL);
|
|
|
+ filp);
|
|
|
}
|
|
|
put_write_access(inode);
|
|
|
return error;
|
|
@@ -2063,7 +2064,7 @@ static struct file *finish_open(struct nameidata *nd,
|
|
|
}
|
|
|
if (!IS_ERR(filp)) {
|
|
|
if (will_truncate) {
|
|
|
- error = handle_truncate(&nd->path);
|
|
|
+ error = handle_truncate(filp);
|
|
|
if (error) {
|
|
|
fput(filp);
|
|
|
filp = ERR_PTR(error);
|