Hi Klaus,
well, so what you seem to write is that your application is architected around a generic function that serializes mutations, and that not having BKNR transactions support generic functions prevented you from just using them rather than implementing your own lock. Fair enough. I wonder why you can't use multiple generic functions instead of one, but that is beyond what I can (and want to) understand right now.
I am not a big fan of fine grained locking, but that is apparent from the store architecture with its giant lock, too. I am not bothered with the scalability limitations as I have not yet found them to be practically relevant - My user base has been growing slower than processor speeds have increased, and even with Pentium III CPUs we had more than enough headroom for our applications.
STM is interesting, but real transactional memory interests me more, I must admit. There is an implementation of CLOS STM (http://common-lisp.net/project/cl-stm/), but the lack of support for non-CLOS data types is kind of a show-stopper for me. Maybe someone will hack STM into one of the CL compilers, but I'm not really prepared to do that.
Anyway - If you need further support with BKNR indices, let us know.
-Hans