Skip to content

Commit

Permalink
DAOS-15517 rebuild: address Niu's comment
Browse files Browse the repository at this point in the history
Required-githooks: true

Signed-off-by: Xuezhao Liu <xuezhao.liu@intel.com>
  • Loading branch information
liuxuezhao committed Mar 29, 2024
1 parent 577cf4b commit d389588
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 5 deletions.
3 changes: 2 additions & 1 deletion src/rebuild/rebuild_internal.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* (C) Copyright 2017-2023 Intel Corporation.
* (C) Copyright 2017-2024 Intel Corporation.
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/
Expand Down Expand Up @@ -312,6 +312,7 @@ rebuild_tls_get()

void rpt_get(struct rebuild_tgt_pool_tracker *rpt);
void rpt_put(struct rebuild_tgt_pool_tracker *rpt);
void rpt_delete(struct rebuild_tgt_pool_tracker *rpt);

struct rebuild_pool_tls *
rebuild_pool_tls_lookup(uuid_t pool_uuid, unsigned int ver, uint32_t gen);
Expand Down
4 changes: 3 additions & 1 deletion src/rebuild/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -1228,8 +1228,10 @@ rebuild_tgt_scan_handler(crt_rpc_t *rpc)
if (tls && tls->rebuild_pool_status == 0 && rc != 0)
tls->rebuild_pool_status = rc;

if (rpt)
if (rpt) {
rpt_delete(rpt);
rpt_put(rpt);
}
ro = crt_reply_get(rpc);
ro->rso_status = rc;
ro->rso_stable_epoch = d_hlc_get();
Expand Down
30 changes: 27 additions & 3 deletions src/rebuild/srv.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ rpt_insert(struct rebuild_tgt_pool_tracker *rpt)
ABT_rwlock_unlock(rebuild_gst.rg_ttl_rwlock);
}

static void
void
rpt_delete(struct rebuild_tgt_pool_tracker *rpt)
{
D_ASSERT(dss_get_module_info()->dmi_xs_id == 0);
Expand Down Expand Up @@ -1065,10 +1065,20 @@ rpt_get(struct rebuild_tgt_pool_tracker *rpt)
ABT_mutex_unlock(rpt->rt_lock);
}

static int
rpt_put_destroy(void *data)
{
struct rebuild_tgt_pool_tracker *rpt = data;

rpt_destroy(rpt);
return 0;
}

void
rpt_put(struct rebuild_tgt_pool_tracker *rpt)
rpt_put(struct rebuild_tgt_pool_tracker *rpt)
{
bool zombie;
int rc;

ABT_mutex_lock(rpt->rt_lock);
rpt->rt_refcount--;
Expand All @@ -1078,8 +1088,22 @@ rpt_put(struct rebuild_tgt_pool_tracker *rpt)
ABT_cond_signal(rpt->rt_fini_cond);
zombie = (rpt->rt_refcount == 0);
ABT_mutex_unlock(rpt->rt_lock);
if (zombie)
if (!zombie)
return;

if (dss_get_module_info()->dmi_xs_id == 0) {
rpt_destroy(rpt);
} else {
/* Possibly triggered by VOS target XS by obj_inflight_io_check() ->
* ds_rebuild_running_query(), but rpt_destroy() -> ds_pool_put() can only
* be called in system XS.
* If dss_ult_execute failed that due to fatal system error (no memory
* or ABT failure), throw an ERR log.
*/
rc = dss_ult_execute(rpt_put_destroy, rpt, NULL, NULL, DSS_XS_SYS, 0, 0);
if (rc)
DL_ERROR(rc, "failed to destroy rpt %p.\n", rpt);

Check warning on line 1105 in src/rebuild/srv.c

View workflow job for this annotation

GitHub Actions / Logging macro checking

check-return, Line contains too many newlines
}
}

static void
Expand Down

0 comments on commit d389588

Please sign in to comment.