osd_device_alloc() has improper error handling.
Refactor the function such that we properly
cleanup if __osd_device_init() fails.
Test-Parameters: trivial
Test-Parameters: testlist=sanity fstype=wbcfs mdscount=4 mdtcount=1 osscount=4 ostcount=1
Test-Parameters: testlist=sanity fstype=wbcfs combinedmdsmgs=false standalonemgs=true mdscount=1 mdtcount=1 osscount=4 ostcount=1
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ia03eb805ef3fdc75c8490e09c66b99e6541d13fd
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/59306
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Qian Yingjin <qian@ddn.com>
Reviewed-by: Lijing Chen <lijinc@amazon.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
ENTRY;
OBD_ALLOC_PTR(osd);
- if (osd == NULL)
+ if (!osd)
RETURN(ERR_PTR(-ENOMEM));
rc = dt_device_init(&osd->od_dt_dev, t);
- if (unlikely(rc)) {
- OBD_FREE_PTR(osd);
- GOTO(out, rc);
- }
+ if (rc)
+ GOTO(out_free, rc);
rc = __osd_device_init(env, osd, cfg);
-out:
- RETURN(rc == 0 ? osd2lu_dev(osd) : ERR_PTR(rc));
+ if (rc)
+ GOTO(out_dev_fini, rc);
+
+ RETURN(osd2lu_dev(osd));
+
+out_dev_fini:
+ dt_device_fini(&osd->od_dt_dev);
+out_free:
+ OBD_FREE_PTR(osd);
+ RETURN(ERR_PTR(rc));
}
static struct lu_device *osd_device_free(const struct lu_env *env,