Ok, I'm glad to know my analysis was correct (I wasn't sure about it, though).

This means that the ztest port to Linux now doesn't have any known bugs ;)

Thank you for the fast response.

On Friday 09 June 2006 18:26, you wrote:
> This happens if you have:
>
>       replacing
>          foo
>          bar
>
> And you try to replace 'foo' with 'bar.  Sure enough, the old code used
> to do:
>
>       if (parent is replacing)
>               return ENOTSUP
>       if (initialize new vdev failed)
>               return failure (EBUSY)
>
> Now it switched the order:
>
>       if (initialize new vdev failed)
>               return failure (EBUSY)
>       if (parent is replacing)
>               return ENOTSUP
>
> Both cases are correct, its just a matter of which error condition gets
> triggered first.  You cannot trigger this through the CLI (since it
> refuses to issue the ioctl because said disk is actively in use).  I'll
> think some more about it, but most likely the correct fix is the one
> below.
>
> - Eric
>
> On Fri, Jun 09, 2006 at 10:12:51AM -0700, Eric Schrock wrote:
> > Yes, I'm seeing this unexpectedly fail with EBUSY  (errno 16) instead of
> > ENOTSUP.  This was definitely caused by the hot spare work, and it's my
> > fault for not running ztest more rigorously.  I'll file a bug and take a
> > look.  For now, you can change (in ztest.c):
> >
> >         if (error == EOVERFLOW)
> >                 expected_error = error;
> >
> > To:
> >
> >         if (error == EOVERFLOW || error == EBUSY)
> >                 expected_error = error;
> >
> > I've been able to run this way for 10 minutes, with the 'rarely ->
> > always' change.
> >
> > Sorry about that,
> >
> > - Eric
>
> --
> Eric Schrock, Solaris Kernel Development      
> http://blogs.sun.com/eschrock

Reply via email to