aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/udf/file.c
diff options
context:
space:
mode:
authorMichal Marek <mmarek@suse.cz>2010-08-20 13:53:08 +0200
committerMichal Marek <mmarek@suse.cz>2010-08-20 13:53:08 +0200
commite981b060767b3c4ac9393ad8d2558d648e35dfcb (patch)
tree9c05eaec3072be3645dda61d35085d152b9d5954 /fs/udf/file.c
parentfixes for using make 3.82 (diff)
parentLinux 2.6.36-rc1 (diff)
downloadwireguard-linux-e981b060767b3c4ac9393ad8d2558d648e35dfcb.tar.xz
wireguard-linux-e981b060767b3c4ac9393ad8d2558d648e35dfcb.zip
Merge commit 'v2.6.36-rc1' into kbuild/rc-fixes
Diffstat (limited to 'fs/udf/file.c')
-rw-r--r--fs/udf/file.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/fs/udf/file.c b/fs/udf/file.c
index 94e06d6bddbd..66b9e7e7e4c5 100644
--- a/fs/udf/file.c
+++ b/fs/udf/file.c
@@ -36,7 +36,6 @@
#include <linux/pagemap.h>
#include <linux/buffer_head.h>
#include <linux/aio.h>
-#include <linux/smp_lock.h>
#include "udf_i.h"
#include "udf_sb.h"
@@ -228,6 +227,28 @@ const struct file_operations udf_file_operations = {
.llseek = generic_file_llseek,
};
+static int udf_setattr(struct dentry *dentry, struct iattr *attr)
+{
+ struct inode *inode = dentry->d_inode;
+ int error;
+
+ error = inode_change_ok(inode, attr);
+ if (error)
+ return error;
+
+ if ((attr->ia_valid & ATTR_SIZE) &&
+ attr->ia_size != i_size_read(inode)) {
+ error = vmtruncate(inode, attr->ia_size);
+ if (error)
+ return error;
+ }
+
+ setattr_copy(inode, attr);
+ mark_inode_dirty(inode);
+ return 0;
+}
+
const struct inode_operations udf_file_inode_operations = {
+ .setattr = udf_setattr,
.truncate = udf_truncate,
};