Btrfs: Count space allocated to file in bytes
This patch makes btrfs count space allocated to file in bytes instead
of 512 byte sectors.
Everything else in btrfs uses a byte count instead of sector sizes or
blocks sizes, so this fits better.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index a03d1bb..18dfdf5 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -193,7 +193,7 @@
leaf = path->nodes[0];
ei = btrfs_item_ptr(leaf, path->slots[0],
struct btrfs_file_extent_item);
- inode->i_blocks += (offset + size - found_end) >> 9;
+ inode_add_bytes(inode, offset + size - found_end);
}
if (found_end < offset) {
ptr = btrfs_file_extent_inline_start(ei) + found_size;
@@ -203,7 +203,7 @@
insert:
btrfs_release_path(root, path);
datasize = offset + size - key.offset;
- inode->i_blocks += datasize >> 9;
+ inode_add_bytes(inode, datasize);
datasize = btrfs_file_extent_calc_inline_size(datasize);
ret = btrfs_insert_empty_item(trans, root, path, &key,
datasize);
@@ -713,7 +713,8 @@
extent);
if (btrfs_file_extent_disk_bytenr(leaf,
extent)) {
- dec_i_blocks(inode, old_num - new_num);
+ inode_sub_bytes(inode, old_num -
+ new_num);
}
btrfs_set_file_extent_num_bytes(leaf, extent,
new_num);
@@ -724,14 +725,17 @@
u32 new_size;
new_size = btrfs_file_extent_calc_inline_size(
inline_limit - key.offset);
- dec_i_blocks(inode, (extent_end - key.offset) -
- (inline_limit - key.offset));
+ inode_sub_bytes(inode, extent_end -
+ inline_limit);
btrfs_truncate_item(trans, root, path,
new_size, 1);
}
}
/* delete the entire extent */
if (!keep) {
+ if (found_inline)
+ inode_sub_bytes(inode, extent_end -
+ key.offset);
ret = btrfs_del_item(trans, root, path);
/* TODO update progress marker and return */
BUG_ON(ret);
@@ -743,8 +747,7 @@
u32 new_size;
new_size = btrfs_file_extent_calc_inline_size(
extent_end - end);
- dec_i_blocks(inode, (extent_end - key.offset) -
- (extent_end - end));
+ inode_sub_bytes(inode, end - key.offset);
ret = btrfs_truncate_item(trans, root, path,
new_size, 0);
BUG_ON(ret);
@@ -791,9 +794,7 @@
}
btrfs_release_path(root, path);
if (disk_bytenr != 0) {
- inode->i_blocks +=
- btrfs_file_extent_num_bytes(leaf,
- extent) >> 9;
+ inode_add_bytes(inode, extent_end - end);
}
}
@@ -801,7 +802,8 @@
u64 disk_bytenr = le64_to_cpu(old.disk_bytenr);
if (disk_bytenr != 0) {
- dec_i_blocks(inode, le64_to_cpu(old.num_bytes));
+ inode_sub_bytes(inode,
+ le64_to_cpu(old.num_bytes));
ret = btrfs_free_extent(trans, root,
disk_bytenr,
le64_to_cpu(old.disk_num_bytes),