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

Reply via email to