0

I have a similar issue to #68416356 with a driver that cannot compile on SLES15 SP3 (kernel 5.3.18-59.16. I am not a developer and I don't know C++.

See Compiling wanpipe driver on kernel 5.11 Any help would be highly appreciated.

make -C /lib/modules/5.3.18-59.16-default/build M=/tmp/code/AgentDriver modules make[1]: Entering directory '/usr/src/linux-5.3.18-59.16-obj/x86_64/default' CC [M] /tmp/code/AgentDriver/src/linux/KernelTracer.o In file included from /tmp/code/AgentDriver/src/linux/KernelTracer.c:54:0: /tmp/code/AgentDriver/src/linux/KernelTracer.h:87:5: error: unknown type name ‘make_request_fn’ make_request_fn* original_make_request_fn; ^~~~~~~~~~~~~~~ /tmp/code/AgentDriver/src/linux/KernelTracer.c: In function ‘make_request_hook’: /tmp/code/AgentDriver/src/linux/KernelTracer.c:735:5: error: called object is not a function or > function pointer device_info->original_make_request_fn(q, bio); ^~~~~~~~~~~ /tmp/code/AgentDriver/src/linux/KernelTracer.c: In function ‘set_hook’: /tmp/code/AgentDriver/src/linux/KernelTracer.c:764:65: error: ‘struct request_queue’ has no > > > member named ‘make_request_fn’; did you mean ‘nr_requests’? device_info->original_make_request_fn = bd->bd_disk->queue->make_request_fn; ^~~~~~~~~~~~~~~ nr_requests /tmp/code/AgentDriver/src/linux/KernelTracer.c:768:25: error: ‘struct request_queue’ has no > > > member named ‘make_request_fn’; did you mean ‘nr_requests’? bd->bd_disk->queue->make_request_fn = make_request_hook; ^~~~~~~~~~~~~~~ nr_requests /tmp/code/AgentDriver/src/linux/KernelTracer.c: In function ‘remove_hook’: /tmp/code/AgentDriver/src/linux/KernelTracer.c:776:29: error: ‘struct request_queue’ has no member > named ‘make_request_fn’; did you mean ‘nr_requests’? if (bd->bd_disk->queue->make_request_fn == device_info->original_make_request_fn) ^~~~~~~~~~~~~~~ nr_requests /tmp/code/AgentDriver/src/linux/KernelTracer.c:779:29: error: ‘struct request_queue’ has no member > named ‘make_request_fn’; did you mean ‘nr_requests’? if (bd->bd_disk->queue->make_request_fn != make_request_hook) { ^~~~~~~~~~~~~~~ nr_requests /tmp/code/AgentDriver/src/linux/KernelTracer.c:784:25: error: ‘struct request_queue’ has no member > named ‘make_request_fn’; did you mean ‘nr_requests’? bd->bd_disk->queue->make_request_fn = device_info->original_make_request_fn; ^~~~~~~~~~~~~~~ nr_requests /tmp/code/AgentDriver/src/linux/KernelTracer.c: In function ‘register_listener’: /tmp/code/AgentDriver/src/linux/KernelTracer.c:810:29: error: ‘struct request_queue’ has no member > named ‘make_request_fn’; did you mean ‘nr_requests’? if (bd->bd_disk->queue->make_request_fn == NULL) { ^~~~~~~~~~~~~~~ nr_requests make[3]: *** [/usr/src/linux-5.3.18-59.16/scripts/Makefile.build:288: /tmp/code/AgentDriver/src/linux/KernelTracer.o] Error 1 make[2]: *** [/usr/src/linux-5.3.18-59.16/Makefile:1675: module/tmp/code/AgentDriver] Error 2 make[1]: *** [../../../linux-5.3.18-59.16/Makefile:179: sub-make] Error 2 make[1]: Leaving directory '/usr/src/linux-5.3.18-59.16-obj/x86_64/default'


Code References:

KernelTracer.h:87:5: make_request_fn* original_make_request_fn;

KernelTracer.c:735:5: device_info->original_make_request_fn(q, bio);

KernelTracer.h:87:5: device_info->original_make_request_fn = bd->bd_disk->queue->make_request_fn;

KernelTracer.c:768:25: bd->bd_disk->queue->make_request_fn = make_request_hook;

KernelTracer.c:776:29: if (bd->bd_disk->queue->make_request_fn == device_info->original_make_request_fn)

KernelTracer.c:779:29: if (bd->bd_disk->queue->make_request_fn != make_request_hook) {

KernelTracer.c:784:25: bd->bd_disk->queue->make_request_fn = device_info->original_make_request_fn;

KernelTracer.c:810:29: if (bd->bd_disk->queue->make_request_fn == NULL) {


https://www.dropbox.com/s/apu7af2bvbkis8u/KernelTracer.h?dl=0 https://www.dropbox.com/s/wri7njcamc39yre/KernelTracer.c?dl=0

Thanks

JoeyM
  • 1
  • 1
  • 1
    The Linux kernel does not have a stable internal API, which can be a problem when compiling external, "out-of-tree" kernel module sources (i.e. sources that are not distributed as part of the Linux kernel source). This means that sooner or later, external kernel module sources that have not been maintained to keep up with changes to the kernel's internal API will fail to build for future versions of the Linux kernel. By the way, the code is in the C language, not C++. – Ian Abbott Oct 25 '21 at 14:50
  • Thanks Ian. I was kinda hoping that a minor change to the source would be required for the newer kernel e.g replace all references to make_request_fn with submit_bio and comment out a line or two. Wishful thinking I suppose :) – JoeyM Oct 25 '21 at 16:16
  • 1
    Perhaps there is a later version of the software that will build OK for your kernel? – Ian Abbott Oct 25 '21 at 16:26
  • Sadly there isn't - last update was several kernel revisions ago.. – JoeyM Oct 25 '21 at 17:53

0 Answers0