[PATCH] Missing memset and free-on-error in io engines
authorJens Axboe <jens.axboe@oracle.com>
Tue, 7 Nov 2006 13:02:48 +0000 (14:02 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 7 Nov 2006 13:02:48 +0000 (14:02 +0100)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
engines/fio-engine-libaio.c
engines/fio-engine-posixaio.c
engines/fio-engine-sg.c

index c0f280b51ed447e1d125f2ee4c2806ffbd10c87b..12ddc98b26ac800d86ed78e15cefa21513cb32ff 100644 (file)
@@ -120,6 +120,7 @@ static int fio_libaio_init(struct thread_data *td)
        memset(ld, 0, sizeof(*ld));
        if (io_queue_init(td->iodepth, &ld->aio_ctx)) {
                td_verror(td, errno);
        memset(ld, 0, sizeof(*ld));
        if (io_queue_init(td->iodepth, &ld->aio_ctx)) {
                td_verror(td, errno);
+               free(ld);
                return 1;
        }
 
                return 1;
        }
 
index 401cd866ba549ee193098f3af54998c6e6aef2fd..894a410a459117571518c00b66abe2d790a81183 100644 (file)
@@ -171,7 +171,9 @@ static int fio_posixaio_init(struct thread_data *td)
 {
        struct posixaio_data *pd = malloc(sizeof(*pd));
 
 {
        struct posixaio_data *pd = malloc(sizeof(*pd));
 
+       memset(pd, 0, sizeof(*pd));
        pd->aio_events = malloc(td->iodepth * sizeof(struct io_u *));
        pd->aio_events = malloc(td->iodepth * sizeof(struct io_u *));
+       memset(pd->aio_events, 0, td->iodepth * sizeof(struct io_u *));
 
        td->io_ops->data = pd;
        return 0;
 
        td->io_ops->data = pd;
        return 0;
index fafc326968df8019f7485880732d13cbc7484b84..2762e0bac3b25783f02ccdf6366327eb42d98583 100644 (file)
@@ -266,29 +266,32 @@ static int fio_sgio_init(struct thread_data *td)
        int ret;
 
        sd = malloc(sizeof(*sd));
        int ret;
 
        sd = malloc(sizeof(*sd));
+       memset(sd, 0, sizeof(*sd));
        sd->cmds = malloc(td->iodepth * sizeof(struct sgio_cmd));
        sd->cmds = malloc(td->iodepth * sizeof(struct sgio_cmd));
+       memset(sd->cmds, 0, td->iodepth * sizeof(struct sgio_cmd));
        sd->events = malloc(td->iodepth * sizeof(struct io_u *));
        sd->events = malloc(td->iodepth * sizeof(struct io_u *));
+       memset(sd->events, 0, td->iodepth * sizeof(struct io_u *));
        td->io_ops->data = sd;
 
        if (td->filetype == FIO_TYPE_BD) {
                if (ioctl(f->fd, BLKSSZGET, &bs) < 0) {
                        td_verror(td, errno);
        td->io_ops->data = sd;
 
        if (td->filetype == FIO_TYPE_BD) {
                if (ioctl(f->fd, BLKSSZGET, &bs) < 0) {
                        td_verror(td, errno);
-                       return 1;
+                       goto err;
                }
        } else if (td->filetype == FIO_TYPE_CHAR) {
                int version;
 
                if (ioctl(f->fd, SG_GET_VERSION_NUM, &version) < 0) {
                        td_verror(td, errno);
                }
        } else if (td->filetype == FIO_TYPE_CHAR) {
                int version;
 
                if (ioctl(f->fd, SG_GET_VERSION_NUM, &version) < 0) {
                        td_verror(td, errno);
-                       return 1;
+                       goto err;
                }
 
                ret = fio_sgio_get_bs(td, &bs);
                if (ret)
                }
 
                ret = fio_sgio_get_bs(td, &bs);
                if (ret)
-                       return ret;
+                       goto err;
        } else {
                log_err("ioengine sgio only works on block devices\n");
        } else {
                log_err("ioengine sgio only works on block devices\n");
-               return 1;
+               goto err;
        }
 
        sd->bs = bs;
        }
 
        sd->bs = bs;
@@ -303,6 +306,11 @@ static int fio_sgio_init(struct thread_data *td)
         */
        td->override_sync = 1;
        return 0;
         */
        td->override_sync = 1;
        return 0;
+err:
+       free(sd->events);
+       free(sd->cmds);
+       free(sd);
+       return 1;
 }
 
 struct ioengine_ops ioengine = {
 }
 
 struct ioengine_ops ioengine = {