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