From 3c8c882c31e990478c8b6260debccdfb3b0b11a7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 22 Jun 2016 10:28:28 -0400 Subject: [PATCH] include/small_encoding: fix lba encoding with many low zeros Signed-off-by: Sage Weil --- src/include/small_encoding.h | 1 + src/test/encoding.cc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/include/small_encoding.h b/src/include/small_encoding.h index 5efca0cfb2bf..e07afaf381e0 100644 --- a/src/include/small_encoding.h +++ b/src/include/small_encoding.h @@ -183,6 +183,7 @@ inline void small_encode_lba(uint64_t v, bufferlist& bl) { pos = t + 1; word = (1 << t) - 1; } else { + v >>= 20; pos = 3; word = 0x3; } diff --git a/src/test/encoding.cc b/src/test/encoding.cc index 5469c42109ac..b9b13f73d9dc 100644 --- a/src/test/encoding.cc +++ b/src/test/encoding.cc @@ -320,6 +320,7 @@ TEST(small_encoding, varint_lowz) { {0x7f0000, 2, 2, 2}, {0xffff0000, 4, 4, 4}, {0xffffffff, 5, 5, 5}, + {0x41000000, 3, 4, 4}, {0, 0, 0, 0} }; for (unsigned i=0; v[i][1]; ++i) { @@ -382,6 +383,7 @@ TEST(small_encoding, lba) { {0x3fffffff0000, 5}, {0xfffffff00000, 4}, {0x1fffffff00000, 5}, + {0x41000000, 4}, {0, 0} }; for (unsigned i=0; v[i][1]; ++i) { -- 2.47.3