* [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list
@ 2017-03-23 8:10 Zorro Lang
2017-03-23 8:10 ` [PATCH v8 2/2] xfs/068: update golden output due to new operations in fsstress Zorro Lang
2017-03-25 18:14 ` [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Eryu Guan
0 siblings, 2 replies; 3+ messages in thread
From: Zorro Lang @ 2017-03-23 8:10 UTC (permalink / raw)
To: fstests
mmap as a popular and basic operation, most of softwares use it to
access files. More and more customers report bugs related with
mmap/munmap and other stress conditions.
So add mmap read/write test into fsstress to increase mmap related
stress to reproduce or find more bugs easily.
Signed-off-by: Zorro Lang <zlang@redhat.com>
---
Hi,
V8 add "struct print_flags mmap_flags[]" and "translate_mmap_flags" definition,
use it to print more details about mmap flags.
Thanks,
Zorro
configure.ac | 1 +
ltp/fsstress.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/global.h | 4 ++
3 files changed, 129 insertions(+)
diff --git a/configure.ac b/configure.ac
index fa48d2f..246f92e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,6 +32,7 @@ AC_HEADER_STDC
xfs/platform_defs.h \
btrfs/ioctl.h \
cifs/ioctl.h \
+ sys/mman.h \
])
AC_CHECK_HEADERS([xfs/xfs_log_format.h],,,[
diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 7e7cf60..96a328c 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -69,6 +69,8 @@ typedef enum {
OP_LINK,
OP_MKDIR,
OP_MKNOD,
+ OP_MREAD,
+ OP_MWRITE,
OP_PUNCH,
OP_ZERO,
OP_COLLAPSE,
@@ -168,6 +170,8 @@ void getdents_f(int, long);
void link_f(int, long);
void mkdir_f(int, long);
void mknod_f(int, long);
+void mread_f(int, long);
+void mwrite_f(int, long);
void punch_f(int, long);
void zero_f(int, long);
void collapse_f(int, long);
@@ -208,6 +212,8 @@ opdesc_t ops[] = {
{ OP_LINK, "link", link_f, 1, 1 },
{ OP_MKDIR, "mkdir", mkdir_f, 2, 1 },
{ OP_MKNOD, "mknod", mknod_f, 2, 1 },
+ { OP_MREAD, "mread", mread_f, 2, 0 },
+ { OP_MWRITE, "mwrite", mwrite_f, 2, 1 },
{ OP_PUNCH, "punch", punch_f, 1, 1 },
{ OP_ZERO, "zero", zero_f, 1, 1 },
{ OP_COLLAPSE, "collapse", collapse_f, 1, 1 },
@@ -2655,6 +2661,124 @@ mknod_f(int opno, long r)
free_pathname(&f);
}
+#ifdef HAVE_SYS_MMAN_H
+struct print_flags mmap_flags[] = {
+ { MAP_SHARED, "SHARED"},
+ { MAP_PRIVATE, "PRIVATE"},
+ { -1, NULL}
+};
+
+#define translate_mmap_flags(flags) \
+ ({translate_flags(flags, "|", mmap_flags);})
+#endif
+
+void
+do_mmap(int opno, long r, int prot)
+{
+#ifdef HAVE_SYS_MMAN_H
+ char *addr;
+ int e;
+ pathname_t f;
+ int fd;
+ size_t len;
+ __int64_t lr;
+ off64_t off;
+ int flags;
+ struct stat64 stb;
+ int v;
+ char st[1024];
+
+ init_pathname(&f);
+ if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) {
+ if (v)
+ printf("%d/%d: do_mmap - no filename\n", procid, opno);
+ free_pathname(&f);
+ return;
+ }
+ fd = open_path(&f, O_RDWR);
+ e = fd < 0 ? errno : 0;
+ check_cwd();
+ if (fd < 0) {
+ if (v)
+ printf("%d/%d: do_mmap - open %s failed %d\n",
+ procid, opno, f.path, e);
+ free_pathname(&f);
+ return;
+ }
+ if (fstat64(fd, &stb) < 0) {
+ if (v)
+ printf("%d/%d: do_mmap - fstat64 %s failed %d\n",
+ procid, opno, f.path, errno);
+ free_pathname(&f);
+ close(fd);
+ return;
+ }
+ inode_info(st, sizeof(st), &stb, v);
+ if (stb.st_size == 0) {
+ if (v)
+ printf("%d/%d: do_mmap - %s%s zero size\n", procid, opno,
+ f.path, st);
+ free_pathname(&f);
+ close(fd);
+ return;
+ }
+
+ lr = ((__int64_t)random() << 32) + random();
+ off = (off64_t)(lr % stb.st_size);
+ off &= (off64_t)(~(sysconf(_SC_PAGE_SIZE) - 1));
+ len = (size_t)(random() % MIN(stb.st_size - off, FILELEN_MAX)) + 1;
+
+ flags = (random() % 2) ? MAP_SHARED : MAP_PRIVATE;
+ addr = mmap(NULL, len, prot, flags, fd, off);
+ e = (addr == MAP_FAILED) ? errno : 0;
+ if (e) {
+ if (v)
+ printf("%d/%d: do_mmap - mmap failed %s%s [%lld,%d,%s] %d\n",
+ procid, opno, f.path, st, (long long)off,
+ (int)len, translate_mmap_flags(flags), e);
+ free_pathname(&f);
+ close(fd);
+ return;
+ }
+
+ if (prot & PROT_WRITE) {
+ /* PROT_READ maybe set, if PROT_WRITE is set. Not vice versa */
+ memset(addr, nameseq & 0xff, len);
+ } else {
+ char *buf;
+ if ((buf = malloc(len)) != NULL) {
+ memcpy(buf, addr, len);
+ free(buf);
+ }
+ }
+ munmap(addr, len);
+ if (v)
+ printf("%d/%d: %s %s%s [%lld,%d,%s] %d\n",
+ procid, opno, (prot & PROT_WRITE) ? "mwrite" : "mread",
+ f.path, st, (long long)off, (int)len,
+ translate_mmap_flags(flags), e);
+
+ free_pathname(&f);
+ close(fd);
+#endif
+}
+
+void
+mread_f(int opno, long r)
+{
+#ifdef HAVE_SYS_MMAN_H
+ do_mmap(opno, r, PROT_READ);
+#endif
+}
+
+void
+mwrite_f(int opno, long r)
+{
+#ifdef HAVE_SYS_MMAN_H
+ do_mmap(opno, r, PROT_WRITE);
+#endif
+}
+
void
punch_f(int opno, long r)
{
diff --git a/src/global.h b/src/global.h
index f63246b..3920c0d 100644
--- a/src/global.h
+++ b/src/global.h
@@ -178,4 +178,8 @@
#endif /* HAVE_LINUX_FALLOC_H */
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+
#endif /* GLOBAL_H */
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBAg&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=-yMrTV4jriXR7ieyzzjV-QgHBD0UDw8ixoR77aMeAHE&m=iS_NCagRxuuP2DiWMCNXNA2E9qV5B9Bix1B-dlqMb1Q&s=BA28-MS2W4fO6WQxGdzljq34aE_plmKEbxi0d33rUMc&e=
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v8 2/2] xfs/068: update golden output due to new operations in fsstress
2017-03-23 8:10 [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Zorro Lang
@ 2017-03-23 8:10 ` Zorro Lang
2017-03-25 18:14 ` [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Eryu Guan
1 sibling, 0 replies; 3+ messages in thread
From: Zorro Lang @ 2017-03-23 8:10 UTC (permalink / raw)
To: fstests
xfs/068 use a fixed seed (-s) and number of operations (-n) to run
fsstress, to get fixed number of files and directories. But new
operations of fsstress will break this "fixed number". So update
it, after fsstress get new operations.
Signed-off-by: Zorro Lang <zlang@redhat.com>
---
tests/xfs/068 | 2 --
tests/xfs/068.out | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/tests/xfs/068 b/tests/xfs/068
index 4dac95e..7151e28 100755
--- a/tests/xfs/068
+++ b/tests/xfs/068
@@ -43,8 +43,6 @@ trap "rm -rf $tmp.*; exit \$status" 0 1 2 3 15
_supported_fs xfs
_supported_os Linux
-# need to ensure new fsstress operations don't perturb expected output
-FSSTRESS_AVOID="-f insert=0 $FSSTRESS_AVOID"
_create_dumpdir_stress_num 4096
_do_dump_restore
diff --git a/tests/xfs/068.out b/tests/xfs/068.out
index 2196eee..b20604f 100644
--- a/tests/xfs/068.out
+++ b/tests/xfs/068.out
@@ -22,7 +22,7 @@ xfsrestore: session id: ID
xfsrestore: media ID: ID
xfsrestore: searching media for directory dump
xfsrestore: reading directories
-xfsrestore: 495 directories and 1593 entries processed
+xfsrestore: 474 directories and 1592 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: SECS seconds elapsed
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBAg&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=-yMrTV4jriXR7ieyzzjV-QgHBD0UDw8ixoR77aMeAHE&m=_2r65LqNtlb6k2CII-boNlegEnQZJ80LPgaIfTDWUEc&s=Y6Yulw2mWSpWxd0qQw6eY5_PqYFsy8JKy9IySo-meB4&e=
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list
2017-03-23 8:10 [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Zorro Lang
2017-03-23 8:10 ` [PATCH v8 2/2] xfs/068: update golden output due to new operations in fsstress Zorro Lang
@ 2017-03-25 18:14 ` Eryu Guan
1 sibling, 0 replies; 3+ messages in thread
From: Eryu Guan @ 2017-03-25 18:14 UTC (permalink / raw)
To: Zorro Lang; +Cc: fstests
On Thu, Mar 23, 2017 at 04:10:26PM +0800, Zorro Lang wrote:
> mmap as a popular and basic operation, most of softwares use it to
> access files. More and more customers report bugs related with
> mmap/munmap and other stress conditions.
>
> So add mmap read/write test into fsstress to increase mmap related
> stress to reproduce or find more bugs easily.
>
> Signed-off-by: Zorro Lang <zlang@redhat.com>
generic/270 failed in my release testing because fsstress processes
exited early than expected and killall complained no process to kill.
+/tmp/4881.fsstress.bin: no process found
This is because mwrite would trigger SIGBUS if it's writing to a mmap'ed
hole and there's no space left on device, so fsstress processes are
killed by SIGBUS.
Perhaps SIGBUS should be caught and handled so that fsstress won't be
killed. I'll drop this patchset for now.
Thanks,
Eryu
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at https://urldefense.proofpoint.com/v2/url?u=http-3A__vger.kernel.org_majordomo-2Dinfo.html&d=DwIBAg&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=-yMrTV4jriXR7ieyzzjV-QgHBD0UDw8ixoR77aMeAHE&m=2t9HwWh4wP8emNipoxUCyrfBolWLtO4Wo7L03917srA&s=lkhxQRQxn4bXpG6hIo_G2QfP29bYUIN8QQ9D32aQIEM&e=
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-03-25 18:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-23 8:10 [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Zorro Lang
2017-03-23 8:10 ` [PATCH v8 2/2] xfs/068: update golden output due to new operations in fsstress Zorro Lang
2017-03-25 18:14 ` [PATCH v8 1/2] fsstress: add mwrite/mread into test operation list Eryu Guan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.