zfs pool import hangs on [tx->tx_sync_done_cv]

K. Macy kmacy at freebsd.org
Mon Oct 13 08:11:49 UTC 2014


On Mon, Oct 13, 2014 at 1:06 AM, Steven Hartland <killing at multiplay.co.uk>
wrote:

> ----- Original Message ----- From: "K. Macy" <kmacy at freebsd.org>
>
>  A recent quick read of the code would lead me to believe that zio_wait not
>> returning there means that the zio never reached the zio_done stage.
>> Parent
>> zios seem to yield in a couple of stages in the pipeline if they have
>> incomplete children. They determine this by calling zio_wait_for_children
>> with zio child types and their corresponding wait type. In so doing they
>> set the io_stall to the count of the number of waiters of the first
>> non-zero check. This parent I/O will be resumed by the last child zio of
>> that type and wait state in zio_notify_parent. I'm sure you know all this
>> -
>> but I wrote it to preface asking for the following fields of the zio being
>> waited on in dsl_pool_sync_mos: io_stall (i.e, which field in io_children
>> is pointed to) *io_stall,  io_children[*][*], io_child_list (at a first
>> glance just the addresses). The other alternative is that it reexecuting
>> has gotten in to a bad place in the state machine so io_reexecute.
>>
>
> Yer I would have got the zio details but typically its "optimised out" by
> the
> compiler, so will need some effort to track that down unfortunately :(
>

Well, let me know if you can. Re-creating a new 10.x VM is taking a while
as it's taking me forever to checkout the sources.

Things like that need to somehow continue to be accessible.

Cheers.

-K


More information about the freebsd-stable mailing list