我有一个基于保险丝的文件系统,为了改进它,我需要实现这种方法 https://lwn.net/Articles/674286/
我知道我应该git apply < patch >
,问题是我不明白这个补丁应该在哪里应用?
修补程序正在尝试修改多个文件,例如:
a/fs/fuse/Makefile
a/fs/fuse/dev.c
b/fs/fuse/dev.c
a/fs/fuse/dir.c
b/fs/fuse/dir.c
etc..
我用locate
命令找不到,也尝试丢失"a"和"b"前缀,只找到了makefile。
- 注意:libfuse-dev 已安装
这是对 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
应用补丁后,您需要编译并安装新的内核和模块,这超出了本答案的范围,但有相当多的文档。
要问自己的问题是,鉴于这个补丁已经有一年多的历史了,并且从未被内核接受,你确定你需要它吗? 自那时以来,是否有其他变化可能会提供类似的改进?