diff options
author | Josef Bacik <jbacik@fusionio.com> | 2013-04-04 20:31:27 +0200 |
---|---|---|
committer | Josef Bacik <jbacik@fusionio.com> | 2013-05-06 21:54:33 +0200 |
commit | cc95bef635a649d595cf8d1cd4fcff5b6bf13023 (patch) | |
tree | dbe8e6b5953648dbef4ce26e45f522ed73103238 /fs/btrfs/file.c | |
parent | Btrfs: don't wait on ordered extents if we have a trans open (diff) | |
download | linux-cc95bef635a649d595cf8d1cd4fcff5b6bf13023.tar.xz linux-cc95bef635a649d595cf8d1cd4fcff5b6bf13023.zip |
Btrfs: log ram bytes properly
When logging changed extents I was logging ram_bytes as the current length,
which isn't correct, it's supposed to be the ram bytes of the original extent.
This is for compression where even if we split the extent we need to know the
ram bytes so when we uncompress the extent we know how big it will be. This was
still working out right with compression for some reason but I think we were
getting lucky. It was definitely off for prealloc which is why I noticed it,
btrfsck was complaining about it. With this patch btrfsck no longer complains
after a log replay. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r-- | fs/btrfs/file.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index ade03e6f7bd2..e81e428a8840 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -607,6 +607,7 @@ void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, split->block_len = em->block_len; else split->block_len = split->len; + split->ram_bytes = em->ram_bytes; split->orig_block_len = max(split->block_len, em->orig_block_len); split->generation = gen; @@ -632,6 +633,7 @@ void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, split->generation = gen; split->orig_block_len = max(em->block_len, em->orig_block_len); + split->ram_bytes = em->ram_bytes; if (compressed) { split->block_len = em->block_len; @@ -1915,6 +1917,7 @@ out: } else { hole_em->start = offset; hole_em->len = end - offset; + hole_em->ram_bytes = hole_em->len; hole_em->orig_start = offset; hole_em->block_start = EXTENT_MAP_HOLE; |