I used the relay_fs module (or the relay module plus debugfs) to do some tracing when last working on network congestion avoidance. I left the tracing code skeleton in, because it could be quite handy during testing, but it had been a major headache for the compatibility system: People running kernels without relay were building aoe modules that depended on relay, and their aoe module wouldn't load.
One reason for that issue was a simple mixup, where a different configuration was used to build the running kernel than the one that was in the kernel sources used to build the aoe driver. It turns out there was another reason. If the Module.symvers file is absent, then the "relay_open undefined" message that the compatibility test looks for never appears, even when the function is not defined.
This patch causes the compatibility system to create an aoe driver that doesn't use relay when Module.symvers is absent or when the relay functions are undefined.