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
