* Copyright 2008 Sun Microsystems, Inc. All rights reserved
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2014 Intel Corporation.
+ * Copyright (c) 2012, 2017, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (*pos >= pool_tgt_count(iter->lpi_pool))
return NULL;
+ OBD_FAIL_TIMEOUT(OBD_FAIL_OST_LIST_ASSERT, cfs_fail_val);
+
/* iterate to find a non empty entry */
prev_idx = iter->lpi_idx;
- down_read(&pool_tgt_rw_sem(iter->lpi_pool));
iter->lpi_idx++;
- if (iter->lpi_idx == pool_tgt_count(iter->lpi_pool)) {
+ if (iter->lpi_idx >= pool_tgt_count(iter->lpi_pool)) {
iter->lpi_idx = prev_idx; /* we stay on the last entry */
- up_read(&pool_tgt_rw_sem(iter->lpi_pool));
return NULL;
}
- up_read(&pool_tgt_rw_sem(iter->lpi_pool));
(*pos)++;
/* return != NULL to continue */
return iter;
iter->lpi_idx = 0;
seq->private = iter;
+ down_read(&pool_tgt_rw_sem(pool));
if (*pos > 0) {
loff_t i;
void *ptr;
struct lod_pool_iterator *iter = seq->private;
if (iter != NULL && iter->lpi_magic == POOL_IT_MAGIC) {
+ up_read(&pool_tgt_rw_sem(iter->lpi_pool));
seq->private = iter->lpi_pool;
lod_pool_putref(iter->lpi_pool);
OBD_FREE_PTR(iter);
LASSERT(iter->lpi_pool != NULL);
LASSERT(iter->lpi_idx <= pool_tgt_count(iter->lpi_pool));
- down_read(&pool_tgt_rw_sem(iter->lpi_pool));
tgt = pool_tgt(iter->lpi_pool, iter->lpi_idx);
- up_read(&pool_tgt_rw_sem(iter->lpi_pool));
if (tgt != NULL)
seq_printf(seq, "%s\n", obd_uuid2str(&(tgt->ltd_uuid)));
op->op_array = NULL;
op->op_count = 0;
init_rwsem(&op->op_rw_sem);
- op->op_size = count;
- OBD_ALLOC(op->op_array, op->op_size * sizeof(op->op_array[0]));
+ op->op_size = count * sizeof(op->op_array[0]);
+ OBD_ALLOC(op->op_array, op->op_size);
if (op->op_array == NULL) {
op->op_size = 0;
RETURN(-ENOMEM);
int lod_ost_pool_extend(struct ost_pool *op, unsigned int min_count)
{
__u32 *new;
- int new_size;
+ __u32 new_size;
LASSERT(min_count != 0);
- if (op->op_count < op->op_size)
+ if (op->op_count * sizeof(op->op_array[0]) < op->op_size)
return 0;
- new_size = max(min_count, 2 * op->op_size);
- OBD_ALLOC(new, new_size * sizeof(op->op_array[0]));
+ new_size = max_t(__u32, min_count * sizeof(op->op_array[0]),
+ 2 * op->op_size);
+ OBD_ALLOC(new, new_size);
if (new == NULL)
return -ENOMEM;
/* copy old array to new one */
- memcpy(new, op->op_array, op->op_size * sizeof(op->op_array[0]));
- OBD_FREE(op->op_array, op->op_size * sizeof(op->op_array[0]));
+ memcpy(new, op->op_array, op->op_size);
+ OBD_FREE(op->op_array, op->op_size);
op->op_array = new;
op->op_size = new_size;
down_write(&op->op_rw_sem);
- OBD_FREE(op->op_array, op->op_size * sizeof(op->op_array[0]));
+ OBD_FREE(op->op_array, op->op_size);
op->op_array = NULL;
op->op_count = 0;
op->op_size = 0;
if (rc)
GOTO(out_err, rc);
- lod_qos_rr_init(&new_pool->pool_rr);
+ lu_qos_rr_init(&new_pool->pool_rr);
+
rc = lod_ost_pool_init(&new_pool->pool_rr.lqr_pool, 0);
if (rc)
GOTO(out_free_pool_obds, rc);