qmt_pool_lock is not released if qti_pools_add fails in
qmt_pool_lookup.
Change-Id: Ic2adb44468d51af7aefcbb91279260ae6f85d67a
Signed-off-by: Sergey Cheremencev <sergey.cheremencev@hpe.com>
Reviewed-on: https://review.whamcloud.com/45106
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Vladimir Saveliev <vlaidimir.saveliev@hpe.com>
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
int idx, bool add)
{
struct qmt_pool_info *pos, *pool;
int idx, bool add)
{
struct qmt_pool_info *pos, *pool;
ENTRY;
down_read(&qmt->qmt_pool_lock);
ENTRY;
down_read(&qmt->qmt_pool_lock);
if (idx >= 0 && !qmt_sarr_check_idx(pos, idx)) {
rc = qti_pools_add(env, pos);
if (rc)
if (idx >= 0 && !qmt_sarr_check_idx(pos, idx)) {
rc = qti_pools_add(env, pos);
if (rc)
if (add) {
rc = qti_pools_add(env, pos);
if (rc)
if (add) {
rc = qti_pools_add(env, pos);
if (rc)
} else {
qpi_getref(pool);
}
} else {
qpi_getref(pool);
}
}
up_read(&qmt->qmt_pool_lock);
}
up_read(&qmt->qmt_pool_lock);
+ if (rc)
+ GOTO(out_err, rc);
+
if (idx >= 0 && qti_pools_cnt(env))
pool = qti_pools_env(env)[0];
if (idx >= 0 && qti_pools_cnt(env))
pool = qti_pools_env(env)[0];
out_err:
CERROR("%s: cannot add pool %s: err = %d\n",
qmt->qmt_svname, pos->qpi_name, rc);
out_err:
CERROR("%s: cannot add pool %s: err = %d\n",
qmt->qmt_svname, pos->qpi_name, rc);