Hast locking up under 9.2

Pawel Jakub Dawidek pjd at FreeBSD.org
Mon Nov 25 08:32:18 UTC 2013


On Sat, Nov 23, 2013 at 11:59:51PM +0200, Mikolaj Golub wrote:
> On Fri, Nov 22, 2013 at 11:18:29AM +0000, Pete French wrote:
> 
> > "Assertion failed: (!hio->hio_done), function write_complete, file
> >  /usr/src/sbin/hastd/primary.c, line 1130."
> 
> It looks like write_complete usage (which should be called once per
> write request) for memsync is racy.
> 
> Consider the following scenario:
> 
> 1) remote_recv_thread: memsync ack received, refcount -> 2;
> 2) local_send_thread: local write completed, refcount -> 1, entering
>    write_complete()
> 3) remote_recv_thread: memsync fin received, refcount -> 0, move hio
>    to done queue, ggate_send_thread gets the hio, checks for
>    !hio->hio_done and (if loca_send_thread is still in
>    write_complete()) entering write_complete()

I don't see how is that possible. The write_complete() function is
called only when hio_countdown goes from 2 to 1 and because this is
atomic operation it can only happen in one thread. Can you elaborate on
how calling write_complete() concurrently for the same request is
possible?

-- 
Pawel Jakub Dawidek                       http://www.wheelsystems.com
FreeBSD committer                         http://www.FreeBSD.org
Am I Evil? Yes, I Am!                     http://mobter.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20131125/235a3ac4/attachment.sig>


More information about the freebsd-stable mailing list