From 63166614cc5d1eede4b58ce50a965c87a96ad4c6 Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Tue, 12 May 2026 03:22:17 -0400 Subject: [PATCH] DAOS-18866 vos: unconditional punch fix Return DER_NONEXIST error when object doesn't exist for unconditional puch case. This patch also fixed vos_obj_incarnate() to return DER_NONEXIST error when CREATE flag isn't present. Signed-off-by: Niu Yawei --- src/vos/vos_obj.c | 10 ++++++++++ src/vos/vos_obj_cache.c | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/vos/vos_obj.c b/src/vos/vos_obj.c index bdc45b071ef..4d376d79551 100644 --- a/src/vos/vos_obj.c +++ b/src/vos/vos_obj.c @@ -494,6 +494,16 @@ vos_obj_punch(daos_handle_t coh, daos_unit_oid_t oid, daos_epoch_t epoch, if (rc != 0) goto reset; + if (!(hold_flags & VOS_OBJ_CREATE) && (obj->obj_df == NULL)) { + rc = vos_ilog_ts_add(ts_set, NULL, &oid, sizeof(oid)); + D_ASSERT(rc == 0); + + rc = -DER_NONEXIST; + vos_obj_release(obj, 0, true); + obj = NULL; + goto reset; + } + rc = vos_tx_begin(dth, vos_cont2umm(cont), cont->vc_pool->vp_sysdb, obj); if (rc != 0) goto reset; diff --git a/src/vos/vos_obj_cache.c b/src/vos/vos_obj_cache.c index 002fb2e4ca9..8e4da564f66 100644 --- a/src/vos/vos_obj_cache.c +++ b/src/vos/vos_obj_cache.c @@ -545,6 +545,8 @@ vos_obj_incarnate(struct vos_object *obj, daos_epoch_range_t *epr, daos_epoch_t if (rc == 0) { obj->obj_sync_epoch = obj->obj_df->vo_sync; } else if (rc == -DER_NONEXIST) { + if (!(flags & VOS_OBJ_CREATE)) + return -DER_NONEXIST; rc = vos_oi_alloc(cont, obj->obj_id, epr->epr_hi, &obj->obj_df, ts_set); if (rc) { DL_ERROR(rc, DF_CONT ": Failed to allocate OI " DF_UOID ".",