皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Linux 6.19 移除了内核的 “Genocide” 功能

虽然 Linux 内核在过去五年中一直有包容性术语的指导方针,用于替换诸如 master/slave 和 blacklist/whitelist 等短语,但令人惊讶的是,内核中存在一个名为“genocide”的函数。该函数在最初提交时曾受到质疑,但现在已被移除,出现在 Linux 6.19 中。

早在 2023 年,d_genocide()函数就被引入到 Linux 内核中,作为内核中各种 dcache 更新的一部分。当补丁首次发布时,长期参与 Linux 开发的 Al Viro 就对该函数名称提出了质疑。当时他的回应是:

“kill_them_all(),因为这就是它所做的事情?

如果你真的希望我解释你所建议的每个标识符的问题,我可以解释,但我强烈建议你将这个话题移出讨论范围。

至于那些不好的词汇……某天去谷歌搜索一下“jesux”。是的,我们确实有像“kill”、“abort”等这样的标识符,它们真的不会消失;接受现实吧。

进一步补充:

为了进一步说明:这个函数的作用(或者说它试图做到的事情——它有严重的限制,这也是为什么现在只剩下一个调用者,而且这个调用者只在没有任何其他方式可以访问文件系统时才会被使用)是“杀死指定的 dentry,以及其所有子项、所有子项的子项等等”。

我真诚地怀疑,在任何现实情境中,你都无法找到一个词来描述这种行为,而不会带有非常负面的联想。

上下文:一些文件系统将整个目录树完全存储在 dcache 中;创建一个文件或目录会增加相应 dentry 的引用计数,因此在例如 mkdir(2)返回后,该计数不会回到 0,而是保持为 1,从而防止其被移出。实际上,所有正向的 dentry 都被人为地保持在使用状态。当执行 rmdir(2)或 unlink(2)时,这个额外的引用会被移除,从而导致它们被移出。

往前推两年,现在随着这一合并到 Linux 6.19 内核,与”d_genocide()”和”DCACHE_GENOCIDE”相关的代码已经不再存在。

Linux 6.19 移除了内核的 "Genocide" 功能

“genocide”代码原本是在 kill_litter_super()函数中调用的,Al Viro 在拉取请求中解释道:

而不是让 kill_litter_super()处理移除剩余的”泄露”引用(例如所有未在 umount 前被移除的 tmpfs 文件),应该让常规的 shrink_dcache_for_umount()函数将所有 dentries 的 DCACHE_PERSISTENT 标志清除,并在该标志被设置时释放相应的引用。之后,kill_litter_super()就变成了类似 kill_anon_super()的功能。

“genocide”这个术语仅作为函数名使用,从未显示给终端用户,但无论如何,随着 Linux 6.19 的这次代码重构,它现在已经从系统中移除了。

转自  Linux 6.19 Gets Rid Of The Kernel’s “Genocide” Function – Phoronix