diff options
Diffstat (limited to 'fs/udf/file.c')
| -rw-r--r-- | fs/udf/file.c | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/udf/file.c b/fs/udf/file.c index 6e450e01a1bb..66b9e7e7e4c5 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c  | |||
| @@ -227,6 +227,28 @@ const struct file_operations udf_file_operations = { | |||
| 227 | .llseek = generic_file_llseek, | 227 | .llseek = generic_file_llseek, | 
| 228 | }; | 228 | }; | 
| 229 | 229 | ||
| 230 | static int udf_setattr(struct dentry *dentry, struct iattr *attr) | ||
| 231 | { | ||
| 232 | struct inode *inode = dentry->d_inode; | ||
| 233 | int error; | ||
| 234 | |||
| 235 | error = inode_change_ok(inode, attr); | ||
| 236 | if (error) | ||
| 237 | return error; | ||
| 238 | |||
| 239 | if ((attr->ia_valid & ATTR_SIZE) && | ||
| 240 | attr->ia_size != i_size_read(inode)) { | ||
| 241 | error = vmtruncate(inode, attr->ia_size); | ||
| 242 | if (error) | ||
| 243 | return error; | ||
| 244 | } | ||
| 245 | |||
| 246 | setattr_copy(inode, attr); | ||
| 247 | mark_inode_dirty(inode); | ||
| 248 | return 0; | ||
| 249 | } | ||
| 250 | |||
| 230 | const struct inode_operations udf_file_inode_operations = { | 251 | const struct inode_operations udf_file_inode_operations = { | 
| 252 | .setattr = udf_setattr, | ||
| 231 | .truncate = udf_truncate, | 253 | .truncate = udf_truncate, | 
| 232 | }; | 254 | }; | 
