这是 Linux 内核的一个补丁。如果您还没有 Linux 内核源码的副本,您需要从头开始进行克隆:
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
接下来,您需要下载补丁。 请勿尝试从Web浏览器复制粘贴。 您可以从 https://patchwork.kernel.org/ 下载内核补丁;您所提到的补丁似乎是 https://patchwork.kernel.org/patch/8182901 。 从这里下载补丁的mbox
版本,它将保存到一个名为v5-fuse-Add-support-for-passthrough-read-write.patch
的文件中。 然后,您可以在Linux源目录中运行git am
命令来应用此补丁:
$ cd linux
$ git am /path/to/v5-fuse-Add-support-for-passthrough-read-write.patch
但是看着这个补丁,它是来自2016年2月的,所以它可能不会在当前版本的内核上应用得很干净。而且说“可能”,我的意思是“它不能应用”。上面的命令结果如下:
Applying: fuse: Add support for passthrough read/write
error: patch failed: fs/fuse/Makefile:5
error: fs/fuse/Makefile: patch does not apply
error: patch failed: fs/fuse/file.c:252
error: fs/fuse/file.c: patch does not apply
error: patch failed: fs/fuse/fuse_i.h:531
error: fs/fuse/fuse_i.h: patch does not apply
error: fs/fuse/fuse_passthrough.h: already exists in working directory
error: patch failed: fs/fuse/inode.c:898
error: fs/fuse/inode.c: patch does not apply
error: fs/fuse/passthrough.c: already exists in working directory
error: patch failed: include/uapi/linux/fuse.h:250
error: include/uapi/linux/fuse.h: patch does not apply
Patch failed at 0001 fuse: Add support for passthrough read/write
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
那么我们需要做的是将内核源代码回滚到2016年的状态。首先,我们需要中止正在进行的git am
操作:
$ git am --abort
然后将源代码回滚到2016年2月1日左右:
$ git checkout $(git rev-list -1 --before=2016-02-02 --first-parent master)
现在这个补丁能够干净地应用:
$ git am /path/to/v5-fuse-Add-support-for-passthrough-read-write.patch
Applying: fuse: Add support for passthrough read/write
应用此补丁后,您需要编译和安装新的内核和模块,这超出了本回答的范围,但已有相当好的记录。
您需要问自己的问题是,考虑到这个补丁已经有一年之久,并且从未被纳入内核,您确定需要它吗?此后是否有其他更改可以提供类似的改进?