As Casper pointed out, the right thing to do is to build applications
such that they can detect mid-transaction state and roll it back (or
forward, if there's enough data). Then mid-transaction snapshots are
fine, and the lack of APIs by which to inform the filesystem of
application transaction boundaries becomes much less of an issue
(adding such APIs is not a good solution, since it'd take many years
for apps to take advantage of them and more years still for legacy
apps to be upgraded or decomissioned).
The existing FS interfaces provide enough that one can build
applications this way.
zfs-discuss mailing list