memory-management - 在 Linux 中插入模块时出错 -- 1 无法分配内存

标签 memory-management filesystems linux-kernel

eCryptfs 是一个符合 POSIX 标准的加密文件系统,自 2.6.19 版本以来一直是主线 Linux 内核的一部分。

当我尝试插入模块 (ecryptfs.ko) 时,出现以下错误:

insmod: error inserting 'ecryptfs.ko': -1 Cannot allocate memory

有人能帮帮我吗?

下面是dmesg

Failed to allocate one or more kmem_cache objects

kmem_cache_create: duplicate cache ecryptfs_auth_tok_list_item

Pid: 3332, comm: insmod Tainted: G           O 3.2.2+ #1

Call Trace:

[<c102bfe0>] ? printk+0x15/0x17

[<c10878b6>] kmem_cache_create+0x41c/0x458

[<d0ebd038>] ecryptfs_init+0x38/0x1b1 [ecryptfs]

[<c1001071>] do_one_initcall+0x71/0x118

[<d0ebd000>] ? 0xd0ebcfff

[<c1055703>] sys_init_module+0x60/0x18c

[<c12db9b0>] sysenter_do_call+0x12/0x36

ecryptfs_init_kmem_caches: ecryptfs_auth_tok_list_item: kmem_cache_create 
failed

 Failed to allocate one or more kmem_cache objects

最佳答案

从您在 dmesg 中看到的错误开始:

kmem_cache_create: duplicate cache ecryptfs_auth_tok_list_item

ecryptfs 模块加载后,它做的第一件事就是为自己创建一堆内存缓存。该错误表明已经存在同名缓存。

您可以通过查看 sysfs 来检查缓存是否已经存在:

$ ls -ld /sys/kernel/slab/ecryptfs*

注意。由于 slab 合并,它可能不会出现在 /proc/slabinfo 中。

如果您看到任何 ecryptfs slab 表明 ecryptfs 模块已经加载,或者它已经内置到您的内核中。

通常模块加载器不会让你加载同一个模块两次,但也许你做了一些奇怪的事情来混淆它。

关于memory-management - 在 Linux 中插入模块时出错 -- 1 无法分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262510/

相关文章:

linux - 如何知道在内核中分配的 sock->ops 在哪里?

c++ - 理解c++中的析构函数

c# - 我是否需要释放 C# 中数组使用的内存?

c - lsof 总是报告偏移量等于 OSX 中的文件大小

c# - 使用 FileSystemWatcher 类来记录正在进行更改的用户

c - Linux 设备驱动程序,是否可以使用文件描述符获取次要编号?

linux-kernel - 在内核模块中分配大页面

java - 未关闭的流是否会导致 java 中的内存泄漏?

java - 为什么 PermGen 空间在增长?

architecture - 用于存储视频数据的关系数据库