git: f6b47fe69528 - stable/13 - aio tests: Use unique names for zvols

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Thu, 06 Apr 2023 15:07:05 UTC
The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=f6b47fe695289ca56cc17664e6911e0c0f8814f4

commit f6b47fe695289ca56cc17664e6911e0c0f8814f4
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2023-03-25 19:41:07 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2023-04-06 14:57:40 +0000

    aio tests: Use unique names for zvols
    
    Otherwise tests which create zvols cannot be run in parallel.
    
    MFC after:      1 week
    
    (cherry picked from commit 9cefc0fb1387f6c5b0954e875b14e596167c9a45)
---
 tests/sys/aio/aio_test.c | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/tests/sys/aio/aio_test.c b/tests/sys/aio/aio_test.c
index 0c919da739e9..d7ee875f0991 100644
--- a/tests/sys/aio/aio_test.c
+++ b/tests/sys/aio/aio_test.c
@@ -974,11 +974,12 @@ ATF_TC_CLEANUP(md_waitcomplete, tc)
 #define ZVOL_NAME		"aio_testvol"
 
 static int
-aio_zvol_setup(void)
+aio_zvol_setup(const char *unique)
 {
 	FILE *pidfile;
 	int fd;
 	pid_t pid;
+	char vdev_name[160];
 	char pool_name[80];
 	char cmd[160];
 	char zvol_name[160];
@@ -987,40 +988,44 @@ aio_zvol_setup(void)
 	ATF_REQUIRE_KERNEL_MODULE("aio");
 	ATF_REQUIRE_KERNEL_MODULE("zfs");
 
-	fd = open(ZVOL_VDEV_PATHNAME, O_RDWR | O_CREAT, 0600);
+	pid = getpid();
+	snprintf(vdev_name, sizeof(vdev_name), "%s", ZVOL_VDEV_PATHNAME);
+	snprintf(pool_name, sizeof(pool_name), "%s_%s.%d", POOL_NAME, unique,
+	    pid);
+	snprintf(zvol_name, sizeof(zvol_name), "%s/%s_%s", pool_name, ZVOL_NAME,
+	    unique);
+
+	fd = open(vdev_name, O_RDWR | O_CREAT, 0600);
 	ATF_REQUIRE_MSG(fd != -1, "open failed: %s", strerror(errno));
 	ATF_REQUIRE_EQ_MSG(0,
 	    ftruncate(fd, POOL_SIZE), "ftruncate failed: %s", strerror(errno));
 	close(fd);
 
-	pid = getpid();
 	pidfile = fopen("pidfile", "w");
 	ATF_REQUIRE_MSG(NULL != pidfile, "fopen: %s", strerror(errno));
 	fprintf(pidfile, "%d", pid);
 	fclose(pidfile);
 
-	snprintf(pool_name, sizeof(pool_name), POOL_NAME ".%d", pid);
-	snprintf(zvol_name, sizeof(zvol_name), "%s/" ZVOL_NAME, pool_name);
-	snprintf(cmd, sizeof(cmd), "zpool create %s $PWD/" ZVOL_VDEV_PATHNAME,
-	    pool_name);
+	snprintf(cmd, sizeof(cmd), "zpool create %s $PWD/%s", pool_name,
+	    vdev_name);
 	ATF_REQUIRE_EQ_MSG(0, system(cmd),
 	    "zpool create failed: %s", strerror(errno));
 	snprintf(cmd, sizeof(cmd),
-	    "zfs create -o volblocksize=8192 -o volmode=dev -V "
-		ZVOL_SIZE " %s", zvol_name);
+	    "zfs create -o volblocksize=8192 -o volmode=dev -V %s %s",
+	    ZVOL_SIZE, zvol_name);
 	ATF_REQUIRE_EQ_MSG(0, system(cmd),
 	    "zfs create failed: %s", strerror(errno));
 
 	snprintf(devname, sizeof(devname), "/dev/zvol/%s", zvol_name);
 	do {
 		fd = open(devname, O_RDWR);
-	} while (fd == -1 && errno == EINTR) ;
+	} while (fd == -1 && errno == EINTR);
 	ATF_REQUIRE_MSG(fd != -1, "open failed: %s", strerror(errno));
 	return (fd);
 }
 
 static void
-aio_zvol_cleanup(void)
+aio_zvol_cleanup(const char *unique)
 {
 	FILE *pidfile;
 	pid_t testpid;
@@ -1035,7 +1040,8 @@ aio_zvol_cleanup(void)
 	ATF_REQUIRE_EQ(1, fscanf(pidfile, "%d", &testpid));
 	fclose(pidfile);
 
-	snprintf(cmd, sizeof(cmd), "zpool destroy " POOL_NAME ".%d", testpid);
+	snprintf(cmd, sizeof(cmd), "zpool destroy %s_%s.%d", POOL_NAME, unique,
+	    testpid);
 	system(cmd);
 }
 
@@ -1814,7 +1820,7 @@ ATF_TC_BODY(vectored_unaligned, tc)
 	 * Use a zvol with volmode=dev, so it will allow .d_write with
 	 * unaligned uio.  geom devices use physio, which doesn't allow that.
 	 */
-	fd = aio_zvol_setup();
+	fd = aio_zvol_setup(atf_tc_get_ident(tc));
 	aio_context_init(&ac, fd, fd, FILE_LEN);
 
 	/* Break the buffer into 3 parts:
@@ -1863,16 +1869,17 @@ ATF_TC_BODY(vectored_unaligned, tc)
 }
 ATF_TC_CLEANUP(vectored_unaligned, tc)
 {
-	aio_zvol_cleanup();
+	aio_zvol_cleanup(atf_tc_get_ident(tc));
 }
 
 static void
-aio_zvol_test(completion comp, struct sigevent *sev, bool vectored)
+aio_zvol_test(completion comp, struct sigevent *sev, bool vectored,
+    const char *unique)
 {
 	struct aio_context ac;
 	int fd;
 
-	fd = aio_zvol_setup();
+	fd = aio_zvol_setup(unique);
 	aio_context_init(&ac, fd, fd, MD_LEN);
 	if (vectored) {
 		aio_writev_test(&ac, comp, sev);
@@ -1898,11 +1905,11 @@ ATF_TC_BODY(vectored_zvol_poll, tc)
 {
 	if (atf_tc_get_config_var_as_bool_wd(tc, "ci", false))
 		atf_tc_skip("https://bugs.freebsd.org/258766");
-	aio_zvol_test(poll, NULL, true);
+	aio_zvol_test(poll, NULL, true, atf_tc_get_ident(tc));
 }
 ATF_TC_CLEANUP(vectored_zvol_poll, tc)
 {
-	aio_zvol_cleanup();
+	aio_zvol_cleanup(atf_tc_get_ident(tc));
 }
 
 ATF_TP_ADD_TCS(tp)