Btrfs: Fix i_blocks accounting
Now that delayed allocation accounting works, i_blocks accounting is changed
to only modify i_blocks when extents inserted or removed.
The fillattr call is changed to include the delayed allocation byte count
in the i_blocks result.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index dfb700e..52144b0 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -1161,6 +1161,15 @@
struct btrfs_root *root, struct btrfs_path *path,
u64 isize);
/* inode.c */
+static inline void dec_i_blocks(struct inode *inode, u64 dec)
+{
+ dec = dec >> 9;
+ if (dec <= inode->i_blocks)
+ inode->i_blocks -= dec;
+ else
+ inode->i_blocks = 0;
+}
+
unsigned long btrfs_force_ra(struct address_space *mapping,
struct file_ra_state *ra, struct file *file,
pgoff_t offset, pgoff_t last_index);