为什么当GFP_NOFS被屏蔽时递归文件系统调用是个坏主意



来自LDD3第214页:

GFP_NOIO
GFP_NOFS
这些标志的作用类似于GFP_KERNEL,但它们增加了内核满足请求的限制。GFP_NOFS分配不允许执行任何文件系统调用,而GFP_NOIO根本不允许启动任何I/O。它们主要用于文件系统和虚拟内存代码中,在这些代码中,分配可能被允许休眠,但递归文件系统调用是个坏主意

我想知道当GFP_NOFS被屏蔽时,为什么递归文件系统调用是个坏主意?

谢谢!

我想知道当GFP_NOFS是masktd时,为什么递归文件系统调用是个坏主意?

相反:您使用GFP_NOFS来发出信号,表示分配可以休眠,但不能与文件系统交互(例如:将一些内存块转储到磁盘以释放一些空闲内存)。它是在代码的关键区域中完成的
例如:您输入了文件系统调用,为这个文件系统锁定了一些全局互斥,称为kmalloc。如果kmalloc将尝试调用另一个文件系统函数,该函数会锁定相同的互斥对象,那么就会出现死锁。所以我们提供了GFP_NOFS标志。

相关内容

最新更新