libzbc: cleanup init code
authorDmitry Fomichev <dmitry.fomichev@wdc.com>
Mon, 25 May 2020 21:32:53 +0000 (06:32 +0900)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 May 2020 00:21:41 +0000 (18:21 -0600)
Make sure every allocated data structure gets freed in case of
unsuccessful libzbc ioengine initialization.

Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
engines/libzbc.c

index 8c682de606db56025de696f3de891bd098f55bf3..2f6b4583edaec5d9b2e6e4806d5f090361a22c9e 100644 (file)
@@ -92,15 +92,12 @@ static int libzbc_open_dev(struct thread_data *td, struct fio_file *f,
        if (ret) {
                log_err("%s: zbc_open() failed, err=%d\n",
                        f->file_name, ret);
-               return ret;
+               goto err;
        }
 
        ret = libzbc_get_dev_info(ld, f);
-       if (ret) {
-               zbc_close(ld->zdev);
-               free(ld);
-               return ret;
-       }
+       if (ret)
+               goto err_close;
 
        td->io_ops_data = ld;
 out:
@@ -108,6 +105,12 @@ out:
                *p_ld = ld;
 
        return 0;
+
+err_close:
+       zbc_close(ld->zdev);
+err:
+       free(ld);
+       return ret;
 }
 
 static int libzbc_close_dev(struct thread_data *td)