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 6e450e01a1b..66b9e7e7e4c 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -227,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,  };  |