On Tue, Aug 18, 2020 at 09:54:25 +0200, Michal Privoznik wrote:
[...]
As promised yesterday, I've dived into the code and found out
that the major
number can be specified as a parameter to the dm module (just tested and it
works). So the next thing I tried was to see how could we check whether the
module was reloaded. I've tried opening /dev/mapper/control hoping that I
will get EOF on module unload (which I could then use to run a callback that
would invalidate the cached value). But having the file open prevents
unloading the module.
Loading/unloading a module results in an udev event, BUT we listen for udev
events only in nodedev driver and moving the code out to a driver agnostic
location and making it driver agnostic is too much code for a little gain.
Then I looked whether it's possible to get the major number via an ioctl().
But haven't found anything.
Hence, I think the best solution for us is to not cache anything and simply
parse /proc/devices every time. As an optimization, I can firstly check
whether /dev/mapper/control exists at all an if not exit early.
I agree with this solution. In the end, loading a <1k file from procfs
and looking for a string doesn't really add too much to the code. In the
end libvirt mainly just shovels strings from one pile to another most of
the time. (see domain definition copy function for example).