-
- Downloads
msleep: make it accept any kind of mutex
First of all, I am sorry. I am sorry Avi, Dor, Pekka, God, Dennis Ritchie, et caterva. I am so very sorry. This is probably one of the ugliest things ever written by a C programmer in the history of programming. The story is: ZFS defines its own mutex of type kmutex_t, which is basically just a OSv in our implementation. In a piece of code currently commented out (not for long), it calls: msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0); The problem is that our msleep implementation expects a "struct mtx" which is our own wrapper around mutex (Maybe that should be changed? Does anybody remember why it was done this way?) Keep in mind that we are going to great lenghts not to change ZFS (ifdefing code out is generally fine), so the casting solution could not be used. I've tried to change the for-ZFS definitions of mutex in the BSD glue code, but then, after a couple of hours I was still resolving conflicts with all the other parts that would break because they were expecting a certain type that was now changed. I eventually set for the current ugly but functional solution: code msleep in a way that it can accept any kind of mutex. That is really ugly because by "any kind of mutex" I really mean any kind of crap the user passes and good bye type safety altogether. But it works with minimal changes, and more importantly, with all the changes being in *our* glue code. If anybody have other ideas, I would be happy to try them out. But at this time, I believe that to be the best compromise. Signed-off-by:Glauber Costa <glommer@cloudius-systems.com> Signed-off-by:
Pekka Enberg <penberg@cloudius-systems.com>
Loading
Please register or sign in to comment