Понимание и попытка применить git patch для файловой системы fuse

У меня есть файловая система на основе плавких предохранителей, для ее улучшения мне необходимо реализовать этот подход 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' и нашла только make-файл.

  • Примечание: libfuse-dev установлен

1 ответ

Решение

Это патч для ядра Linux. Вам нужно начать с клона исходных кодов ядра Linux, если у вас его еще нет:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Тогда вам нужно скачать патч. НЕ пытайтесь скопировать и вставить его из веб-браузера. Вы можете скачать патчи для ядра с https://patchwork.kernel.org/; патч, на который вы ссылались, выглядит как https://patchwork.kernel.org/patch/8182901. Скачать mbox отсюда версия патча, которая сохранит его в файл с именем v5-fuse-Add-support-for-passthrough-read-write.patch, Затем вы можете применить этот патч, запустив git am команда из директории с исходным кодом linux:

$ cd linux
$ git am /path/to/v5-fuse-Add-support-for-passthrough-read-write.patch

Но, глядя на патч, он выпущен в феврале 2016 года, так что, вероятно, он не будет применяться по отношению к текущей версии ядра. И под "вероятно" я имею в виду "это не относится"; вышеуказанная команда приводит к:

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

А затем откатите источники примерно до 1 февраля 2016 года:

$ 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

После применения патча вам нужно будет скомпилировать и установить новое ядро ​​и модули, что выходит за рамки этого ответа, но довольно хорошо задокументировано.

Вопрос, который нужно задать себе, - учитывая, что этому патчу больше года, и он никогда не был принят в ядро, вы уверены, что он вам нужен? Были ли другие изменения с тех пор, которые могли бы предложить подобное улучшение?

Другие вопросы по тегам