the problem seems to be a little bit more complex. Your latest patch does not solve the problem.
But I found out, that commenting out the following line in your patch makes bat0 work:
slave->master = master;
But as this is the core of "enslaving" a device to a master device, this breaks the complete concept behind this I guess (I'm not a skilled kernel developer). From this I conclude that there might be a bug somewhere deeper in the kernel version I use. I don't want to give up too early, but it looks a little bit as if this "enslaving concept using rtnl" might not be usable in these older kernels. What do you think?