rslib: Simplify error path
[linux-2.6-block.git] / lib / reed_solomon / reed_solomon.c
index 3e694ab9e3b231d882f4af7f4907e80d5042aec1..02c19ecffc2804936ee6915936c2bf63b700c950 100644 (file)
@@ -60,8 +60,7 @@ static struct rs_control *rs_init(int symsize, int gfpoly, int (*gffunc)(int),
        struct rs_control *rs;
        int i, j, sr, root, iprim;
 
-       /* Allocate the control structure */
-       rs = kmalloc(sizeof(*rs), gfp);
+       rs = kzalloc(sizeof(*rs), gfp);
        if (!rs)
                return NULL;
 
@@ -78,15 +77,15 @@ static struct rs_control *rs_init(int symsize, int gfpoly, int (*gffunc)(int),
        /* Allocate the arrays */
        rs->alpha_to = kmalloc(sizeof(uint16_t) * (rs->nn + 1), gfp);
        if (rs->alpha_to == NULL)
-               goto errrs;
+               goto err;
 
        rs->index_of = kmalloc(sizeof(uint16_t) * (rs->nn + 1), gfp);
        if (rs->index_of == NULL)
-               goto erralp;
+               goto err;
 
        rs->genpoly = kmalloc(sizeof(uint16_t) * (rs->nroots + 1), gfp);
        if(rs->genpoly == NULL)
-               goto erridx;
+               goto err;
 
        /* Generate Galois field lookup tables */
        rs->index_of[0] = rs->nn;       /* log(zero) = -inf */
@@ -111,7 +110,7 @@ static struct rs_control *rs_init(int symsize, int gfpoly, int (*gffunc)(int),
        }
        /* If it's not primitive, exit */
        if(sr != rs->alpha_to[0])
-               goto errpol;
+               goto err;
 
        /* Find prim-th root of 1, used in decoding */
        for(iprim = 1; (iprim % prim) != 0; iprim += rs->nn);
@@ -141,14 +140,10 @@ static struct rs_control *rs_init(int symsize, int gfpoly, int (*gffunc)(int),
                rs->genpoly[i] = rs->index_of[rs->genpoly[i]];
        return rs;
 
-       /* Error exit */
-errpol:
+err:
        kfree(rs->genpoly);
-erridx:
        kfree(rs->index_of);
-erralp:
        kfree(rs->alpha_to);
-errrs:
        kfree(rs);
        return NULL;
 }