From da151ae4fc34f2c2a463b34a495549700160d7f9 Mon Sep 17 00:00:00 2001 From: Li Wei Date: Wed, 11 Mar 2026 11:45:32 +0900 Subject: [PATCH] DAOS-18673 pool: Initialize sp_recov_lock Looks like ds_pool.sp_recov_lock is not initialized via ABT_rwlock_create. This led to the following ABT error, #5 in ds_cont_tgt_open at src/container/srv_target.c:1954 #6 in cont_iv_ent_update at src/container/container_iv.c:646 #7 in update_iv_value at src/engine/server_iv.c:280 #8 in iv_on_update_internal at src/engine/server_iv.c:490 #9 in ivc_on_update at src/engine/server_iv.c:530 #10 in crt_iv_update_internal at src/cart/crt_iv.c:3438 #11 in crt_iv_update at src/cart/crt_iv.c:3559 #12 in iv_op_internal at src/engine/server_iv.c:1080 #13 in _iv_op at src/engine/server_iv.c:1129 #14 in iv_op at src/engine/server_iv.c:1241 #15 in ds_iv_update at src/engine/server_iv.c:1287 #16 in cont_iv_update at src/container/container_iv.c:867 #17 in cont_iv_capability_update at src/container/container_iv.c:1245 #18 in cont_open at src/container/srv_container.c:2821 #19 in cont_op_with_cont at src/container/srv_container.c:5613 #20 in cont_op_with_svc at src/container/srv_container.c:5845 #21 in ds_cont_op_handler at src/container/srv_container.c:6064 #22 in ds_cont_op_handler_v8 at src/container/srv_container.c:6108 #23 in crt_handle_rpc at src/cart/crt_rpc.c:1747 where the line was #5 in ds_cont_tgt_open at src/container/srv_target.c:1954 1954 DABT_RWLOCK_RDLOCK(pool->sp_recov_lock); Signed-off-by: Li Wei --- src/pool/srv_target.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pool/srv_target.c b/src/pool/srv_target.c index b7fe7dfe2c8..4d3d0607e57 100644 --- a/src/pool/srv_target.c +++ b/src/pool/srv_target.c @@ -1,7 +1,7 @@ /* * (C) Copyright 2016-2025 Intel Corporation. * (C) Copyright 2025 Google LLC - * (C) Copyright 2025 Hewlett Packard Enterprise Development LP + * (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP * * SPDX-License-Identifier: BSD-2-Clause-Patent */ @@ -903,6 +903,12 @@ pool_alloc_ref(void *key, unsigned int ksize, void *varg, if (rc != ABT_SUCCESS) D_GOTO(err_mutex, rc = dss_abterr2der(rc)); + rc = ABT_rwlock_create(&pool->sp_recov_lock); + if (rc != ABT_SUCCESS) { + rc = dss_abterr2der(rc); + goto err_cond; + } + D_INIT_LIST_HEAD(&pool->sp_ec_ephs_list); uuid_copy(pool->sp_uuid, key); D_INIT_LIST_HEAD(&pool->sp_hdls); @@ -922,7 +928,7 @@ pool_alloc_ref(void *key, unsigned int ksize, void *varg, if (rc != 0) { D_ERROR(DF_UUID": failed to set up ds_pool metrics: %d\n", DP_UUID(key), rc); - goto err_cond; + goto err_recov_lock; } uuid_unparse_lower(key, group_id); @@ -952,6 +958,8 @@ pool_alloc_ref(void *key, unsigned int ksize, void *varg, DP_UUID(pool->sp_uuid), DP_RC(rc_tmp)); err_metrics: ds_pool_metrics_stop(pool); +err_recov_lock: + ABT_rwlock_free(&pool->sp_recov_lock); err_cond: ABT_cond_free(&pool->sp_fetch_hdls_cond); err_mutex: @@ -994,6 +1002,7 @@ pool_free_ref(struct daos_llink *llink) if (pool->sp_map_bc != NULL) ds_pool_put_map_bc(pool->sp_map_bc); + ABT_rwlock_free(&pool->sp_recov_lock); ABT_cond_free(&pool->sp_fetch_hdls_cond); ABT_mutex_free(&pool->sp_mutex); ABT_rwlock_free(&pool->sp_lock);