From 263184c7d286efe5200939686818400d0e3afa5d Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Wed, 22 Nov 2017 17:03:25 +0800 Subject: [PATCH] btrfs-progs: fsck-tests: Introduce test case with keyed data backref with shared tree blocks For snapshot shared tree blocks with source subvolume, the keyed backref counter only counts the exclusive owned references. In the following case, 258 is a snapshot of 257, which inherits all the reference to this data extent. ------ item 4 key (12582912 EXTENT_ITEM 524288) itemoff 3741 itemsize 140 refs 179 gen 9 flags DATA extent data backref root 257 objectid 258 offset 0 count 49 extent data backref root 257 objectid 257 offset 0 count 1 extent data backref root 256 objectid 258 offset 0 count 128 extent data backref root 256 objectid 257 offset 0 count 1 ------ However lowmem mode used to iterate the whole inode to find all references, and doesn't care if a reference is already counted by the shared tree block. Add the test case to check it. Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- .../keyed_data_ref_with_shared_leaf.img | Bin 0 -> 19456 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img diff --git a/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img b/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img new file mode 100644 index 0000000000000000000000000000000000000000..2ce5068f01c693e577de8b9a536fdeb360029e5f GIT binary patch literal 19456 zcmeIZby!qi_c%IqrzoHxp-8usbaw~{2q>i>jevj>LkLJHC?E*Z-5?;%01|@IAkra7 zNq5Zbdj|Zx@AuyOzR&&seV^YvGv}fegIR8Qb z65U9Si9W){(1$b`^bz(FeIS>C@L;e^^r86zc0t3l7qBfZ1k1>tX#2 zK817m9UcUiDV@VlArQu=d=3Ym!z$;nJsLJwJ%^dltZZGt=QuiQ=j~%uPwG$IZnm<*_^J$1t)-iTz;3dXQBEnl9)}E%0AGF1}D>;Dl+gcAE8o98WwJJ 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 a