From: Amir Goldstein <amir73il@gmail.com>
To: Eryu Guan <eguan@redhat.com>
Cc: Josef Bacik <jbacik@fb.com>,
fstests@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: [PATCH v3 05/13] fsx: add support for keeping existing file
Date: Tue, 5 Sep 2017 22:11:12 +0300 [thread overview]
Message-ID: <1504638680-25682-6-git-send-email-amir73il@gmail.com> (raw)
In-Reply-To: <1504638680-25682-1-git-send-email-amir73il@gmail.com>
With fsxk -k, do not truncate existing file and use its size as upper
bound on file size.
This is needed to prevent fsx from truncating the file on start of
test when testing fsx on cloned files.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
ltp/fsx.c | 49 ++++++++++++++++++++++++++++++++++++-------------
1 file changed, 36 insertions(+), 13 deletions(-)
diff --git a/ltp/fsx.c b/ltp/fsx.c
index 3510ace..7a34577 100644
--- a/ltp/fsx.c
+++ b/ltp/fsx.c
@@ -629,17 +629,18 @@ void
check_trunc_hack(void)
{
struct stat statbuf;
+ off_t offset = file_size + (off_t)100000;
- if (ftruncate(fd, (off_t)0))
+ if (ftruncate(fd, file_size))
goto ftruncate_err;
- if (ftruncate(fd, (off_t)100000))
+ if (ftruncate(fd, offset))
goto ftruncate_err;
fstat(fd, &statbuf);
- if (statbuf.st_size != (off_t)100000) {
+ if (statbuf.st_size != offset) {
prt("no extend on truncate! not posix!\n");
exit(130);
}
- if (ftruncate(fd, 0)) {
+ if (ftruncate(fd, file_size)) {
ftruncate_err:
prterr("check_trunc_hack: ftruncate");
exit(131);
@@ -1636,7 +1637,7 @@ void
usage(void)
{
fprintf(stdout, "usage: %s",
- "fsx [-dnqxAFLOWZ] [-b opnum] [-c Prob] [-g filldata] [-i logdev] [-j logid] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] fname\n\
+ "fsx [-dknqxAFLOWZ] [-b opnum] [-c Prob] [-g filldata] [-i logdev] [-j logid] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] fname\n\
-b opnum: beginning operation number (default 1)\n\
-c P: 1 in P chance of file close+open at each op (default infinity)\n\
-d: debug output for all operations\n\
@@ -1644,6 +1645,7 @@ usage(void)
-g X: write character X instead of random generated data\n\
-i logdev: do integrity testing, logdev is the dm log writes device\n\
-j logid: prefix logs with this id\n\
+ -k: do not truncate existing file and use its size as upper bound on file size\n\
-l flen: the upper bound on file size (default 262144)\n\
-m startop:endop: monitor (print debug output) specified byte range (default 0:infinity)\n\
-n: no verifications of file size\n\
@@ -1834,7 +1836,7 @@ __test_fallocate(int mode, const char *mode_str)
#ifdef HAVE_LINUX_FALLOC_H
int ret = 0;
if (!lite) {
- if (fallocate(fd, mode, 0, 1) && errno == EOPNOTSUPP) {
+ if (fallocate(fd, mode, file_size, 1) && errno == EOPNOTSUPP) {
if(!quiet)
fprintf(stderr,
"main: filesystem does not support "
@@ -1842,7 +1844,7 @@ __test_fallocate(int mode, const char *mode_str)
mode_str);
} else {
ret = 1;
- if (ftruncate(fd, 0)) {
+ if (ftruncate(fd, file_size)) {
warn("main: ftruncate");
exit(132);
}
@@ -1866,6 +1868,7 @@ main(int argc, char **argv)
char goodfile[1024];
char logfile[1024];
struct stat statbuf;
+ int o_flags = O_RDWR|O_CREAT|O_TRUNC;
goodfile[0] = 0;
logfile[0] = 0;
@@ -1879,7 +1882,7 @@ main(int argc, char **argv)
setvbuf(stdout, (char *)0, _IOLBF, 0); /* line buffered stdout */
while ((ch = getopt_long(argc, argv,
- "b:c:dfg:i:j:l:m:no:p:qr:s:t:w:xyAD:FKHzCILN:OP:RS:WZ",
+ "b:c:dfg:i:j:kl:m:no:p:qr:s:t:w:xyAD:FKHzCILN:OP:RS:WZ",
longopts, NULL)) != EOF)
switch (ch) {
case 'b':
@@ -1920,6 +1923,9 @@ main(int argc, char **argv)
case 'j':
logid = getnum(optarg, &endp);
break;
+ case 'k':
+ o_flags &= ~O_TRUNC;
+ break;
case 'l':
maxfilelen = getnum(optarg, &endp);
if (maxfilelen <= 0)
@@ -2007,6 +2013,7 @@ main(int argc, char **argv)
break;
case 'L':
lite = 1;
+ o_flags &= ~(O_CREAT|O_TRUNC);
break;
case 'N':
numops = getnum(optarg, &endp);
@@ -2046,6 +2053,7 @@ main(int argc, char **argv)
break;
case 'Z':
o_direct = O_DIRECT;
+ o_flags |= O_DIRECT;
break;
case 255: /* --record-ops */
if (optarg)
@@ -2089,8 +2097,7 @@ main(int argc, char **argv)
signal(SIGUSR2, cleanup);
srandom(seed);
- fd = open(fname,
- O_RDWR|(lite ? 0 : O_CREAT|O_TRUNC)|o_direct, 0666);
+ fd = open(fname, o_flags, 0666);
if (fd < 0) {
prterr(fname);
exit(91);
@@ -2150,9 +2157,10 @@ main(int argc, char **argv)
aio_setup();
#endif
- if (lite) {
+ if (!(o_flags & O_TRUNC)) {
off_t ret;
- file_size = maxfilelen = lseek(fd, (off_t)0, SEEK_END);
+ file_size = maxfilelen = biggest = lseek(fd, (off_t)0, SEEK_END);
+ printf("file_size=%lu\n", file_size);
if (file_size == (off_t)-1) {
prterr(fname);
warn("main: lseek eof");
@@ -2189,8 +2197,23 @@ main(int argc, char **argv)
maxfilelen);
exit(98);
}
- } else
+ } else {
+ ssize_t ret, len = file_size;
+ off_t off = 0;
+
+ while (len > 0) {
+ ret = read(fd, good_buf + off, len);
+ if (ret == -1) {
+ prterr(fname);
+ warn("main: error on read");
+ exit(98);
+ }
+ len -= ret;
+ off += ret;
+ }
+
check_trunc_hack();
+ }
if (fallocate_calls)
fallocate_calls = test_fallocate(0);
--
2.7.4
next prev parent reply other threads:[~2017-09-05 19:10 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-05 19:11 [PATCH v3 00/13] Crash consistency xfstest using dm-log-writes Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 01/13] fsx: add support for integrity check with dm-log-writes target Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 02/13] fsx: add optional logid prefix to log messages Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 03/13] fsx: add support for recording operations to a file Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 04/13] fsx: add support for writing constant instead of random data Amir Goldstein
2017-09-05 19:11 ` Amir Goldstein [this message]
2017-09-05 19:11 ` [PATCH v3 06/13] log-writes: add replay-log program to replay dm-log-writes target Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 07/13] replay-log: add validations for corrupt log entries Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 08/13] replay-log: add support for replaying ops in target device sector range Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 09/13] fstests: add support for working with dm-log-writes target Amir Goldstein
2017-09-07 7:45 ` Eryu Guan
2017-09-07 7:47 ` Eryu Guan
2017-09-05 19:11 ` [PATCH v3 10/13] fstests: crash consistency fsx test using dm-log-writes Amir Goldstein
2017-09-07 7:50 ` Eryu Guan
2017-09-07 8:50 ` Amir Goldstein
2017-09-07 8:55 ` Eryu Guan
2017-09-07 10:10 ` Amir Goldstein
2017-11-27 9:56 ` Amir Goldstein
2017-11-27 14:23 ` Ashlie Martinez
2017-11-27 15:07 ` Josef Bacik
2017-11-27 15:04 ` Josef Bacik
2017-11-28 16:48 ` Amir Goldstein
2017-11-28 17:21 ` Josef Bacik
2017-11-28 19:32 ` Amir Goldstein
2017-11-28 20:00 ` Josef Bacik
2017-11-28 20:26 ` Amir Goldstein
[not found] ` <CAOQ4uxhQu-1AK71zg4Ce0cJd+xRt3Gf9zMMVb=Rs00zFuWA3hQ@mail.gmail.com>
2017-11-28 22:33 ` Darrick J. Wong
2017-11-29 3:33 ` Amir Goldstein
[not found] ` <CAOQ4uxhXWxkre7L7RDvpH8E4cwsHGZzVHKmCpBESfTUZhmQpUg@mail.gmail.com>
[not found] ` <CAOQ4uxjBQ9ZzPe9GKCRYCjNFv3jP8NMAVQDb=LiNqNcEeRp47w@mail.gmail.com>
2017-12-04 20:53 ` Darrick J. Wong
2017-09-05 19:11 ` [PATCH v3 11/13] fstests: regression test for ext4 crash consistency bug Amir Goldstein
2017-09-07 7:52 ` Eryu Guan
2017-09-05 19:11 ` [PATCH v3 12/13] fstests: crash consistency fsx test for cloned files Amir Goldstein
2017-09-05 19:11 ` [PATCH v3 13/13] fstests: regression test for xfs leftover CoW extent error Amir Goldstein
2017-09-07 7:55 ` Eryu Guan
2017-09-07 9:34 ` Amir Goldstein
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1504638680-25682-6-git-send-email-amir73il@gmail.com \
--to=amir73il@gmail.com \
--cc=eguan@redhat.com \
--cc=fstests@vger.kernel.org \
--cc=jbacik@fb.com \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox