LINUX.ORG.RU

vfsmount


0

0

Здравствуйте! Есть вопрос, касающийся ядра 2.6.x Как получить адрес
первой структуры vfsmount в ядре? Для того чтобы потом можно было пройти
по двунаправленному списку от начала до конца с помощью list_entry.
Вот, например для task_struct все ясно:
…
struct task_struct *pp;
pp = &init_task;
pp = list_entry((pp)->tasks.next, struct task_struct, tasks);
…
Заранее спасибо!
anonymous

Насколько я понимаю, первая стуктура vfsmount помещается в init_task.namespace->root. Смотри ф-цию init_mount_tree().

anonymous
()
Ответ на: комментарий от anonymous

Значит, получаю адрес первой структуры:

struct vfsmount *tmp;
struct task_struct *pp;
pp = &init_task;
tmp = pp->namespace->root;
// вывожу
printk(KERN_ALERT "%d /dev/%s type %s\n",i++, tmp->mnt_sb->s_id,
        tmp->mnt_sb->s_type->name);
// Получаю rootfs rootfs

// следущая стру-ра в списке
tmp = list_entry((tmp)->mnt_list.next, struct vfsmount, mnt_hash);

// вывожу
printk(KERN_ALERT "%d /dev/%s type %s\n",i++, tmp->mnt_sb->s_id,
        tmp->mnt_sb->s_type->name);

и Segmentation fault. Может, что делаю не так? Поправьте плиз.

anonymous
()
Ответ на: комментарий от anonymous

> // следущая стру-ра в списке
> tmp = list_entry((tmp)->mnt_list.next, struct vfsmount, mnt_hash);

Если больше экземпляров vfsmount нет, то tmp == NULL.

> // вывожу
> printk(KERN_ALERT "%d /dev/%s type %s\n",i++, tmp->mnt_sb->s_id,
>         tmp->mnt_sb->s_type->name);

А здесь будет Segmentation fault, при tmp == NULL.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.