Accessing filesystem from a KLD
Seb
sebastien.b at swissinfo.org
Wed Jun 29 09:55:49 GMT 2005
> Why not to use VOP_READ? See how it is called in dev/md.c:mdstart_vnode,
> check kern/vfs_vnops.c:vn_open_cred for information how to lookup a file
> name and open it.
That's what I do, however I use the wrapper functions vn_open(), vn_rdwr() and
so.
But I have a problem, when I call this code :
void *request_firmware(const char *name, size_t *size)
{
int flags;
char filename[40];
struct nameidata nd;
struct thread *td = curthread;
[...]
NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, &filename[0], td);
flags = FREAD;
vn_open(&nd, &flags, 0, -1);
[...]
}
from the KLD handler function (for testing) it works. But when I call it from
a thread created by kthread_create() in another KLD, I have a page fault.
A few printfs show that the call to vn_open() is responsible for the fault.
I have not forgotten to lock Giant in my kernel thread.
Any ideas ?
Thanks,
Sebastien
More information about the freebsd-hackers
mailing list