новичок ядра здесь ...
Я пытаюсь сделать своп изнутри кода ядра (на устройстве подкачки в известном месте, подходящем для жесткого кодирования).Я нашел syscall sys_swapoff, который выглядит довольно прямолинейно, поэтому я попытался просто сделать:
sys_swapoff("/path/to/swap/device");
, но это не работает (возвращает ошибку № -14).Используя отладку в гетто-стиле через printk, я определил, что он выдает ошибку в этом кодовом блоке в sys_swapoff:
pathname = getname(specialfile);
err = PTR_ERR(pathname);
if (IS_ERR(pathname))
goto out;
Так что, очевидно, ему не нравится что-то в названии пути.Я подумал, что, может быть, это потому, что я передавал ему строковый литерал вместо выделенного буфера, поэтому я попытался соединить буфер, записать в него путь и передать его, но это не имело никакого значения.Что я делаю неправильно?Есть ли лучший способ сделать своп изнутри кода ядра, кроме использования системного вызова?