I'm not a solaris developer so please forgive me in advance if this is a noob question or if I goof up the nomenclature.
We've got a device driver released which uses: extern struct vnode kvp; in it's "dispose" vnode operation handler. From what I understand, this symbol is no longer exported by the kernel (customer states they applied "update 9") and so now modload fails for obvious reasons.
For versions >= update 9 I will need a dispose handler that does not reference kvp. I'm sure this is doable, but what I'm wondering is: how are other people dealing with the fact that a single version of the OS may or may not have this symbol defined? If I need to have code that supports the case when kvp is there, as well as code that supports when kvp is not there, how is this done?
If the code to support the case where kvp does not exist is backwards compatible, then I suppose this is a moot point, but I doubt that is the case. Any help would be appreciated. Thank you.
Well, VN_DISPOSE is still there in Update 9/Update 10, but it doesn't use the vnode kvp structure, apart from that it stills expect the same arguments, so I feel it should work still in Update 9..
Normally systemcalls should be consistent across updates, so its not normal for modules to break because of an update, AFAIK.
Thanks for the reply. The problem I have is: if it works one way in >= update 9, and another way in < update 9, how to release a single driver that supports both methods? Since this is a symbol reference it precludes the driver from loading so I can't check versions. If the fix for >= update 9 is backwards compatible, then ok, that works. Otherwise, aside from releasing 2 different drivers, I can't see an easy way to manage this. Thanks.