Module Name:    src
Committed By:   hannken
Date:           Wed Feb  6 09:05:01 UTC 2013

Modified Files:
        src/tests/fs/common: snapshot.c
        src/tests/fs/ffs: t_snapshot.c t_snapshot_log.c t_snapshot_v2.c
        src/tests/fs/msdosfs: t_snapshot.c

Log Message:
Test taking a snapshot from a stressed file system.
Checks snapshot meta data only with fsck.

OK: Antti Kantee <po...@netbsd.org>


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/fs/common/snapshot.c
cvs rdiff -u -r1.5 -r1.6 src/tests/fs/ffs/t_snapshot.c
cvs rdiff -u -r1.1 -r1.2 src/tests/fs/ffs/t_snapshot_log.c \
    src/tests/fs/ffs/t_snapshot_v2.c
cvs rdiff -u -r1.1 -r1.2 src/tests/fs/msdosfs/t_snapshot.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/fs/common/snapshot.c
diff -u src/tests/fs/common/snapshot.c:1.6 src/tests/fs/common/snapshot.c:1.7
--- src/tests/fs/common/snapshot.c:1.6	Sat Feb 12 18:13:46 2011
+++ src/tests/fs/common/snapshot.c	Wed Feb  6 09:05:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: snapshot.c,v 1.6 2011/02/12 18:13:46 bouyer Exp $	*/
+/*	$NetBSD: snapshot.c,v 1.7 2013/02/06 09:05:01 hannken Exp $	*/
 
 #include <sys/types.h>
 #include <sys/ioctl.h>
@@ -8,6 +8,7 @@
 
 #include <atf-c.h>
 #include <fcntl.h>
+#include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -114,8 +115,114 @@ ATF_TC_CLEANUP(snapshot, tc)
 	unlink(IMGNAME);
 }
 
+ATF_TC_WITH_CLEANUP(snapshotstress);
+ATF_TC_HEAD(snapshotstress, tc)
+{
+
+	atf_tc_set_md_var(tc, "descr", "snapshot on active file system");
+}
+
+#define NACTIVITY 4
+
+static bool activity_stop = false;
+static pid_t wrkpid;
+
+static void *
+fs_activity(void *arg)
+{
+	int di, fi;
+	char *prefix = arg, path[128];
+
+	rump_pub_lwproc_newlwp(wrkpid);
+
+	RL(rump_sys_mkdir(prefix, 0777));
+	while (! activity_stop) {
+		for (di = 0; di < 5; di++) {
+			snprintf(path, sizeof(path), "%s/d%d", prefix, di);
+			RL(rump_sys_mkdir(path, 0777));
+			for (fi = 0; fi < 5; fi++) {
+				snprintf(path, sizeof(path), "%s/d%d/f%d",
+				    prefix, di, fi);
+				makefile(path);
+			}
+		}
+		for (di = 0; di < 5; di++) {
+			for (fi = 0; fi < 5; fi++) {
+				snprintf(path, sizeof(path), "%s/d%d/f%d",
+				    prefix, di, fi);
+				RL(rump_sys_unlink(path));
+			}
+			snprintf(path, sizeof(path), "%s/d%d", prefix, di);
+			RL(rump_sys_rmdir(path));
+		}
+	}
+	RL(rump_sys_rmdir(prefix));
+
+	rump_pub_lwproc_releaselwp();
+
+	return NULL;
+}
+
+ATF_TC_BODY(snapshotstress, tc)
+{
+	pthread_t at[NACTIVITY];
+	struct fss_set fss;
+	char prefix[NACTIVITY][128];
+	int i, fssfd;
+
+	if (system(NEWFS) == -1)
+		atf_tc_fail_errno("cannot create file system");
+	/* Force SMP so the stress makes sense. */
+	RL(setenv("RUMP_NCPU", "4", 1));
+	RZ(rump_init());
+	/* Prepare for fsck to use the RUMP /dev/fss0. */
+	RL(rump_init_server("unix://commsock"));
+	RL(setenv("LD_PRELOAD", "/usr/lib/librumphijack.so", 1));
+	RL(setenv("RUMP_SERVER", "unix://commsock", 1));
+	RL(setenv("RUMPHIJACK", "blanket=/dev/rfss0", 1));
+	begin();
+
+	RL(rump_sys_mkdir("/mnt", 0777));
+
+	rump_pub_etfs_register("/diskdev", IMGNAME, RUMP_ETFS_BLK);
+
+	mount_diskfs("/diskdev", "/mnt");
+
+	/* Start file system activity. */
+	RL(wrkpid = rump_sys_getpid());
+	for (i = 0; i < NACTIVITY; i++) {
+		snprintf(prefix[i], sizeof(prefix[i]),  "/mnt/a%d", i);
+		RL(pthread_create(&at[i], NULL, fs_activity, prefix[i]));
+		sleep(1);
+	}
+
+	fssfd = rump_sys_open("/dev/rfss0", O_RDWR);
+	if (fssfd == -1)
+		atf_tc_fail_errno("cannot open fss");
+	makefile(BAKNAME);
+	memset(&fss, 0, sizeof(fss));
+	fss.fss_mount = __UNCONST("/mnt");
+	fss.fss_bstore = __UNCONST(BAKNAME);
+	fss.fss_csize = 0;
+	if (rump_sys_ioctl(fssfd, FSSIOCSET, &fss) == -1)
+		atf_tc_fail_errno("create snapshot");
+
+	activity_stop = true;
+	for (i = 0; i < NACTIVITY; i++)
+		RL(pthread_join(at[i], NULL));
+
+	RL(system(FSCK " /dev/rfss0"));
+}
+
+ATF_TC_CLEANUP(snapshotstress, tc)
+{
+
+	unlink(IMGNAME);
+}
+
 ATF_TP_ADD_TCS(tp)
 {
 	ATF_TP_ADD_TC(tp, snapshot);
+	ATF_TP_ADD_TC(tp, snapshotstress);
 	return 0;
 }

Index: src/tests/fs/ffs/t_snapshot.c
diff -u src/tests/fs/ffs/t_snapshot.c:1.5 src/tests/fs/ffs/t_snapshot.c:1.6
--- src/tests/fs/ffs/t_snapshot.c:1.5	Fri Nov  5 11:31:15 2010
+++ src/tests/fs/ffs/t_snapshot.c	Wed Feb  6 09:05:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_snapshot.c,v 1.5 2010/11/05 11:31:15 pooka Exp $	*/
+/*	$NetBSD: t_snapshot.c,v 1.6 2013/02/06 09:05:01 hannken Exp $	*/
 
 #include <sys/types.h>
 #include <sys/mount.h>
@@ -19,6 +19,7 @@
 
 #define IMGNAME "ffs.img"
 #define NEWFS "newfs -F -s 10000 " IMGNAME
+#define FSCK "fsck_ffs -fn -F"
 #define BAKNAME "/mnt/le_snapp"
 
 static void

Index: src/tests/fs/ffs/t_snapshot_log.c
diff -u src/tests/fs/ffs/t_snapshot_log.c:1.1 src/tests/fs/ffs/t_snapshot_log.c:1.2
--- src/tests/fs/ffs/t_snapshot_log.c:1.1	Fri Nov  5 11:32:09 2010
+++ src/tests/fs/ffs/t_snapshot_log.c	Wed Feb  6 09:05:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_snapshot_log.c,v 1.1 2010/11/05 11:32:09 pooka Exp $	*/
+/*	$NetBSD: t_snapshot_log.c,v 1.2 2013/02/06 09:05:01 hannken Exp $	*/
 
 #include <sys/types.h>
 #include <sys/mount.h>
@@ -19,6 +19,7 @@
 
 #define IMGNAME "ffs.img"
 #define NEWFS "newfs -F -s 10000 " IMGNAME
+#define FSCK "fsck_ffs -fn -F"
 #define BAKNAME "/mnt/le_snapp"
 
 static void
Index: src/tests/fs/ffs/t_snapshot_v2.c
diff -u src/tests/fs/ffs/t_snapshot_v2.c:1.1 src/tests/fs/ffs/t_snapshot_v2.c:1.2
--- src/tests/fs/ffs/t_snapshot_v2.c:1.1	Fri Nov 19 12:36:49 2010
+++ src/tests/fs/ffs/t_snapshot_v2.c	Wed Feb  6 09:05:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_snapshot_v2.c,v 1.1 2010/11/19 12:36:49 pooka Exp $	*/
+/*	$NetBSD: t_snapshot_v2.c,v 1.2 2013/02/06 09:05:01 hannken Exp $	*/
 
 #include <sys/types.h>
 #include <sys/mount.h>
@@ -19,6 +19,7 @@
 
 #define IMGNAME "ffs.img"
 #define NEWFS "newfs -F -s 10000 -O 2 " IMGNAME
+#define FSCK "fsck_ffs -fn -F"
 #define BAKNAME "/mnt/le_snapp"
 
 static void

Index: src/tests/fs/msdosfs/t_snapshot.c
diff -u src/tests/fs/msdosfs/t_snapshot.c:1.1 src/tests/fs/msdosfs/t_snapshot.c:1.2
--- src/tests/fs/msdosfs/t_snapshot.c:1.1	Tue Apr 13 10:21:47 2010
+++ src/tests/fs/msdosfs/t_snapshot.c	Wed Feb  6 09:05:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_snapshot.c,v 1.1 2010/04/13 10:21:47 pooka Exp $	*/
+/*	$NetBSD: t_snapshot.c,v 1.2 2013/02/06 09:05:01 hannken Exp $	*/
 
 #include <sys/types.h>
 #include <sys/mount.h>
@@ -21,6 +21,7 @@
 
 #define IMGNAME "msdosfs.img"
 #define NEWFS "newfs_msdos -C 5M " IMGNAME
+#define FSCK "fsck_msdos -fn"
 #define BAKNAME "/stor/snap"
 
 static void

Reply via email to