Pawel Jakub Dawidek wrote: > On Wed, Nov 07, 2007 at 07:41:54AM -0700, Mark Maybee wrote: >> Hmm, seems rather unlikely that these two IOs are related. Thread 1 >> is trying to read a dnode in order to extract the znode data from its >> bonus buffer. Thread 2 is completing a dmu_sync() write (so this is >> the result of a zil operation). While its possible that the dmu_sync() >> write may involve reading some of the blocks in the dnode from Thread 1, >> this should not result in Thread 1 waiting for anything. > > Maybe my interpretation is wrong, but moving this VN_RELE() to separate > kernel thread for later fixes deadlock for me. > Right, but I think the problem here is that you are running out of IO threads. Do you maintain separate thread sets for each "type" of IO (i.e. reads, writes, etc)? We found, early on, that if we didn't reserve threads for specific types of IOs that we could run into this type of deadlock.
-Mark