From: NeilBrown Date: Wed, 23 Jun 2010 01:38:43 +0000 (+1000) Subject: leaf_lookup: fix mis-handling of addressed before first entry. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=90aae2435b10399e3366aefb0e12cc2c7ddb839f;p=LaFS.git leaf_lookup: fix mis-handling of addressed before first entry. If target < addr, then the first entry should be returned a 'next', not consumed and ignored. Signed-off-by: NeilBrown --- diff --git a/index.c b/index.c index 3ddfd64..7bb1a9c 100644 --- a/index.c +++ b/index.c @@ -1216,7 +1216,10 @@ leaf_lookup(void *bf, int len, u32 startaddr, u32 target, u32 *nextp) p = decode48(cp); elen = decode16(cp); addr = decode32(cp); - if (target < addr || target >= addr + elen) + if (target < addr) { + p = 0; + cp -= 12; + } else if (target >= addr + elen) p = 0; else p += target - addr; @@ -1228,7 +1231,7 @@ leaf_lookup(void *bf, int len, u32 startaddr, u32 target, u32 *nextp) u64 p2; p2 = decode48(cp); elen = decode16(cp); - addr = decode32(cp) + addr = decode32(cp); if (elen == 0) *nextp = ~0UL; /* no more meaningful extents*/