Skip to content
Snippets Groups Projects
  • Markus Armbruster's avatar
    dcfe4805
    error: Avoid unnecessary error_propagate() after error_setg() · dcfe4805
    Markus Armbruster authored
    
    Replace
    
        error_setg(&err, ...);
        error_propagate(errp, err);
    
    by
    
        error_setg(errp, ...);
    
    Related pattern:
    
        if (...) {
            error_setg(&err, ...);
            goto out;
        }
        ...
     out:
        error_propagate(errp, err);
        return;
    
    When all paths to label out are that way, replace by
    
        if (...) {
            error_setg(errp, ...);
            return;
        }
    
    and delete the label along with the error_propagate().
    
    When we have at most one other path that actually needs to propagate,
    and maybe one at the end that where propagation is unnecessary, e.g.
    
        foo(..., &err);
        if (err) {
            goto out;
        }
        ...
        bar(..., &err);
     out:
        error_propagate(errp, err);
        return;
    
    move the error_propagate() to where it's needed, like
    
        if (...) {
            foo(..., &err);
            error_propagate(errp, err);
            return;
        }
        ...
        bar(..., errp);
        return;
    
    and transform the error_setg() as above.
    
    In some places, the transformation results in obviously unnecessary
    error_propagate().  The next few commits will eliminate them.
    
    Bonus: the elimination of gotos will make later patches in this series
    easier to review.
    
    Candidates for conversion tracked down with this Coccinelle script:
    
        @@
        identifier err, errp;
        expression list args;
        @@
        -    error_setg(&err, args);
        +    error_setg(errp, args);
             ... when != err
             error_propagate(errp, err);
    
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20200707160613.848843-34-armbru@redhat.com>
    dcfe4805
    History
    error: Avoid unnecessary error_propagate() after error_setg()
    Markus Armbruster authored
    
    Replace
    
        error_setg(&err, ...);
        error_propagate(errp, err);
    
    by
    
        error_setg(errp, ...);
    
    Related pattern:
    
        if (...) {
            error_setg(&err, ...);
            goto out;
        }
        ...
     out:
        error_propagate(errp, err);
        return;
    
    When all paths to label out are that way, replace by
    
        if (...) {
            error_setg(errp, ...);
            return;
        }
    
    and delete the label along with the error_propagate().
    
    When we have at most one other path that actually needs to propagate,
    and maybe one at the end that where propagation is unnecessary, e.g.
    
        foo(..., &err);
        if (err) {
            goto out;
        }
        ...
        bar(..., &err);
     out:
        error_propagate(errp, err);
        return;
    
    move the error_propagate() to where it's needed, like
    
        if (...) {
            foo(..., &err);
            error_propagate(errp, err);
            return;
        }
        ...
        bar(..., errp);
        return;
    
    and transform the error_setg() as above.
    
    In some places, the transformation results in obviously unnecessary
    error_propagate().  The next few commits will eliminate them.
    
    Bonus: the elimination of gotos will make later patches in this series
    easier to review.
    
    Candidates for conversion tracked down with this Coccinelle script:
    
        @@
        identifier err, errp;
        expression list args;
        @@
        -    error_setg(&err, args);
        +    error_setg(errp, args);
             ... when != err
             error_propagate(errp, err);
    
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20200707160613.848843-34-armbru@redhat.com>