summaryrefslogtreecommitdiff
path: root/lib/reed_solomon
diff options
context:
space:
mode:
Diffstat (limited to 'lib/reed_solomon')
-rw-r--r--lib/reed_solomon/reed_solomon.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/reed_solomon/reed_solomon.c b/lib/reed_solomon/reed_solomon.c
index 3e694ab9e3b2..02c19ecffc28 100644
--- a/lib/reed_solomon/reed_solomon.c
+++ b/lib/reed_solomon/reed_solomon.c
@@ -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;
}