История изменений
Исправление gns, (текущая версия) :
Да все просто. Есть некий бандл памяти. В начале бандла лежит массив структур вида
struct some_struct {
...... (какие-то нужные поля)
union {
char *k_path; /* file path -- kernel's view */
ptrdiff_t u_path; /* file path -- userspace view */
} p;
struct hlist_node node;
}
После этого массива лежат выровненные на 8 байт строки, на начало строки светит поле u_path (оффсет от начала бандла, например).
Бандл формируется в юзерспейсе и грузится в ядро, ядро пересчитывает оффсеты в указатели и строит хэш-таблицу используя поле hlist_node.
И телемаркет! И лишней памяти в ядре выделять не надо, все необходимые поля уже в бандле зарезервированы.
Сверху плюсы, внизу С. Ну и все друг друга знают как родные.
Исправление gns, :
Да все просто. Есть некий бандл памяти. В начале бандла лежит массив структур вида
struct some_struct {
...... (какие-то нужные поля)
union {
char *k_path; /* file path -- kernel's view */
ptrdiff_t u_path; /* file path -- userspace view */
} p;
struct hlist_node node;
}
После этого массива лежат выровненные на 8 байт строки, на начало строки светит поле u_path (оффсет от начала бандла, например).
Бандл формируется в юзерспейсе и грузится в ядро, ядро пересчитывает оффсеты в указатели и строит хэш-таблицу используя поле hlist_node.
И телемаркет!
Сверху плюсы, внизу С. Ну и все друг друга знают как родные.
Исходная версия gns, :
Да все просто. Есть некий бандл памяти. В начале бандла лежит массив структур вида
struct some_struct {
...... (какие-то нужные поля)
union {
char *k_path; /* file path -- kernel's view */
ptrdiff_t u_path; /* file path -- userspace view */
} p;
struct hlist_node node;
}
После этого массива лежат выровненные на 8 байт строки, на начало строки светит поле u_path (оффсет от начала бандла, например).
Бандл формируется в юзерспейсе и грузится в ядро, ядро пересчитывает оффсеты в указатели и строит хэш-таблицу используя поле hlist_node.
И телемаркет!
Сверху плюсы, внизу С. Ну и все друг друга знают как родные.