Matthew Ahrens wrote: > > > A given thread can only process one transaction at a time. I.e. it is not > valid for a given thread to do: > dmu_tx_assign(tx1) > dmu_tx_assign(tx2) > dmu_tx_commit(...) > > Because this could result in deadlock. The 2nd dmu_tx_assign() could need > to wait for a txg to sync, which could need to wait for tx1's txg to > quiesce, which would wait for tx1 to commit.
That is precisely it. zfs_create calls the dmu_tx_assign, then calls vnode_create(), which calls vnop_pageout() which calls dmu_tx_assign(). We deadlock. There is no way to avoid that in OSX. So desperately looking for ways around it. Just dropping the fsync/pageout request is "uncomfortable". Lund -- Jorgen Lundman | <[email protected]> Unix Administrator | +81 (0)3 -5456-2687 ext 1017 (work) Shibuya-ku, Tokyo | +81 (0)90-5578-8500 (cell) Japan | +81 (0)3 -3375-1767 (home) _______________________________________________ developer mailing list [email protected] http://lists.open-zfs.org/mailman/listinfo/developer
