Linux 2.6.x *в пределах модуля ядра*
где-то внутрях драйвера есть большой и толстый буфер выделенный через vmalloc(9) и есть необходимость достучаться до него через mmap(2). соотв. приходится отрабатывать операцию vm_operations_struct->nopage(). для чего очевидно необходимо преобразовать свой виртуальный адрес ядра "buffer + заданный offset" в конкретную страницу в лице структуры page и вернуть ее из nopage().
вопрос: как это сделать? на руках есть лишь то, что вернул vmalloc(9) и смещение в пределах выделенного буфера.
ps: я понимаю, что ответ "никак" и очевидно придется самому выделять, хранить и мапировать массив страниц, но может быть я все-таки что-то недоглядел в mm/vmalloc.c или еще где? например, если бы получить по заданному адресу его vm_struct то можно было бы найти страницу в pages и самому. только вот не экспортируется он, сволочь, ни vmlist ни vmlist_lock.. :-/
// wbr