Это более или менее вопрос о методологии и обосновании. При программировании различных модулей ядра для Linux меня смешивает то, что я считаю неуклюжим способом проектирования функций. Например, чтобы получить индекс inode файла, заданный по его пути, мне пришлось использовать что-то вроде:
struct inode *inode;
struct path path;
kern_path(path_name, LOOKUP_FOLLOW, &path);
inode = path.dentry->d_inode;
Почему не просто функция, которая работает как:
struct inode inode;
struct path path = kern_path(path_name, LOOKUP_FOLLOW);
inode = path.dentry->d_inode;
Кажется гораздо более интуитивным.