]> git.neil.brown.name Git - LaFS.git/commitdiff
New bugon for unlink loop.
authorNeilBrown <neilb@suse.de>
Mon, 28 Jun 2010 01:40:25 +0000 (11:40 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 28 Jun 2010 01:40:25 +0000 (11:40 +1000)
Signed-off-by: NeilBrown <neilb@suse.de>
README
dir-avl.c
dir.c

diff --git a/README b/README
index 2a41a35016e9a66e2e5b1b9ca1f62153d458a2c8..96bcf9dffe5d449cebd6d2818144195b63c0f8d9 100644 (file)
--- a/README
+++ b/README
@@ -4810,6 +4810,9 @@ DONE 5d/ At unmount, 16/1 is still pinned.
  [<d0a4b35c>] dir_delete_commit+0xdb/0x187 [lafs]
  [<d0a4be3f>] lafs_unlink+0x144/0x1f4 [lafs]
  [<c02602c1>] vfs_unlink+0x4e/0x92
+
+  Don't know. Looks like cleanup up a chain in dir_delete_commit.
+  Added a BUG_ON.
  
   Would we be spinning on -EAGAIN ?? 4 empty segment are present.
 
@@ -4924,6 +4927,8 @@ DONE 15d/ What does I_Dirty mean - and implement it.
 15f/ include timestamp in cluster_head to set mtime/ctime properly on roll-forward?
 ## Items from 6 jul 2007.  
 
+15g/ test directories with non-random sequential hash.
+
 16/ Update locking.doc
 
 17/ cluster_flush calls lafs_cluster_allocate calls lafs_add_block_address
index 4495227310f7ae2e266e47c8bca9314e96666b17..258f34b28287f133eeb797dbfa1ddcff26d799d6 100644 (file)
--- a/dir-avl.c
+++ b/dir-avl.c
@@ -409,7 +409,7 @@ replace_deleted:
 int lafs_dir_del_ent(char *block, int psz, u32 seed, u32 hash)
 {
        /* Delete this entry from the directory block.
-        * This involves either it from the avl tree.
+        * This involves removing it from the avl tree.
         * If it was the last entry, we reduce 'lastpiece'
         * so the space can be used immediately.
         */
diff --git a/dir.c b/dir.c
index 1bb85767926d63980552716f52d5de0bd47c3976..da2b4f5fe6f7b73331c33da09ab38b8cb86616b4 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -442,6 +442,7 @@ dir_delete_commit(struct dirop_handle *doh,
                        if (piece == firstpiece)
                                break;
                        lafs_dir_del_ent(buf, bits, seed, hash);
+                       BUG_ON(hash == 0 || doh->hash - hash > 256);
                        hash--;
                } while (lafs_dir_find(buf, bits, seed, hash, &piece) &&
                         lafs_dir_extract(buf, bits, &de, piece,