> Secondly, for delayed logging only, matching by transaction
> structure address triggers the failure because busy extents
> have a much longer life than the transaction structure. It is clear
> why the transaction ID matching didn't trip over - it would have
> triggered a log force in this situation, and hence blocked until
> the checkpoint that fs_mark-2742 had triggered was complete before
> redoing the rbtree insert.
True, the busy extents get spliced over to the cil context, so they
outlive the transaction structure.
> Right now I'm simply going to go back to using the transaction ID
> for matching transactions, even though the above analysis points out
> that even that is not as efficient as it could be for delayed
> logging. That is, we don't even need to force the log or have a
> synchronous transaction if the extent was first freed in the current
> checkpoint seqeunce. Doing that, however, requires pinning the
> checkpoint sequence (i.e. preventing a flush) until the current
> transaction commits. While that is in the plan for delayed logging,
> it is future functionality and hence I'm not going to attempt to
> design and implement it this close to 2.6.35-rc cycle. [*]
Sounds fine to me. I'm not a fan of exporting the tid, but it
seems like there's no good way around it for now. Please make the
tid exporting a separate changeset so that it's easily revertable
once this is sorted out.
And documenting all this in comments in the code so that it's archived
would be very useful!