diff options
Diffstat (limited to 'fs/hugetlbfs')
-rw-r--r-- | fs/hugetlbfs/inode.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index a4e9a7ec3691..d5f019d48b09 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -448,19 +448,20 @@ static int hugetlbfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
448 | 448 | ||
449 | error = inode_change_ok(inode, attr); | 449 | error = inode_change_ok(inode, attr); |
450 | if (error) | 450 | if (error) |
451 | goto out; | 451 | return error; |
452 | 452 | ||
453 | if (ia_valid & ATTR_SIZE) { | 453 | if (ia_valid & ATTR_SIZE) { |
454 | error = -EINVAL; | 454 | error = -EINVAL; |
455 | if (!(attr->ia_size & ~huge_page_mask(h))) | 455 | if (attr->ia_size & ~huge_page_mask(h)) |
456 | error = hugetlb_vmtruncate(inode, attr->ia_size); | 456 | return -EINVAL; |
457 | error = hugetlb_vmtruncate(inode, attr->ia_size); | ||
457 | if (error) | 458 | if (error) |
458 | goto out; | 459 | return error; |
459 | attr->ia_valid &= ~ATTR_SIZE; | ||
460 | } | 460 | } |
461 | error = inode_setattr(inode, attr); | 461 | |
462 | out: | 462 | setattr_copy(inode, attr); |
463 | return error; | 463 | mark_inode_dirty(inode); |
464 | return 0; | ||
464 | } | 465 | } |
465 | 466 | ||
466 | static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, | 467 | static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, |