> +     /* first do a discovery0 */
> +     error = opal_discovery0_step(dev);
>  
> +     for (state = 0; !error && state < n_steps; state++)
> +             error = execute_step(dev, &steps[state], state);
> +
> +     /*
> +      * For each OPAL command the first step in steps starts some sort of
> +      * session. If an error occurred in the initial discovery0 or if an
> +      * error occurred in the first step (and thus stopping the loop with
> +      * state == 1) then there was an error before or during the attempt to
> +      * start a session. Therefore we shouldn't attempt to terminate a
> +      * session, as one has not yet been created.
> +      */
> +     if (error && state > 1)
> +             end_opal_session_error(dev);
>  
>       return error;

The flow here is a little too condensed for my taste.  Why not the
plain obvoious, if a little longer:

        error = error = opal_discovery0_step(dev);
        if (error)
                return error;

        for (state = 0; state < n_steps; state++) {
                error = execute_step(dev, &steps[state], state);
                if (error)
                        goto out_error;
        }

        return 0;

out_error:
        if (state > 1)
                end_opal_session_error(dev);
        return error;

Otherwise looks good:

Reviewed-by: Christoph Hellwig <[email protected]>

Reply via email to