When Commit() failed, the error was stored in commitErr instead of err, so the deferred rollback (which checks err) was skipped.
When Commit() failed, the error was stored in commitErr instead of err, so the deferred rollback (which checks err) was skipped.