On Thu, Jul 30, 2009 at 11:31:41PM +0200, Pawel Jakub Dawidek wrote:
> On Thu, Jul 30, 2009 at 11:25:19PM +0200, Pawel Jakub Dawidek wrote:
> > Hello.
> > 
> > In the traverse_impl() function we can find this call:
> > 
> >     if (!(flags & TRAVERSE_PREFETCH) ||
> >         0 == taskq_dispatch(system_taskq, traverse_prefetch_thread,
> >         &td, TQ_NOQUEUE))
> >             pd.pd_exited = B_TRUE;
> > 
> > Which should call the traverse_prefetch_thread() function with td
> > argument from a separate thread. This doesn't look safe, as td is
> > allocated on the stack at the begining of traverse_impl() and won't be
> > accessible from taskq thread.
> > 
> > Is my understanding correct?
> 
> Actually it should be fine, unless kernel thread stacks are swapable in
> Solaris.

Ok, I'm sending mails too fast. If traverse_impl() will return before
task is complete, td can be overwritten by entering another function.
So it cannot return before task is completed or there is a bug?

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd at FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL: 
<http://mail.opensolaris.org/pipermail/zfs-code/attachments/20090730/b3881713/attachment.bin>

Reply via email to