]> git.neil.brown.name Git - LaFS.git/commitdiff
leaf_lookup: fix mis-handling of addressed before first entry.
authorNeilBrown <neilb@suse.de>
Wed, 23 Jun 2010 01:38:43 +0000 (11:38 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 23 Jun 2010 01:57:21 +0000 (11:57 +1000)
If target < addr, then the first entry should be returned
a 'next', not consumed and ignored.

Signed-off-by: NeilBrown <neilb@suse.de>
index.c

diff --git a/index.c b/index.c
index 3ddfd641c20e89939e66d6cc3fdc8e944af3521a..7bb1a9cdb3678056ed8ae31d15e0647ec417c49b 100644 (file)
--- 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*/