Hammer: processes blocked on a file

Matthew Dillon dillon at apollo.backplane.com
Wed Jul 30 10:03:04 PDT 2008


:It occured to me once again. I've uploaded vmcore and kernel to my 
:crash/ directory.
:
:It seems that the vnode is (dead-) locked and trying to access it (e.g.
:typing a "ls" in that directory) blocks that process as well.
:
:Regards,
:
:   Michael

    I've examined both your crash dump and Francois's crash dump.  Both
    reveal the same bug.

    What is happening is that the processes are stuck waiting for a
    HAMMER inode which has a dependancy to flush, but HAMMER has lost
    track of the dependancy so the process winds up waiting forever.

(kgdb) back
#0  0xc02cce63 in lwkt_switch () 
#1  0xc02d0d13 in tsleep (ident=0xe1552814, flags=0, wmesg=0xc05432fc "hmrwin", timo=0) 
#2  0xc042eeba in hammer_wait_inode (ip=0xe15527d0) 
#3  0xc0440e89 in hammer_vop_fsync (ap=0xe112cc88) 
#4  0xc0316162 in vop_fsync (ops=0xc5cc6f30, vp=0xe15a27a8, waitfor=1) 
#5  0xc03144be in sys_fsync (uap=0xe112ccf0) 
#6  0xc04d1e62 in syscall2 (frame=0xe112cd40) 

(kgdb) print ip->flush_state
$1 = HAMMER_FST_SETUP		<--- means there is stuff on target_list
(kgdb) print ip->target_list
$2 = {
  tqh_first = 0x0, 		<--- except the target_list is empty!
  tqh_last = 0xe15527f0
}
(kgdb) 

    I will commit a fix today to both HEAD and 2.0.  It will need some
    continuing testing since it is fairly hard to reproduce, to make sure
    I actually fixed it the right place.

    Thank you both!

					-Matt
					Matthew Dillon 
					<dillon at backplane.com>





More information about the Bugs mailing list