To Steve,

This patchset should fix your problem.

Would you please have a try?

Thanks,
Qu

On 2018年06月06日 15:27, Qu Wenruo wrote:
> The patchset can be fetched from github (*):
> https://github.com/adam900710/btrfs-progs/tree/inline_ram_bytes
> 
> It's based on David's devel branch, whose HEAD is:
> commit 0d1c5812e28e286648781c7b35b542311cc01aa4 (david/devel)
> Author: Matthias Benkard <matthias.benk...@egym.de>
> Date:   Wed Apr 25 16:34:54 2018 +0200
> 
>     btrfs-progs: mkfs: traverse_directory: Reset error code on continue
> 
> Reported-by Steve Leung <sjle...@shaw.ca>, his old btrfs (at least
> offending inodes are from 2014) has inline uncompressed extent, while
> its ram_bytes mismatch with item size.
> 
> Latest kernel tree check catches this bug, while we failed to detect by
> dump-tree.
> 
> It turns out that btrfs-progs is doing something evil to avoid reading
> ram_bytes from inline uncompressed extent.
> 
> 
> So this patchset will address all such ram_bytes related problems.
> 
> The 1st patch is a not-so-relative fix for restore, which is using
> ram_bytes for decompress. Although thanks to the compression header, we
> won't read out-of-boundary, but fixing it is never a bad thing.
> 
> The 2nd patch will get rid of the evil btrfs_file_extent_inline_len()
> which hides raw ram_bytes from us, and fooling us for a long long time.
> 
> The 3rd~5th patches introduce check/repair function for both original
> and lowmem mode (although lowmem mode can detect it even before this patch).
> 
> The last one is the test case for it as usual.
> 
> *: Or should I just migrate to gitlab after M$ acquired github?
> 
> Qu Wenruo (6):
>   btrfs-progs: restore: Fix wrong compressed item size for decompress()
>   btrfs-progs: Get rid of the confusing btrfs_file_extent_inline_len()
>   btrfs-progs: check/original: Detect and repair wrong inline ram_bytes
>   btrfs-progs: check/lowmem: Prepare check_file_extent() to handle
>     repair
>   btrfs-progs: check/lowmem: Repair wrong inlien ram_bytes for
>     uncompressed extent
>   btrfs-progs: fsck-tests: Add test case for corrupted inline ram_bytes
> 
>  check/main.c                                  |  46 ++++++-
>  check/mode-lowmem.c                           | 120 ++++++++++++++----
>  check/mode-original.h                         |   1 +
>  cmds-restore.c                                |   5 +-
>  ctree.h                                       |  22 ----
>  file.c                                        |   3 +-
>  print-tree.c                                  |   4 +-
>  .../offset_by_one.img                         | Bin 0 -> 3072 bytes
>  .../035-inline-bad-ram-bytes/test.sh          |  11 ++
>  9 files changed, 157 insertions(+), 55 deletions(-)
>  create mode 100644 
> tests/fsck-tests/035-inline-bad-ram-bytes/offset_by_one.img
>  create mode 100755 tests/fsck-tests/035-inline-bad-ram-bytes/test.sh
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to