aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrasad Joshi <[email protected]>2011-06-25 15:06:37 +0100
committerBrian Behlendorf <[email protected]>2011-06-27 09:59:52 -0700
commit218b8eafbdcb9bc19fc5a252fdd411fde11bca48 (patch)
tree932881ad78d84aaf61c34144867dbba378817e9e
parentb312979252c5b566d2f59febcda67f309637e18c (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
-rw-r--r--module/zfs/zfs_vnops.c8
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) ||