[PATCH 3/4] fsstress: do memset randomly before write operations

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



Recently we found a bug by trigger a page fault when io-vector of
writev is in processing. If do memset between malloc() and write
operations, memset will init the pages. So do memset randomly
maybe help to cover above situation.

Signed-off-by: Zorro Lang <zlang@xxxxxxxxxx>
---
 ltp/fsstress.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 4ff90d5..e1b73e4 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -1924,7 +1924,8 @@ do_aio_rw(int opno, long r, int flags)
 		off = (off64_t)(lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
 		off -= (off % align);
 		off %= maxfsize;
-		memset(buf, nameseq & 0xff, len);
+		/* randomly memset maybe trigger page fault at write time */
+		if (random() / 2) memset(buf, nameseq & 0xff, len);
 		io_prep_pwrite(&iocb, fd, buf, len, off);
 	} else {
 		off = (off64_t)(lr % stb.st_size);
@@ -2455,7 +2456,8 @@ dwrite_f(int opno, long r)
 	buf = memalign(diob.d_mem, len);
 	off %= maxfsize;
 	lseek64(fd, off, SEEK_SET);
-	memset(buf, nameseq & 0xff, len);
+	/* randomly memset maybe trigger page fault at write time */
+	if (random() / 2) memset(buf, nameseq & 0xff, len);
 	e = write(fd, buf, len) < 0 ? errno : 0;
 	free(buf);
 	if (v)
@@ -3672,7 +3674,8 @@ write_f(int opno, long r)
 	lseek64(fd, off, SEEK_SET);
 	len = (random() % FILELEN_MAX) + 1;
 	buf = malloc(len);
-	memset(buf, nameseq & 0xff, len);
+	/* randomly memset maybe trigger page fault at write time */
+	if (random() / 2) memset(buf, nameseq & 0xff, len);
 	e = write(fd, buf, len) < 0 ? errno : 0;
 	free(buf);
 	if (v)
@@ -3733,7 +3736,8 @@ writev_f(int opno, long r)
 	lseek64(fd, off, SEEK_SET);
 	len = (random() % FILELEN_MAX) + 1;
 	buf = malloc(len);
-	memset(buf, nameseq & 0xff, len);
+	/* randomly memset maybe trigger page fault at write time */
+	if (random() / 2) memset(buf, nameseq & 0xff, len);
 
 	iovcnt = (random() % MIN(len, IOV_MAX)) + 1;
 	iov = malloc(sizeof(struct iovec) * iovcnt);
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux