diff --git a/.github/workflows/pmem_tests_1.yml b/.github/workflows/pmem_tests_1.yml index aeb3db5452..96ca60e472 100644 --- a/.github/workflows/pmem_tests_1.yml +++ b/.github/workflows/pmem_tests_1.yml @@ -6,8 +6,8 @@ name: PMEM tests part 1 on: workflow_dispatch: schedule: - # run this job at 18:00 UTC every other day (even-numbered) - - cron: '0 18 2-31/2 * *' + # run this job at 18:00 UTC every Friday + - cron: '0 18 * * 5' permissions: {} diff --git a/.github/workflows/pmem_tests_2.yml b/.github/workflows/pmem_tests_2.yml index 5f6f217b48..42d04e70f1 100644 --- a/.github/workflows/pmem_tests_2.yml +++ b/.github/workflows/pmem_tests_2.yml @@ -6,8 +6,8 @@ name: PMEM tests part 2 on: workflow_dispatch: schedule: - # run this job at 18:00 UTC every other day (odd-numbered) - - cron: '0 18 */2 * *' + # run this job at 6:00 UTC every Saturday + - cron: '0 6 * * 6' permissions: {} @@ -19,16 +19,5 @@ jobs: with: force_enable: '["pmemcheck", "memcheck"]' valgrind: 1 - # 12h = 720m (arbitrarily picked in hope it will be enough). - timeout_minutes: 720 - - - # Test the default build with force-enabled Valgrind tooling for thread error - # detection. - Thread: - uses: ./.github/workflows/pmem_test_matrix.yml - with: - force_enable: '["drd", "helgrind"]' - valgrind: 1 - # 12h = 720m (arbitrarily picked in hope it will be enough). - timeout_minutes: 720 + # 24h = 1440m (arbitrarily picked in hope it will be enough). + timeout_minutes: 1440 diff --git a/.github/workflows/pmem_tests_3.yml b/.github/workflows/pmem_tests_3.yml new file mode 100644 index 0000000000..ae15cdd9a3 --- /dev/null +++ b/.github/workflows/pmem_tests_3.yml @@ -0,0 +1,23 @@ +# Run all tests on PMEM. +# +# This workflow is run on 'self-hosted' runners. +name: PMEM tests part 3 + +on: + workflow_dispatch: + schedule: + # run this job at 6:00 UTC every Sunday + - cron: '0 6 * * 0' + +permissions: {} + +jobs: + # Test the default build with force-enabled Valgrind tooling for thread error + # detection. + Thread: + uses: ./.github/workflows/pmem_test_matrix.yml + with: + force_enable: '["helgrind"]' + valgrind: 1 + # 24h = 1440m (arbitrarily picked in hope it will be enough). + timeout_minutes: 1440 diff --git a/.github/workflows/pmem_tests_4.yml b/.github/workflows/pmem_tests_4.yml new file mode 100644 index 0000000000..451a26e97f --- /dev/null +++ b/.github/workflows/pmem_tests_4.yml @@ -0,0 +1,23 @@ +# Run all tests on PMEM. +# +# This workflow is run on 'self-hosted' runners. +name: PMEM tests part 4 + +on: + workflow_dispatch: + schedule: + # run this job at 6:00 UTC every Monday + - cron: '0 6 * * 1' + +permissions: {} + +jobs: + # Test the default build with force-enabled Valgrind tooling for thread error + # detection. + Thread: + uses: ./.github/workflows/pmem_test_matrix.yml + with: + force_enable: '["drd"]' + valgrind: 1 + # 24h = 1440m (arbitrarily picked in hope it will be enough). + timeout_minutes: 1440 diff --git a/ChangeLog b/ChangeLog index ce59cf04ec..567c4f20ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,15 @@ -XXX +Tue Jan 13 2026 Oksana Sałyk - * Version X.X.X + * Version 2.1.3-rc1 + + - Expand the sds.at_create CTL to also cover the POOL_FEAT_CHECK_BAD_BLOCKS feature (daos-stack/pmdk#28, DAOS-18296). + - Until now, it controlled only the POOL_FEAT_SDS feature, but both may use NDCTL calls and increase stack usage. + - Fix an issue in the PMEMOBJ allocator with a potential to corrupt the allocator's metadata (daos-stack/pmdk#24, DAOS-18195). + - Fix compilation error on LoongArch. Thank you @liuxiang88 and @bgermann for your persistence in making it happen! (daos-stack/pmdk#29, pmem/pmdk#5957). + +Tue Nov 4 2025 Oksana Sałyk + + * Version 2.1.2 - Set up a new home for pmdk software (pmem/pmdk -> daos-stack/pmdk). - Reorganized PMem HW tests to accommodate changes in HW supplies (daos-stack/pmdk#9-12). diff --git a/INSTALL.md b/INSTALL.md index be172ae11a..b081d0bc85 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -39,7 +39,7 @@ cd pmdk For a stable version, checkout a [release tag](https://github.com/pmem/pmdk/releases) as follows. Otherwise skip this step to build the latest development release. ```sh -git checkout tags/2.1.1 +git checkout tags/2.1.2 ``` Once all required [dependencies](#dependencies) are installed, PMDK is built using the diff --git a/README.md b/README.md index af2ebb2bb9..011f45aa15 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ [![Scans](https://github.com/daos-stack/pmdk/actions/workflows/scans.yml/badge.svg?branch=master)](https://github.com/daos-stack/pmdk/actions/workflows/scans.yml) [![PMem test 1](https://github.com/daos-stack/pmdk/workflows/PMEM%20tests%20part%201/badge.svg)](https://github.com/daos-stack/pmdk/actions/workflows/pmem_tests_1.yml) [![PMem test 2](https://github.com/daos-stack/pmdk/workflows/PMEM%20tests%20part%202/badge.svg)](https://github.com/daos-stack/pmdk/actions/workflows/pmem_tests_2.yml) +[![PMem test 3](https://github.com/daos-stack/pmdk/workflows/PMEM%20tests%20part%203/badge.svg)](https://github.com/daos-stack/pmdk/actions/workflows/pmem_tests_3.yml) +[![PMem test 4](https://github.com/daos-stack/pmdk/workflows/PMEM%20tests%20part%204/badge.svg)](https://github.com/daos-stack/pmdk/actions/workflows/pmem_tests_4.yml) The **Persistent Memory Development Kit (PMDK)** is a collection of libraries and tools for System Administrators and Application Developers to simplify managing and accessing persistent memory devices. For more information, see https://pmem.io. @@ -107,10 +109,7 @@ information on this port, contact Rajalakshmi Srinivasaraghavan ## Contact Us -For more information on this library, contact -Tomasz Gromadzki (tomasz.gromadzki@intel.com), -Jan Michalski (jan.michalski@intel.com), -Oksana Sałyk (oksana.salyk@intel.com), -Piotr Balcer (piotr.balcer@intel.com), -Andy Rudoff (andy.rudoff@intel.com), or post to -the [Persistent Memory Programming Google group](https://groups.google.com/group/pmem). +For more information on this project, contact +Tomasz Gromadzki (tomasz.gromadzki@hpe.com), +Jan Michalski (jan-marian.michalski@hpe.com), or +Oksana Sałyk (oksana.salyk@hpe.com). diff --git a/src/common/set.c b/src/common/set.c index f82e9fd514..a3e9b80be8 100644 --- a/src/common/set.c +++ b/src/common/set.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: BSD-3-Clause /* Copyright 2015-2024, Intel Corporation */ +/* Copyright 2025, Hewlett Packard Enterprise Development LP */ /* * Copyright (c) 2016, Microsoft Corporation. All rights reserved. * @@ -3042,6 +3043,9 @@ util_pool_open(struct pool_set **setp, const char *path, size_t minpartsize, goto err_poolset_free; } + /* filter out unsupported or turned off features */ + compat_features &= attr->features.compat; + if (compat_features & POOL_FEAT_CHECK_BAD_BLOCKS) { /* check if any bad block recovery file exists */ int bfe = badblocks_recovery_file_exists(set); diff --git a/src/libpmem2/loongarch64/init.c b/src/libpmem2/loongarch64/init.c index f8b531be39..6b5572ae1d 100644 --- a/src/libpmem2/loongarch64/init.c +++ b/src/libpmem2/loongarch64/init.c @@ -36,6 +36,6 @@ pmem2_arch_init(struct pmem2_arch_info *info) { LOG(3, NULL); - info->fence = loongarch_fence; + info->fence = loongarch_memory_fence; info->flush = loongarch_flush; } diff --git a/src/libpmemobj/memblock.c b/src/libpmemobj/memblock.c index 0276ad80ba..339f8c9091 100644 --- a/src/libpmemobj/memblock.c +++ b/src/libpmemobj/memblock.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: BSD-3-Clause /* Copyright 2016-2024, Intel Corporation */ +/* Copyright 2025, Hewlett Packard Enterprise Development LP */ /* * memblock.c -- implementation of memory block @@ -1173,8 +1174,13 @@ huge_write_footer(struct chunk_header *hdr, uint32_t size_idx) struct chunk_header f = *hdr; f.type = CHUNK_TYPE_FOOTER; f.size_idx = size_idx; + + /* + * no need to transact and persist, + * footers are recreated in heap_populate_buckets + */ + VALGRIND_ADD_TO_GLOBAL_TX_IGNORE(hdr + size_idx - 1, sizeof(f)); *(hdr + size_idx - 1) = f; - /* no need to persist, footers are recreated in heap_populate_buckets */ VALGRIND_SET_CLEAN(hdr + size_idx - 1, sizeof(f)); } @@ -1185,8 +1191,8 @@ static void huge_reinit_chunk(const struct memory_block *m) { struct chunk_header *hdr = heap_get_chunk_hdr(m->heap, m); - if (hdr->type == CHUNK_TYPE_USED) - huge_write_footer(hdr, hdr->size_idx); + ASSERT(hdr->type == CHUNK_TYPE_USED || hdr->type == CHUNK_TYPE_FREE); + huge_write_footer(hdr, hdr->size_idx); } /* diff --git a/src/libpmemobj/obj.c b/src/libpmemobj/obj.c index bf2ffc8a63..b5f4f924f4 100644 --- a/src/libpmemobj/obj.c +++ b/src/libpmemobj/obj.c @@ -1059,6 +1059,7 @@ pool_attr_adjust(struct pool_attr *attr) } } else { attr->features.incompat &= ~POOL_FEAT_SDS; /* off */ + attr->features.compat &= ~POOL_FEAT_CHECK_BAD_BLOCKS; /* off */ } return 0; diff --git a/src/test/Makefile b/src/test/Makefile index c3bd32990e..c223ccae67 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -70,6 +70,8 @@ OBJ_TESTS = \ obj_memcheck\ obj_memcheck_register\ obj_memops\ + obj_ndctl_bb\ + obj_ndctl_sds\ obj_oid_thread\ obj_out_of_memory\ obj_persist_count\ diff --git a/src/test/obj_ndctl_bb/.gitignore b/src/test/obj_ndctl_bb/.gitignore new file mode 100644 index 0000000000..1f5fdc3a55 --- /dev/null +++ b/src/test/obj_ndctl_bb/.gitignore @@ -0,0 +1 @@ +obj_ndctl_bb diff --git a/src/test/obj_ndctl_bb/Makefile b/src/test/obj_ndctl_bb/Makefile new file mode 100644 index 0000000000..0c9ede86c3 --- /dev/null +++ b/src/test/obj_ndctl_bb/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP + +TARGET = obj_ndctl_bb +OBJS = obj_ndctl_bb.o + +LIBPMEMOBJ=internal-debug + +include ../Makefile.inc +LDFLAGS += $(call extract_funcs, obj_ndctl_bb.c) diff --git a/src/test/obj_ndctl_bb/TEST0 b/src/test/obj_ndctl_bb/TEST0 new file mode 100755 index 0000000000..d4e670de35 --- /dev/null +++ b/src/test/obj_ndctl_bb/TEST0 @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP +# +# +# obj_ndctl_bb/TEST0 -- check if the badblocks-related code is not run when no PMem is in use. +# DAOS-18296 +# + +. ../unittest/unittest.sh + +require_fs_type non-pmem +require_ndctl_enable +require_test_type short + +setup + +FILE=$DIR/testfile + +# obj_ndctl_bb commands +CREATE=c +OPEN=o + +expect_normal_exit obj_ndctl_bb $FILE $CREATE + +expect_normal_exit obj_ndctl_bb $FILE $OPEN + +check + +pass diff --git a/src/test/obj_ndctl_bb/TEST1 b/src/test/obj_ndctl_bb/TEST1 new file mode 100755 index 0000000000..b01d407469 --- /dev/null +++ b/src/test/obj_ndctl_bb/TEST1 @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP +# +# +# obj_ndctl_bb/TEST1 -- check if the executable works as intended. Sanity check. +# + +. ../unittest/unittest.sh + +require_real_pmem +require_ndctl_enable +require_test_type short + +setup + +TMP=tmp${UNITTEST_NUM}.log +rm -f $TMP + +FILE=$DIR/testfile + +# obj_ndctl_bb commands +CREATE=c +OPEN=o + +expect_abnormal_exit obj_ndctl_bb $FILE $CREATE +cat $ERR_LOG_FILE >> $TMP + +expect_normal_exit $PMEMPOOL$EXESUFFIX create obj $FILE + +expect_abnormal_exit obj_ndctl_bb $FILE $OPEN +cat $ERR_LOG_FILE >> $TMP + +# move combined error log in place +mv $TMP $ERR_LOG_FILE + +check + +pass diff --git a/src/test/obj_ndctl_bb/err1.log.match b/src/test/obj_ndctl_bb/err1.log.match new file mode 100644 index 0000000000..2f43dc7dc9 --- /dev/null +++ b/src/test/obj_ndctl_bb/err1.log.match @@ -0,0 +1,2 @@ +{obj_ndctl_bb.c:$(N) __wrap_badblocks_check_poolset} obj_ndctl_bb/TEST1: Error: assertion failure: 0 +{obj_ndctl_bb.c:$(N) __wrap_badblocks_recovery_file_exists} obj_ndctl_bb/TEST1: Error: assertion failure: 0 diff --git a/src/test/obj_ndctl_bb/obj_ndctl_bb.c b/src/test/obj_ndctl_bb/obj_ndctl_bb.c new file mode 100644 index 0000000000..993930e89b --- /dev/null +++ b/src/test/obj_ndctl_bb/obj_ndctl_bb.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* Copyright 2026, Hewlett Packard Enterprise Development LP */ + +/* + * obj_ndctl_bb.c -- crashes whenever badblocks-related code is run + */ + +#include + +#include "set.h" + +#include "unittest.h" + +FUNC_MOCK(badblocks_recovery_file_exists, int, struct pool_set *set) + FUNC_MOCK_RUN_DEFAULT { + UT_ASSERT(0); + } +FUNC_MOCK_END + +FUNC_MOCK(badblocks_check_poolset, int, struct pool_set *set, int create) + FUNC_MOCK_RUN_DEFAULT { + UT_ASSERT(0); + } +FUNC_MOCK_END + +int +main(int argc, char *argv[]) +{ + START(argc, argv, "obj_ndctl_bb"); + if (argc < 3) { + UT_FATAL("usage: %s \nc - create\no - open", + argv[0]); + } + + const char *path = argv[1]; + const char *cmd = argv[2]; + PMEMobjpool *pop; + + if (strlen(cmd) != 1) { + UT_FATAL("unknown command: %s", cmd); + } + + switch (cmd[0]) { + case 'c': + pop = pmemobj_create(path, NULL, PMEMOBJ_MIN_POOL, + 0600); + break; + case 'o': + pop = pmemobj_open(path, NULL); + break; + default: + UT_FATAL("unknown command: %s", cmd); + } + + UT_ASSERTne(pop, NULL); + + pmemobj_close(pop); + + DONE(NULL); +} diff --git a/src/test/obj_ndctl_sds/.gitignore b/src/test/obj_ndctl_sds/.gitignore new file mode 100644 index 0000000000..61c6a097a9 --- /dev/null +++ b/src/test/obj_ndctl_sds/.gitignore @@ -0,0 +1 @@ +obj_ndctl_sds diff --git a/src/test/obj_ndctl_sds/Makefile b/src/test/obj_ndctl_sds/Makefile new file mode 100644 index 0000000000..35442695a2 --- /dev/null +++ b/src/test/obj_ndctl_sds/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP + +TARGET = obj_ndctl_sds +OBJS = obj_ndctl_sds.o + +LIBPMEMOBJ=internal-debug + +include ../Makefile.inc +LDFLAGS += $(call extract_funcs, obj_ndctl_sds.c) diff --git a/src/test/obj_ndctl_sds/TEST0 b/src/test/obj_ndctl_sds/TEST0 new file mode 100755 index 0000000000..ccc5198967 --- /dev/null +++ b/src/test/obj_ndctl_sds/TEST0 @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP +# +# +# obj_ndctl_sds/TEST0 -- check if the shutdown-state-related code is not run when no PMem is in use. +# DAOS-18296 +# + +. ../unittest/unittest.sh + +require_fs_type non-pmem +require_ndctl_enable +require_test_type short + +setup + +FILE=$DIR/testfile + +# obj_ndctl_sds commands +CREATE=c +OPEN=o + +expect_normal_exit obj_ndctl_sds $FILE $CREATE + +expect_normal_exit obj_ndctl_sds $FILE $OPEN + +check + +pass diff --git a/src/test/obj_ndctl_sds/TEST1 b/src/test/obj_ndctl_sds/TEST1 new file mode 100755 index 0000000000..44d9b37ebe --- /dev/null +++ b/src/test/obj_ndctl_sds/TEST1 @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2026, Hewlett Packard Enterprise Development LP +# +# +# obj_ndctl_sds/TEST1 -- check if the executable works as intended. Sanity check. +# + +. ../unittest/unittest.sh + +require_real_pmem +require_ndctl_enable +require_test_type short + +setup + +TMP=tmp${UNITTEST_NUM}.log +rm -f $TMP + +FILE=$DIR/testfile + +# obj_ndctl_sds commands +CREATE=c +OPEN=o + +expect_abnormal_exit obj_ndctl_sds $FILE $CREATE +cat $ERR_LOG_FILE >> $TMP + +# The crashed process leaves $FILE in a half-baked state. Let's do it right. +rm -f $FILE +expect_normal_exit $PMEMPOOL$EXESUFFIX create obj $FILE + +expect_abnormal_exit obj_ndctl_sds $FILE $OPEN +cat $ERR_LOG_FILE >> $TMP + +# move combined error log in place +mv $TMP $ERR_LOG_FILE + +check + +pass diff --git a/src/test/obj_ndctl_sds/err1.log.match b/src/test/obj_ndctl_sds/err1.log.match new file mode 100644 index 0000000000..7f0e7cab56 --- /dev/null +++ b/src/test/obj_ndctl_sds/err1.log.match @@ -0,0 +1,2 @@ +{obj_ndctl_sds.c:$(N) __wrap_shutdown_state_init} obj_ndctl_sds/TEST1: Error: assertion failure: 0 +{obj_ndctl_sds.c:$(N) __wrap_shutdown_state_init} obj_ndctl_sds/TEST1: Error: assertion failure: 0 diff --git a/src/test/obj_ndctl_sds/obj_ndctl_sds.c b/src/test/obj_ndctl_sds/obj_ndctl_sds.c new file mode 100644 index 0000000000..ab3b75e450 --- /dev/null +++ b/src/test/obj_ndctl_sds/obj_ndctl_sds.c @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* Copyright 2026, Hewlett Packard Enterprise Development LP */ + +/* + * obj_ndctl_sds.c -- crashes whenever shutdown-state-related code is run + */ + +#include + +#include "set.h" + +#include "unittest.h" + +FUNC_MOCK(shutdown_state_init, int, struct shutdown_state *sds, + struct pool_replica *rep) + FUNC_MOCK_RUN_DEFAULT { + UT_ASSERT(0); + } +FUNC_MOCK_END + +FUNC_MOCK(shutdown_state_set_dirty, void, struct shutdown_state *sds, + struct pool_replica *rep) + FUNC_MOCK_RUN_DEFAULT { + UT_ASSERT(0); + } +FUNC_MOCK_END + +FUNC_MOCK(shutdown_state_check, int, struct shutdown_state *curr_sds, + struct shutdown_state *pool_sds, struct pool_replica *rep) + FUNC_MOCK_RUN_DEFAULT { + UT_ASSERT(0); + } +FUNC_MOCK_END + +int +main(int argc, char *argv[]) +{ + START(argc, argv, "obj_ndctl_sds"); + if (argc < 3) { + UT_FATAL("usage: %s \nc - create\no - open", + argv[0]); + } + + const char *path = argv[1]; + const char *cmd = argv[2]; + PMEMobjpool *pop; + + if (strlen(cmd) != 1) { + UT_FATAL("unknown command: %s", cmd); + } + + switch (cmd[0]) { + case 'c': + pop = pmemobj_create(path, NULL, PMEMOBJ_MIN_POOL, + 0600); + break; + case 'o': + pop = pmemobj_open(path, NULL); + break; + default: + UT_FATAL("unknown command: %s", cmd); + } + + UT_ASSERTne(pop, NULL); + + pmemobj_close(pop); + + DONE(NULL); +} diff --git a/src/test/obj_pool/TEST32 b/src/test/obj_pool/TEST32 index 2d463de024..024f22cd10 100755 --- a/src/test/obj_pool/TEST32 +++ b/src/test/obj_pool/TEST32 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2019, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/obj_pool/TEST32 -- unit test for pmemobj_open @@ -10,6 +11,9 @@ . ../unittest/unittest.sh require_test_type medium +# For non-pmem POOL_FEAT_CHECK_BAD_BLOCKS is turned off via PMEMOBJ_CONF="sds.at_create=0" +require_real_pmem +require_sds ./obj_pool setup diff --git a/src/test/obj_pool/TEST33 b/src/test/obj_pool/TEST33 index b76fb41a0f..299291164b 100755 --- a/src/test/obj_pool/TEST33 +++ b/src/test/obj_pool/TEST33 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2019, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/obj_pool/TEST33 -- unit test for pmemobj_open @@ -10,6 +11,9 @@ . ../unittest/unittest.sh require_test_type medium +# For non-pmem POOL_FEAT_CHECK_BAD_BLOCKS is turned off via PMEMOBJ_CONF="sds.at_create=0" +require_real_pmem +require_sds ./obj_pool setup diff --git a/src/test/pmempool_sync/TEST32 b/src/test/pmempool_sync/TEST32 index 3f00abadec..670ed31da6 100755 --- a/src/test/pmempool_sync/TEST32 +++ b/src/test/pmempool_sync/TEST32 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST32 -- test for sync command @@ -12,8 +13,8 @@ . ../unittest/unittest.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX @@ -35,8 +36,6 @@ expect_normal_exit $PMEMPOOL$EXESUFFIX create obj --layout pmempool$SUFFIX $POOL expect_normal_exit "$OBJ_VERIFY$EXESUFFIX $POOLSET pmempool$SUFFIX c v &>> $LOG" -turn_on_checking_bad_blocks $POOLSET - # zero blocks: offset: 2 length: 250 zero_blocks $DIR/testfile0 2 250 diff --git a/src/test/pmempool_sync/TEST33 b/src/test/pmempool_sync/TEST33 index d6ec59271a..9a5ca2b9f5 100755 --- a/src/test/pmempool_sync/TEST33 +++ b/src/test/pmempool_sync/TEST33 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST33 -- test for sync command @@ -12,8 +13,8 @@ . ../unittest/unittest.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX diff --git a/src/test/pmempool_sync/TEST34 b/src/test/pmempool_sync/TEST34 index 72e18b4aab..0d0e0ce6c9 100755 --- a/src/test/pmempool_sync/TEST34 +++ b/src/test/pmempool_sync/TEST34 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST34 -- test for sync command @@ -14,8 +15,8 @@ . setup.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX diff --git a/src/test/pmempool_sync/TEST35 b/src/test/pmempool_sync/TEST35 index 5a4368fea6..0554156118 100755 --- a/src/test/pmempool_sync/TEST35 +++ b/src/test/pmempool_sync/TEST35 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST35 -- test for sync command @@ -14,8 +15,8 @@ . setup.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX diff --git a/src/test/pmempool_sync/TEST36 b/src/test/pmempool_sync/TEST36 index 3eac293e51..19739f767d 100755 --- a/src/test/pmempool_sync/TEST36 +++ b/src/test/pmempool_sync/TEST36 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST36 -- test for sync command @@ -15,8 +16,8 @@ . setup.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX diff --git a/src/test/pmempool_sync/TEST37 b/src/test/pmempool_sync/TEST37 index 9f87982184..bc9879e5cb 100755 --- a/src/test/pmempool_sync/TEST37 +++ b/src/test/pmempool_sync/TEST37 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST37 -- test for sync command @@ -15,8 +16,8 @@ . setup.sh +require_real_pmem require_test_type medium -require_fs_type non-pmem require_build_type debug nondebug require_linked_with_ndctl $PMEMPOOL$EXESUFFIX diff --git a/src/test/pmempool_sync/TEST43 b/src/test/pmempool_sync/TEST43 index d46eeda96f..86ab559d0a 100755 --- a/src/test/pmempool_sync/TEST43 +++ b/src/test/pmempool_sync/TEST43 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST43 -- test for sync command with badblocks @@ -11,6 +12,7 @@ . ../unittest/unittest.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST44 b/src/test/pmempool_sync/TEST44 index da8b2a07f1..74ce57cafc 100755 --- a/src/test/pmempool_sync/TEST44 +++ b/src/test/pmempool_sync/TEST44 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST44 -- test for sync command with badblocks @@ -16,6 +17,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST45 b/src/test/pmempool_sync/TEST45 index b28b086a7e..67b79532a7 100755 --- a/src/test/pmempool_sync/TEST45 +++ b/src/test/pmempool_sync/TEST45 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST45 -- test for sync command with badblocks @@ -14,6 +15,7 @@ . ../unittest/unittest.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST46 b/src/test/pmempool_sync/TEST46 index 6758b2e95b..b78d19b9ef 100755 --- a/src/test/pmempool_sync/TEST46 +++ b/src/test/pmempool_sync/TEST46 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST46 -- test for sync command with badblocks @@ -14,6 +15,7 @@ . ../unittest/unittest.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST47 b/src/test/pmempool_sync/TEST47 index 19f769567a..7beb008952 100755 --- a/src/test/pmempool_sync/TEST47 +++ b/src/test/pmempool_sync/TEST47 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST47 -- test for sync command with badblocks @@ -15,6 +16,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST48 b/src/test/pmempool_sync/TEST48 index 27d85005bb..2015ee7635 100755 --- a/src/test/pmempool_sync/TEST48 +++ b/src/test/pmempool_sync/TEST48 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST48 -- test for sync command with badblocks @@ -18,6 +19,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST49 b/src/test/pmempool_sync/TEST49 index 4db82bf4c2..e9279dbca6 100755 --- a/src/test/pmempool_sync/TEST49 +++ b/src/test/pmempool_sync/TEST49 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2011-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST49 -- test for sync command with badblocks @@ -19,6 +20,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST50 b/src/test/pmempool_sync/TEST50 index 963cf1cf25..0ab62e01c6 100755 --- a/src/test/pmempool_sync/TEST50 +++ b/src/test/pmempool_sync/TEST50 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST50 -- test for sync command with badblocks @@ -19,6 +20,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST51 b/src/test/pmempool_sync/TEST51 index 5902a68634..e35b1bb1aa 100755 --- a/src/test/pmempool_sync/TEST51 +++ b/src/test/pmempool_sync/TEST51 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST51 -- test for sync command with badblocks @@ -20,6 +21,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST52 b/src/test/pmempool_sync/TEST52 index 721eeb5348..ebf20e5560 100755 --- a/src/test/pmempool_sync/TEST52 +++ b/src/test/pmempool_sync/TEST52 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST52 -- test for sync command with badblocks @@ -15,6 +16,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/pmempool_sync/TEST53 b/src/test/pmempool_sync/TEST53 index abd2e08eb2..441055510c 100755 --- a/src/test/pmempool_sync/TEST53 +++ b/src/test/pmempool_sync/TEST53 @@ -1,6 +1,7 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause # Copyright 2011-2024, Intel Corporation +# Copyright 2025, Hewlett Packard Enterprise Development LP # # # pmempool_sync/TEST53 -- test for sync command with badblocks @@ -17,6 +18,7 @@ . setup.sh +require_real_pmem require_test_type medium require_fs_type non-pmem require_build_type debug nondebug diff --git a/src/test/unittest/unittest.sh b/src/test/unittest/unittest.sh index 00ad1ba277..0b297d5f69 100644 --- a/src/test/unittest/unittest.sh +++ b/src/test/unittest/unittest.sh @@ -2610,3 +2610,25 @@ function set_test_labels() { verbose_msg "$UNITTEST_NAME: SKIP ($TEST/$REAL_FS/$BUILD$MCSTR$PROV$PM) test-labels: $* ($TEST_LABEL required)" exit 0 } + +# +# require_real_pmem -- run tests only on real pmem +# +function require_real_pmem() { + local path="$1" + if [ -z "$path" ]; then + path="$DIR" + fi + if [ "$PMEM_IS_PMEM_FORCE" == "1" ]; then + verbose_msg "$UNITTEST_NAME: SKIP ($TEST/$REAL_FS/$BUILD$MCSTR$PROV$PM) PMEM is forced (PMEM_IS_PMEM_FORCE=$PMEM_IS_PMEM_FORCE), real PMEM required" + exit 0 + fi + case "$REAL_FS" in + pmem) + ;; + *) + verbose_msg "$UNITTEST_NAME: SKIP ($TEST/$REAL_FS/$BUILD$MCSTR$PROV$PM) REAL_FS $REAL_FS (pmem required)" + exit 0 + ;; + esac +} diff --git a/src/test/util_sds_check/TEST0 b/src/test/util_sds_check/TEST0 index 14ff63eb3c..86cbacc329 100755 --- a/src/test/util_sds_check/TEST0 +++ b/src/test/util_sds_check/TEST0 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST0 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_dirty_clear diff --git a/src/test/util_sds_check/TEST1 b/src/test/util_sds_check/TEST1 index f2417575af..dee5359277 100755 --- a/src/test/util_sds_check/TEST1 +++ b/src/test/util_sds_check/TEST1 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST1 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_invalid_checksum diff --git a/src/test/util_sds_check/TEST2 b/src/test/util_sds_check/TEST2 index 54cc7aeceb..0b9dc9ed75 100755 --- a/src/test/util_sds_check/TEST2 +++ b/src/test/util_sds_check/TEST2 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST2 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_dirty_set diff --git a/src/test/util_sds_check/TEST3 b/src/test/util_sds_check/TEST3 index 958df6eb8b..d3ccc46cde 100755 --- a/src/test/util_sds_check/TEST3 +++ b/src/test/util_sds_check/TEST3 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST3 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_invalid_uuid diff --git a/src/test/util_sds_check/TEST4 b/src/test/util_sds_check/TEST4 index 79d1e9acc8..6026bf7be4 100755 --- a/src/test/util_sds_check/TEST4 +++ b/src/test/util_sds_check/TEST4 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST4 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_invalid_uuid_set_dirty diff --git a/src/test/util_sds_check/TEST5 b/src/test/util_sds_check/TEST5 index ccf7de34d6..a15d99599b 100755 --- a/src/test/util_sds_check/TEST5 +++ b/src/test/util_sds_check/TEST5 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST5 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_invalid_usc diff --git a/src/test/util_sds_check/TEST6 b/src/test/util_sds_check/TEST6 index aa9038ec35..e138f6a938 100755 --- a/src/test/util_sds_check/TEST6 +++ b/src/test/util_sds_check/TEST6 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST6 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_invalid_usc_set_dirty diff --git a/src/test/util_sds_check/TEST7 b/src/test/util_sds_check/TEST7 index beed80e62d..2b5142c911 100755 --- a/src/test/util_sds_check/TEST7 +++ b/src/test/util_sds_check/TEST7 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # SPDX-License-Identifier: BSD-3-Clause -# Copyright 2025, Hewlett Packard Enterprise Development LP +# Copyright 2025-2026, Hewlett Packard Enterprise Development LP # # src/test/util_sds_check/TEST7 -- unittest for shutdown_state_check @@ -14,6 +14,8 @@ require_fs_type none require_build_type debug +require_sds ./util_sds_check + setup expect_normal_exit ./util_sds_check test_happy_day