Add support for DISCARD to ZVOLs.
[zfs.git] / module / zfs / vdev_raidz.c
index 526385e..b987ac4 100644 (file)
@@ -1189,7 +1189,7 @@ vdev_raidz_matrix_reconstruct(raidz_map_t *rm, int n, int nmissing,
        uint64_t ccount;
        uint8_t *dst[VDEV_RAIDZ_MAXPARITY];
        uint64_t dcount[VDEV_RAIDZ_MAXPARITY];
-       uint8_t log, val;
+       uint8_t log = 0, val;
        int ll;
        uint8_t *invlog[VDEV_RAIDZ_MAXPARITY];
        uint8_t *p, *pp;
@@ -1638,8 +1638,11 @@ raidz_checksum_verify(zio_t *zio)
 {
        zio_bad_cksum_t zbc;
        raidz_map_t *rm = zio->io_vsd;
+       int ret;
 
-       int ret = zio_checksum_error(zio, &zbc);
+       bzero(&zbc, sizeof (zio_bad_cksum_t));
+
+       ret = zio_checksum_error(zio, &zbc);
        if (ret != 0 && zbc.zbc_injected != 0)
                rm->rm_ecksuminjected = 1;
 
@@ -1692,9 +1695,9 @@ static uint64_t raidz_corrected[1 << VDEV_RAIDZ_MAXPARITY];
 static int
 vdev_raidz_worst_error(raidz_map_t *rm)
 {
-       int error = 0;
+       int c, error = 0;
 
-       for (int c = 0; c < rm->rm_cols; c++)
+       for (c = 0; c < rm->rm_cols; c++)
                error = zio_worst_error(error, rm->rm_col[c].rc_error);
 
        return (error);
@@ -1716,7 +1719,7 @@ vdev_raidz_combrec(zio_t *zio, int total_errors, int data_errors)
        void *orig[VDEV_RAIDZ_MAXPARITY];
        int tstore[VDEV_RAIDZ_MAXPARITY + 2];
        int *tgts = &tstore[1];
-       int current, next, i, c, n;
+       int curr, next, i, c, n;
        int code, ret = 0;
 
        ASSERT(total_errors < rm->rm_firstdatacol);
@@ -1764,12 +1767,12 @@ vdev_raidz_combrec(zio_t *zio, int total_errors, int data_errors)
 
                orig[n - 1] = zio_buf_alloc(rm->rm_col[0].rc_size);
 
-               current = 0;
-               next = tgts[current];
+               curr = 0;
+               next = tgts[curr];
 
-               while (current != n) {
-                       tgts[current] = next;
-                       current = 0;
+               while (curr != n) {
+                       tgts[curr] = next;
+                       curr = 0;
 
                        /*
                         * Save off the original data that we're going to
@@ -1817,34 +1820,34 @@ vdev_raidz_combrec(zio_t *zio, int total_errors, int data_errors)
 
                        do {
                                /*
-                                * Find the next valid column after the current
+                                * Find the next valid column after the curr
                                 * position..
                                 */
-                               for (next = tgts[current] + 1;
+                               for (next = tgts[curr] + 1;
                                    next < rm->rm_cols &&
                                    rm->rm_col[next].rc_error != 0; next++)
                                        continue;
 
-                               ASSERT(next <= tgts[current + 1]);
+                               ASSERT(next <= tgts[curr + 1]);
 
                                /*
                                 * If that spot is available, we're done here.
                                 */
-                               if (next != tgts[current + 1])
+                               if (next != tgts[curr + 1])
                                        break;
 
                                /*
                                 * Otherwise, find the next valid column after
                                 * the previous position.
                                 */
-                               for (c = tgts[current - 1] + 1;
+                               for (c = tgts[curr - 1] + 1;
                                    rm->rm_col[c].rc_error != 0; c++)
                                        continue;
 
-                               tgts[current] = c;
-                               current++;
+                               tgts[curr] = c;
+                               curr++;
 
-                       } while (current != n);
+                       } while (curr != n);
                }
        }
        n--;
@@ -1862,7 +1865,7 @@ vdev_raidz_io_done(zio_t *zio)
        vdev_t *vd = zio->io_vd;
        vdev_t *cvd;
        raidz_map_t *rm = zio->io_vsd;
-       raidz_col_t *rc;
+       raidz_col_t *rc = NULL;
        int unexpected_errors = 0;
        int parity_errors = 0;
        int parity_untried = 0;