]> git.neil.brown.name Git - LaFS.git/commitdiff
README update
authorNeilBrown <neilb@suse.de>
Sun, 13 Jun 2010 23:16:46 +0000 (09:16 +1000)
committerNeilBrown <neilb@suse.de>
Fri, 18 Jun 2010 11:16:53 +0000 (21:16 +1000)
README

diff --git a/README b/README
index 07f805c8a9184792e86ea52857c9537d90c9ed7f..90969508089dc53e2c45ae020d6b334d4b1558a0 100644 (file)
--- a/README
+++ b/README
@@ -4137,3 +4137,126 @@ Then spin in a soft-lockup in lafs_inode_handle_orphan
    320   nbfile-44   - 30K
    296   nbfile-20   - 30K
       ??331??
+
+11 June 2010
+
+ Thinking about truncate and index blocks becoming empty while
+ they still have children.
+ For leaf indexes, we need to leave the block in place in case
+ the children get written.  We need to find a time to ultimately
+ delete it...
+ For internal indexes,.... uhm, it just works, OK??
+
+ When I drop an uninc block, I need to remove it from the
+  uninc list, and from phase_leafs
+  clearing dirty and refiling should remove from leafs.
+
+ When we recurse to a parent, we need to remove
+ *this* block from the uninc list for said parent.
+ It should be the only thing in the list.
+ But even when we don't recurse, the fact that we have
+ incorporated means that we should tidy up the ->uninc
+ list.
+
+
+
+12 June 2010
+  unmount hung after lafs_run_orphans from lafs_put_super
+  There are two orphans in Writeback which cannot progress
+  until the current cluster is written...
+  But they keep getting re-written!
+  Other time, one orphan, index block is Dirty on a leaf ???
+  
+orph=[cfbdcf24]0/331(3780)r2E:Valid,SegRef,C,CI,CN,CNI,Claimed,PhysValid,Orphan(0) orphan_list(1) iblock(1)
+[cfb8e460]331/0(NoPhysAddr)r1F:Index(1),Pinned,Phase0,InoIdx,Valid,Dirty,SegRef,CN,CNI,UninCredit{0,0}[0] leaf(1) Leaf0(1) 
+LAFS_cluster_flush 1
+
+
+orph=[ce5c9bb4]0/327(3317)r2E:Valid,SegRef,C,CI,CN,CNI,Claimed,PhysValid,Orphan(0) iblock(1) orphan_list(1)
+[cfbe3a40]327/0(NoPhysAddr)r1F:Index(1),Pinned,Phase0,InoIdx,Valid,Dirty,SegRef,CN,CNI,UninCredit{0,0}[0] leaf(1) Leaf0(0) 
+
+ OK, problem is that when we truncate and remove an index block, the
+ next index block expands backwards to fill the space.
+ Then we apply prune_some, but don't check if anything was done.
+ We always mark it dirty, so it has to be written and then
+ we loop through again...
+ So need to check if prune_some did anything.
+
+TODO:
+ - prune_some need to get more done at a time
+ - let cleaner finish up before umount
+ - use early segments first ??
+ - look at write-clusters and check OK
+ - check that df:cb= drops properly.
+
+Bugs:
+      1 BUG: spinlock lockup on CPU#0, sh/1168, c0441170  - SECONDARY BUG
+      1 BUG: unable to handle kernel NULL pointer dereference at 000001b4
+      3 BUG: unable to handle kernel paging request at 00100104
+      5 BUG: unable to handle kernel paging request at 6b6b6bfb 
+      1 BUG: unable to handle kernel paging request at 7fffffff
+      7 kernel BUG at /home/neilb/work/nfsbrick/fs/module/block.c:197!
+      9 kernel BUG at /home/neilb/work/nfsbrick/fs/module/block.c:479!
+      2 kernel BUG at /home/neilb/work/nfsbrick/fs/module/block.c:529!
+      2 kernel BUG at /home/neilb/work/nfsbrick/fs/module/block.c:67!!
+      2 kernel BUG at /home/neilb/work/nfsbrick/fs/module/inode.c:828! 
+      4 kernel BUG at /home/neilb/work/nfsbrick/fs/module/inode.c:843!
+      1 kernel BUG at /home/neilb/work/nfsbrick/fs/module/modify.c:1708! 
+      7 kernel BUG at /home/neilb/work/nfsbrick/fs/module/segments.c:1028!
+      2 kernel BUG at /home/neilb/work/nfsbrick/fs/module/segments.c:332!
+     30 kernel BUG at /home/neilb/work/nfsbrick/fs/module/super.c:655!
+
+Quite a haul there!
+
+super.c:655
+    Pinned block in lafs_release:
+         0/2 is Dirty with plenty of credits, so it is a child
+         0/16 is Dirty/Realloc, or once Async
+
+segments.c:332
+    seg_deref with refcnt , 2 in lafs_seg_put_all
+
+segments.c:1028
+     No free segments - no real pattern.
+
+modify.c:1708
+     lafs_incorporate on non-dirty/realloc block
+       328/0 Index(1).  1 in uninc_table - probably during truncate.
+
+inode.c:843
+     children present in truncate after final incorp...
+       328/0.  64 children, no uninc list.  Maybe we ran the orphans too early??
+      or invalidate_page isn't removing the children.
+      Might want print_tree here?
+
+inode.c:828
+     Orphan handling - uninc but not dirty: is Realloc (sometimes)
+     Maybe like  mod:1708
+
+block.c:67
+      delref 'primary' from modify.c:2063 in the q2 branch.
+      nxt has PrimaryRef... Maybe  move earlier, but that shouldn't make a diff.
+      ditto at modify.c:2035  nxt is primary as was I, so drop mine.
+
+block.c:529
+        erase with index depth > 1.
+        0/328 in orphan handling.  Still have 8 or 15 blocks registered!
+
+block.c:479
+        not enough credits to dirty block 2/0 in dir_delete_commit for unlink.
+        74/xxxx in unlink
+        16/1 in seg_inc/seg_move...allocated_block/cluster_flush
+
+block.c:197
+        invalidated pages finds dirty block after EOF, after iolock_written
+         0/0 Dirty/Realloc in unmount - all Realloc!
+
+NULL deref in 1b4
+    cleaner->cluster_flush->count_credits->lock??
+
+001001
+     generic_drop_inode -- extra iput??  in lafs_inode_checkpin from refile
+6b6b6b  invalidate_inode_buffers!! in kill.  use-after-free
+
+7fffff
+    seginsert from scan_seg