On 2/3/11 2:59 AM, Bjoern A. Zeeb wrote:
On Thu, 3 Feb 2011, Monthadar Al Jaberi wrote:
I don't understand why you saw a CRED_TO_VNET of 0
I was under the impression that every process/thread in the
system would
be
on vnet0
in a vimage kernel.
This is how my printf looks like:
struct thread *td = curthread;
struct vnet *v = TD_TO_VNET(td);
struct ucred *cred = CRED_TO_VNET(td->ucred);
struct vnet *td_vnet = td->td_vnet;
here's your problem:
strcut vnet *vnet = cred->cr_prison->pr_vnet;
When I add CURVNET_SET(CRED_TO_VNET(curthread->td_ucred)); I get a
panic too...
But your suggestion works if I do like this:
curthread->td_vnet = curthread->td_ucred->cr_prison->pr_vnet;
CRED_TO_VNET(curthread->td_ucred) returns NULL
I wonder how you are building your module and if VIMAGE is properly
defined. If it's not that would explain a lot of things.
printf("td=%p, td->td_vnet=%p, td->td_ucred=%p, TD_TO_VNET=%p,
CRED_TO_VNET=%p\n", td, td_vnet, td->td_ucred, v, cred);
I made a fast search in /usr/src for "td_vnet" and found it was
assigned only in
int fork1(td, flags, pages, procp):
#ifdef VIMAGE
td2->td_vnet = NULL;
td2->td_vnet_lpush = NULL;
#endif
Nice try. Want another search? Hint: there is this in vnet.h:
#define curvnet curthread->td_vnet
And then you'll, again, find the CURVNET_SET_* macros.
Thank you
Something you may find useful as well btw is:
http://people.freebsd.org/~bz/20100530-02.vnet.9.html
that's excellent!
checkin?
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to
"[email protected]"
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to
"[email protected]"