What is the meaning of <MODULE>: disagrees about version of symbol <SYMBOL>
Environment
- Red Hat Enterprise Linux (RHEL)
Issue
- During the boot, the below message is shown:
...
tq_base: disagrees about version of symbol module_layout
...
- We are seeing many messages recorded in the logs as shown below:
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol dput
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol done_path_create
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol vfs_link
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol mntget
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol kmalloc_caches
Resolution
- The
<MODULE>
may not be compatible with the currently running kernel. -
Please check with the module vendor in order to request they confirm compatibility with the current running kernel, and verify if any module updates are needed.
-
If the module is provided and supported by Red Hat, please engage with your Red Hat support representative for further analysis.
Root Cause
- This message is generated by the below function in the kernel code:
"kernel/module.c"
-----------------
static int check_version(Elf_Shdr *sechdrs,
unsigned int versindex,
const char *symname,
struct module *mod,
const unsigned long *crc,
const struct module *crc_owner)
{
unsigned int i, num_versions;
struct modversion_info *versions;
/* Exporting module didn't supply crcs? OK, we're already tainted. */
if (!crc)
return 1;
/* No versions at all? modprobe --force does this. */
if (versindex == 0)
return try_to_force_load(mod, symname) == 0;
versions = (void *) sechdrs[versindex].sh_addr;
num_versions = sechdrs[versindex].sh_size
/ sizeof(struct modversion_info);
for (i = 0; i name, symname);
return 0;
bad_version:
printk("%s: disagrees about version of symbol %s\n",
mod->name, symname);
return 0;
}
Diagnostic Steps
Using journalctl
If systemd
is present, you may search the disagrees about version of symbol
messages in the journald
log files by using the journalctl
and grep
commands:
# journalctl | grep 'disagrees about version of symbol'
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol dput
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol done_path_create
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol vfs_link
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol mntget
Aug 10 20:05:12 RHEL-HOSTNAME kernel: cvbf: disagrees about version of symbol kmalloc_caches
Using /var/log/messages
You may search the disagrees about version of symbol
messages in /var/log/messages
files by using the grep
command:
# grep 'disagrees about version of symbol' /var/log/messages
May 22 15:30:55 RHEL-HOSTNAME kernel: bnxt_re: disagrees about version of symbol ib_device_set_netdev
May 22 15:30:55 RHEL-HOSTNAME kernel: bnxt_re: disagrees about version of symbol ib_umem_get
May 22 15:30:55 RHEL-HOSTNAME kernel: bnxt_re: disagrees about version of symbol ib_dealloc_device
May 22 15:30:55 RHEL-HOSTNAME kernel: bnxt_re: disagrees about version of symbol rdma_user_mmap_io
May 22 15:30:55 RHEL-HOSTNAME kernel: bnxt_re: disagrees about version of symbol ib_set_device_ops
Using dmesg
You may search the disagrees about version of symbol
messages in the kernel ring buffer messages by using the dmesg
and grep
commands:
# dmesg | grep 'disagrees about version of symbol'
[ 3794.194391] tq_base: disagrees about version of symbol module_layout
[ 3794.198452] tq_base: disagrees about version of symbol module_layout
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments