aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-01-30 11:54:05 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:00 -0400
commitf392a938f3cc36a2abe68db9286bd864c3b2f7dd (patch)
tree6ec7bcfbc21dfce2a84390db17b03be6c7cfe6a0 /fs
parentb1632b10c0133992fd0290b4836c47661bed4396 (diff)
Properly align the hole size in btrfs_setattr
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/inode.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index de17c61dfa0..515f8b01ab0 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -1001,7 +1001,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
u64 mask = root->sectorsize - 1;
u64 pos = (inode->i_size + mask) & ~mask;
- u64 block_end = attr->ia_size | mask;
+ u64 block_end = (attr->ia_size + mask) & ~mask;
u64 hole_start;
u64 hole_size;
u64 alloc_hint = 0;
@@ -1022,7 +1022,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
btrfs_truncate_page(inode->i_mapping, inode->i_size);
- lock_extent(io_tree, pos, block_end, GFP_NOFS);
+ lock_extent(io_tree, pos, block_end - 1, GFP_NOFS);
hole_size = block_end - hole_start;
mutex_lock(&root->fs_info->fs_mutex);
@@ -1043,7 +1043,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
}
btrfs_end_transaction(trans, root);
mutex_unlock(&root->fs_info->fs_mutex);
- unlock_extent(io_tree, pos, block_end, GFP_NOFS);
+ unlock_extent(io_tree, pos, block_end - 1, GFP_NOFS);
if (err)
return err;
}