diff options
author | Prasad Joshi <[email protected]> | 2011-06-25 15:06:37 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-06-27 09:59:52 -0700 |
commit | 218b8eafbdcb9bc19fc5a252fdd411fde11bca48 (patch) | |
tree | 932881ad78d84aaf61c34144867dbba378817e9e /module | |
parent | b312979252c5b566d2f59febcda67f309637e18c (diff) |
Use truncate_setsize in zfs_setattr
According to Linux kernel commit 2c27c65e, using truncate_setsize in
setattr simplifies the code. Therefore, the patch replaces the call
to vmtruncate() with truncate_setsize().
zfs_setattr uses zfs_freesp to free the disk space belonging to the
file. As truncate_setsize may release the page cache and flushing
the dirty data to disk, it must be called before the zfs_freesp.
Suggested-by: Brian Behlendorf <[email protected]>
Signed-off-by: Prasad Joshi <[email protected]>
Closes #255
Diffstat (limited to 'module')
-rw-r--r-- | module/zfs/zfs_vnops.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 5b47cba7f..86bef25fb 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -72,6 +72,7 @@ #include <sys/kidmap.h> #include <sys/cred.h> #include <sys/attr.h> +#include <sys/zpl.h> /* * Programming rules. @@ -2433,6 +2434,8 @@ top: if (err) goto out3; + truncate_setsize(ip, vap->va_size); + /* * XXX - Note, we are not providing any open * mode flags here (like FNDELAY), so we may @@ -2443,11 +2446,6 @@ top: err = zfs_freesp(zp, vap->va_size, 0, 0, FALSE); if (err) goto out3; - - /* Careful negative Linux return code here */ - err = -vmtruncate(ip, vap->va_size); - if (err) - goto out3; } if (mask & (ATTR_ATIME|ATTR_MTIME) || |