- correct error handling in lod_new_pool - ENOMEM
from tgt_pool_init may cause incorrect pool_count.
- optimisation in lu_tgt_pool_add. Do not extend
a pool, if the target is already exists.
HPE-bug-id: LUS-6995
Change-Id: I0ea00d335217f3994334bd02ae36c34653e7da98
Reviewed-by: Alexander Zarochentsev <c17826@cray.com>
Reviewed-by: Artem Blagodarenko <artem.blagodarenko@hpe.com>
Signed-off-by: Sergey Cheremencev <sergey.cheremencev@hpe.com>
Reviewed-on: https://review.whamcloud.com/45137
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
atomic_set(&new_pool->pool_refcount, 1);
rc = lu_tgt_pool_init(&new_pool->pool_obds, 0);
if (rc)
- GOTO(out_err, rc);
+ GOTO(out_free_pool, rc);
lu_qos_rr_init(&new_pool->pool_rr);
lu_tgt_pool_free(&new_pool->pool_rr.lqr_pool);
out_free_pool_obds:
lu_tgt_pool_free(&new_pool->pool_obds);
+out_free_pool:
OBD_FREE_PTR(new_pool);
return rc;
}
atomic_set(&new_pool->pool_refcount, 1);
rc = lu_tgt_pool_init(&new_pool->pool_obds, 0);
if (rc)
- GOTO(out_err, rc);
+ GOTO(out_free_pool, rc);
#ifdef CONFIG_PROC_FS
/* get ref for /proc file */
spin_unlock(&obd->obd_dev_lock);
lprocfs_remove(&new_pool->pool_proc_entry);
lu_tgt_pool_free(&new_pool->pool_obds);
+out_free_pool:
OBD_FREE_PTR(new_pool);
return rc;
down_write(&op->op_rw_sem);
- rc = lu_tgt_pool_extend(op, min_count);
- if (rc)
- GOTO(out, rc);
-
/* search ost in pool array */
for (i = 0; i < op->op_count; i++) {
if (op->op_array[i] == idx)
GOTO(out, rc = -EEXIST);
}
+
+ rc = lu_tgt_pool_extend(op, min_count);
+ if (rc)
+ GOTO(out, rc);
+
/* ost not found we add it */
op->op_array[op->op_count] = idx;
op->op_count++;