* [PATCH 0/5] fstests: random fixes
@ 2020-02-05 0:01 Darrick J. Wong
2020-02-05 0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:01 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
Hi all,
Here are numerous small fixes for regressions that I found while running
fstests. There's a few leftovers from the last random fixes series, and
a few more fixes for 32-bit and others.
If you're going to start using this mess, you probably ought to just
pull from my git trees, which are linked below.
This is an extraordinary way to destroy everything. Enjoy!
Comments and questions are, as always, welcome.
--D
xfsprogs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=random-fixes
fstests git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=random-fixes
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/5] xfs/449: filter out "Discarding..." from output
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
@ 2020-02-05 0:01 ` Darrick J. Wong
2020-02-06 4:44 ` Zorro Lang
2020-02-05 0:01 ` [PATCH 2/5] xfs/020: fix truncation test Darrick J. Wong
` (3 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:01 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
From: Darrick J. Wong <darrick.wong@oracle.com>
xfsprogs 5.4 prints "Discarding..." if the disk supports the trim
command. Filter this out of the output because xfs_info and friends
won't print that out.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/xfs/449 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/xfs/449 b/tests/xfs/449
index 7aae1545..83c3c493 100755
--- a/tests/xfs/449
+++ b/tests/xfs/449
@@ -39,7 +39,7 @@ _require_scratch_nocheck
_require_xfs_spaceman_command "info"
_require_command "$XFS_GROWFS_PROG" xfs_growfs
-_scratch_mkfs > $tmp.mkfs
+_scratch_mkfs | sed -e '/Discarding/d' > $tmp.mkfs
echo MKFS >> $seqres.full
cat $tmp.mkfs >> $seqres.full
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] xfs/020: fix truncation test
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
2020-02-05 0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
@ 2020-02-05 0:01 ` Darrick J. Wong
2020-02-06 4:44 ` Zorro Lang
2020-02-05 0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:01 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
From: Darrick J. Wong <darrick.wong@oracle.com>
If we can't create the 60T sparse image for testing repair on a large fs
(such as when running on 32-bit), don't bother running the rest of the
test. This requires the actual truncate(1) command, because it returns
nonzero if the system call fails.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/xfs/020 | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/xfs/020 b/tests/xfs/020
index 66433b0a..4f617379 100755
--- a/tests/xfs/020
+++ b/tests/xfs/020
@@ -42,7 +42,9 @@ echo "Silence is golden"
fsfile=$TEST_DIR/fsfile.$seq
rm -f $fsfile
-$XFS_IO_PROG -f -c "truncate 60t" $fsfile || _notrun "Cannot create 60T sparse file for test."
+# The actual truncate command is required here (and not xfs_io) because it
+# returns nonzero if the operation fails.
+truncate -s 60t $fsfile || _notrun "Cannot create 60T sparse file for test."
rm -f $fsfile
$MKFS_PROG -t xfs -d size=60t,file,name=$fsfile >/dev/null
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
2020-02-05 0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
2020-02-05 0:01 ` [PATCH 2/5] xfs/020: fix truncation test Darrick J. Wong
@ 2020-02-05 0:02 ` Darrick J. Wong
2020-02-05 6:55 ` Amir Goldstein
2020-02-09 15:29 ` Eryu Guan
2020-02-05 0:02 ` [PATCH 4/5] xfs/117: fix inode corruption loop Darrick J. Wong
2020-02-05 0:02 ` [PATCH 5/5] fsx: support 64-bit operation counts Darrick J. Wong
4 siblings, 2 replies; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:02 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
From: Darrick J. Wong <darrick.wong@oracle.com>
If xfs_io's utimes command cannot interpret the arguments that are given
to it, it will print out "Bad value for [am]time". Detect when this
happens and drop the file out of the test entirely.
This is particularly noticeable on 32-bit platforms and the largest
timestamp seconds supported by the filesystem is INT_MAX. In this case,
the maximum value we can cram into tv_sec is INT_MAX, and there is no
way to actually test setting a timestamp of INT_MAX + 1 to test the
clamping.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/generic/402 | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tests/generic/402 b/tests/generic/402
index 2a34d127..32988866 100755
--- a/tests/generic/402
+++ b/tests/generic/402
@@ -63,10 +63,19 @@ run_test_individual()
# check if the time needs update
if [ $update_time -eq 1 ]; then
echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
- $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
+ $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file >> $tmp.utimes 2>&1
+ cat $tmp.utimes >> $seqres.full
+ if grep -q "Bad value" "$tmp.utimes"; then
+ rm -f $file $tmp.utimes
+ return
+ fi
+ cat $tmp.utimes
+ rm $tmp.utimes
if [ $? -ne 0 ]; then
echo "Failed to update times on $file" | tee -a $seqres.full
fi
+ else
+ test -f $file || return
fi
tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/5] xfs/117: fix inode corruption loop
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
` (2 preceding siblings ...)
2020-02-05 0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
@ 2020-02-05 0:02 ` Darrick J. Wong
2020-02-06 4:50 ` Zorro Lang
2020-02-05 0:02 ` [PATCH 5/5] fsx: support 64-bit operation counts Darrick J. Wong
4 siblings, 1 reply; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:02 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
From: Darrick J. Wong <darrick.wong@oracle.com>
`seq X Y` will print all numbers between X and Y, including Y. Since
inode chunks contain inodes numbered from X to X+63, we need to set the
loop variables correctly.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/xfs/117 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/xfs/117 b/tests/xfs/117
index 0a7831d5..e3249623 100755
--- a/tests/xfs/117
+++ b/tests/xfs/117
@@ -70,7 +70,7 @@ echo "+ check fs"
_scratch_xfs_repair -n >> $seqres.full 2>&1 || _fail "xfs_repair should not fail"
echo "+ corrupt image"
-seq "${inode}" "$((inode + 64))" | while read ino; do
+seq "${inode}" "$((inode + 63))" | while read ino; do
_scratch_xfs_db -x -c "inode ${ino}" -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full 2>&1
done
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] fsx: support 64-bit operation counts
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
` (3 preceding siblings ...)
2020-02-05 0:02 ` [PATCH 4/5] xfs/117: fix inode corruption loop Darrick J. Wong
@ 2020-02-05 0:02 ` Darrick J. Wong
2020-02-06 4:57 ` Zorro Lang
4 siblings, 1 reply; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-05 0:02 UTC (permalink / raw)
To: guaneryu, darrick.wong; +Cc: linux-xfs, fstests
From: Darrick J. Wong <darrick.wong@oracle.com>
Support 64-bit operation counts so that we can run long-soak tests for
more than 2 billion fsxops.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
ltp/fsx.c | 54 ++++++++++++++++++++++++++++--------------------------
1 file changed, 28 insertions(+), 26 deletions(-)
diff --git a/ltp/fsx.c b/ltp/fsx.c
index 120f4374..02403720 100644
--- a/ltp/fsx.c
+++ b/ltp/fsx.c
@@ -135,12 +135,12 @@ int fd; /* fd for our test file */
blksize_t block_size = 0;
off_t file_size = 0;
off_t biggest = 0;
-unsigned long testcalls = 0; /* calls to function "test" */
+long long testcalls = 0; /* calls to function "test" */
-unsigned long simulatedopcount = 0; /* -b flag */
+long long simulatedopcount = 0; /* -b flag */
int closeprob = 0; /* -c flag */
int debug = 0; /* -d flag */
-unsigned long debugstart = 0; /* -D flag */
+long long debugstart = 0; /* -D flag */
char filldata = 0; /* -g flag */
int flush = 0; /* -f flag */
int do_fsync = 0; /* -y flag */
@@ -148,7 +148,7 @@ unsigned long maxfilelen = 256 * 1024; /* -l flag */
int sizechecks = 1; /* -n flag disables them */
int maxoplen = 64 * 1024; /* -o flag */
int quiet = 0; /* -q flag */
-unsigned long progressinterval = 0; /* -p flag */
+long long progressinterval = 0; /* -p flag */
int readbdy = 1; /* -r flag */
int style = 0; /* -s flag */
int prealloc = 0; /* -x flag */
@@ -157,7 +157,7 @@ int writebdy = 1; /* -w flag */
long monitorstart = -1; /* -m flag */
long monitorend = -1; /* -m flag */
int lite = 0; /* -L flag */
-long numops = -1; /* -N flag */
+long long numops = -1; /* -N flag */
int randomoplen = 1; /* -O flag disables it */
int seed = 1; /* -S flag */
int mapped_writes = 1; /* -W flag disables */
@@ -788,7 +788,7 @@ doread(unsigned offset, unsigned size)
(monitorstart == -1 ||
(offset + size > monitorstart &&
(monitorend == -1 || offset <= monitorend))))))
- prt("%lu read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
+ prt("%lld read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
offset, offset + size - 1, size);
ret = lseek(fd, (off_t)offset, SEEK_SET);
if (ret == (off_t)-1) {
@@ -925,7 +925,7 @@ domapread(unsigned offset, unsigned size)
(monitorstart == -1 ||
(offset + size > monitorstart &&
(monitorend == -1 || offset <= monitorend))))))
- prt("%lu mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
+ prt("%lld mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
offset, offset + size - 1, size);
pg_offset = offset & PAGE_MASK;
@@ -1003,7 +1003,7 @@ dowrite(unsigned offset, unsigned size)
(monitorstart == -1 ||
(offset + size > monitorstart &&
(monitorend == -1 || offset <= monitorend))))))
- prt("%lu write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
+ prt("%lld write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
offset, offset + size - 1, size);
ret = lseek(fd, (off_t)offset, SEEK_SET);
if (ret == (off_t)-1) {
@@ -1070,7 +1070,7 @@ domapwrite(unsigned offset, unsigned size)
(monitorstart == -1 ||
(offset + size > monitorstart &&
(monitorend == -1 || offset <= monitorend))))))
- prt("%lu mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
+ prt("%lld mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
offset, offset + size - 1, size);
if (file_size > cur_filesize) {
@@ -1123,11 +1123,12 @@ dotruncate(unsigned size)
if (testcalls <= simulatedopcount)
return;
-
+
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
size <= monitorend)))
- prt("%lu trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize, size);
+ prt("%lld trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize,
+ size);
if (ftruncate(fd, (off_t)size) == -1) {
prt("ftruncate1: %x\n", size);
prterr("dotruncate: ftruncate");
@@ -1168,7 +1169,7 @@ do_punch_hole(unsigned offset, unsigned length)
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
end_offset <= monitorend))) {
- prt("%lu punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
+ prt("%lld punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
offset, offset+length, length);
}
if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
@@ -1230,7 +1231,7 @@ do_zero_range(unsigned offset, unsigned length, int keep_size)
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
end_offset <= monitorend))) {
- prt("%lu zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
+ prt("%lld zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
offset, offset+length, length);
}
if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
@@ -1280,8 +1281,8 @@ do_collapse_range(unsigned offset, unsigned length)
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
end_offset <= monitorend))) {
- prt("%lu collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
- offset, offset+length, length);
+ prt("%lld collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n",
+ testcalls, offset, offset+length, length);
}
if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
prt("collapse range: 0x%x to 0x%x\n", offset, offset + length);
@@ -1332,7 +1333,7 @@ do_insert_range(unsigned offset, unsigned length)
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
end_offset <= monitorend))) {
- prt("%lu insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
+ prt("%lld insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
offset, offset+length, length);
}
if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
@@ -1724,7 +1725,7 @@ do_preallocate(unsigned offset, unsigned length, int keep_size)
if ((progressinterval && testcalls % progressinterval == 0) ||
(debug && (monitorstart == -1 || monitorend == -1 ||
end_offset <= monitorend)))
- prt("%lu falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
+ prt("%lld falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
offset, offset + length, length);
if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) {
prt("fallocate: 0x%x to 0x%x\n", offset, offset + length);
@@ -1773,7 +1774,7 @@ docloseopen(void)
return;
if (debug)
- prt("%lu close/open\n", testcalls);
+ prt("%lld close/open\n", testcalls);
if (close(fd)) {
prterr("docloseopen: close");
report_failure(180);
@@ -1797,7 +1798,7 @@ dofsync(void)
if (testcalls <= simulatedopcount)
return;
if (debug)
- prt("%lu fsync\n", testcalls);
+ prt("%lld fsync\n", testcalls);
log4(OP_FSYNC, 0, 0, 0);
ret = fsync(fd);
if (ret < 0) {
@@ -1834,7 +1835,7 @@ cleanup(int sig)
{
if (sig)
prt("signal %d\n", sig);
- prt("testcalls = %lu\n", testcalls);
+ prt("testcalls = %lld\n", testcalls);
exit(sig);
}
@@ -1942,7 +1943,7 @@ test(void)
debug = 1;
if (!quiet && testcalls < simulatedopcount && testcalls % 100000 == 0)
- prt("%lu...\n", testcalls);
+ prt("%lld...\n", testcalls);
if (replayopsf) {
struct log_entry log_entry;
@@ -2293,13 +2294,13 @@ usage(void)
}
-int
+long long
getnum(char *s, char **e)
{
- int ret;
+ long long ret;
*e = (char *) 0;
- ret = strtol(s, e, 0);
+ ret = strtoll(s, e, 0);
if (*e)
switch (**e) {
case 'b':
@@ -2487,7 +2488,8 @@ main(int argc, char **argv)
case 'b':
simulatedopcount = getnum(optarg, &endp);
if (!quiet)
- prt("Will begin at operation %ld\n", simulatedopcount);
+ prt("Will begin at operation %lld\n",
+ simulatedopcount);
if (simulatedopcount == 0)
usage();
simulatedopcount -= 1;
@@ -2854,7 +2856,7 @@ main(int argc, char **argv)
prterr("close");
report_failure(99);
}
- prt("All %lu operations completed A-OK!\n", testcalls);
+ prt("All %lld operations completed A-OK!\n", testcalls);
if (recordops)
logdump();
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value
2020-02-05 0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
@ 2020-02-05 6:55 ` Amir Goldstein
2020-02-09 15:29 ` Eryu Guan
1 sibling, 0 replies; 14+ messages in thread
From: Amir Goldstein @ 2020-02-05 6:55 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: Eryu Guan, linux-xfs, fstests, Deepa Dinamani
On Wed, Feb 5, 2020 at 2:02 AM Darrick J. Wong <darrick.wong@oracle.com> wrote:
>
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> If xfs_io's utimes command cannot interpret the arguments that are given
> to it, it will print out "Bad value for [am]time". Detect when this
> happens and drop the file out of the test entirely.
>
> This is particularly noticeable on 32-bit platforms and the largest
> timestamp seconds supported by the filesystem is INT_MAX. In this case,
> the maximum value we can cram into tv_sec is INT_MAX, and there is no
> way to actually test setting a timestamp of INT_MAX + 1 to test the
> clamping.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/generic/402 | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
>
> diff --git a/tests/generic/402 b/tests/generic/402
> index 2a34d127..32988866 100755
> --- a/tests/generic/402
> +++ b/tests/generic/402
> @@ -63,10 +63,19 @@ run_test_individual()
> # check if the time needs update
> if [ $update_time -eq 1 ]; then
> echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
> - $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
> + $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file >> $tmp.utimes 2>&1
Maybe use > instead of >> to be safe.
Also I would feel more comfortable if we special case the 0 timestamp
against being skipped, to be safe that we don't have a silent regression
in xfs_io or something causing all files to be skipped.
Otherwise:
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> + cat $tmp.utimes >> $seqres.full
> + if grep -q "Bad value" "$tmp.utimes"; then
> + rm -f $file $tmp.utimes
> + return
> + fi
> + cat $tmp.utimes
> + rm $tmp.utimes
> if [ $? -ne 0 ]; then
> echo "Failed to update times on $file" | tee -a $seqres.full
> fi
> + else
> + test -f $file || return
> fi
>
> tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] xfs/449: filter out "Discarding..." from output
2020-02-05 0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
@ 2020-02-06 4:44 ` Zorro Lang
0 siblings, 0 replies; 14+ messages in thread
From: Zorro Lang @ 2020-02-06 4:44 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, fstests
On Tue, Feb 04, 2020 at 04:01:48PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> xfsprogs 5.4 prints "Discarding..." if the disk supports the trim
> command. Filter this out of the output because xfs_info and friends
> won't print that out.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/xfs/449 | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>
> diff --git a/tests/xfs/449 b/tests/xfs/449
> index 7aae1545..83c3c493 100755
> --- a/tests/xfs/449
> +++ b/tests/xfs/449
> @@ -39,7 +39,7 @@ _require_scratch_nocheck
> _require_xfs_spaceman_command "info"
> _require_command "$XFS_GROWFS_PROG" xfs_growfs
>
> -_scratch_mkfs > $tmp.mkfs
> +_scratch_mkfs | sed -e '/Discarding/d' > $tmp.mkfs
Looks good to me.
> echo MKFS >> $seqres.full
> cat $tmp.mkfs >> $seqres.full
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] xfs/020: fix truncation test
2020-02-05 0:01 ` [PATCH 2/5] xfs/020: fix truncation test Darrick J. Wong
@ 2020-02-06 4:44 ` Zorro Lang
0 siblings, 0 replies; 14+ messages in thread
From: Zorro Lang @ 2020-02-06 4:44 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, fstests
On Tue, Feb 04, 2020 at 04:01:54PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> If we can't create the 60T sparse image for testing repair on a large fs
> (such as when running on 32-bit), don't bother running the rest of the
> test. This requires the actual truncate(1) command, because it returns
> nonzero if the system call fails.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/xfs/020 | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
>
> diff --git a/tests/xfs/020 b/tests/xfs/020
> index 66433b0a..4f617379 100755
> --- a/tests/xfs/020
> +++ b/tests/xfs/020
> @@ -42,7 +42,9 @@ echo "Silence is golden"
>
> fsfile=$TEST_DIR/fsfile.$seq
> rm -f $fsfile
> -$XFS_IO_PROG -f -c "truncate 60t" $fsfile || _notrun "Cannot create 60T sparse file for test."
> +# The actual truncate command is required here (and not xfs_io) because it
> +# returns nonzero if the operation fails.
> +truncate -s 60t $fsfile || _notrun "Cannot create 60T sparse file for test."
Good to me.
> rm -f $fsfile
>
> $MKFS_PROG -t xfs -d size=60t,file,name=$fsfile >/dev/null
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] xfs/117: fix inode corruption loop
2020-02-05 0:02 ` [PATCH 4/5] xfs/117: fix inode corruption loop Darrick J. Wong
@ 2020-02-06 4:50 ` Zorro Lang
0 siblings, 0 replies; 14+ messages in thread
From: Zorro Lang @ 2020-02-06 4:50 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, fstests
On Tue, Feb 04, 2020 at 04:02:07PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> `seq X Y` will print all numbers between X and Y, including Y. Since
> inode chunks contain inodes numbered from X to X+63, we need to set the
> loop variables correctly.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/xfs/117 | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>
> diff --git a/tests/xfs/117 b/tests/xfs/117
> index 0a7831d5..e3249623 100755
> --- a/tests/xfs/117
> +++ b/tests/xfs/117
> @@ -70,7 +70,7 @@ echo "+ check fs"
> _scratch_xfs_repair -n >> $seqres.full 2>&1 || _fail "xfs_repair should not fail"
>
> echo "+ corrupt image"
> -seq "${inode}" "$((inode + 64))" | while read ino; do
> +seq "${inode}" "$((inode + 63))" | while read ino; do
This makes more sense, good to me.
> _scratch_xfs_db -x -c "inode ${ino}" -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full 2>&1
> done
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] fsx: support 64-bit operation counts
2020-02-05 0:02 ` [PATCH 5/5] fsx: support 64-bit operation counts Darrick J. Wong
@ 2020-02-06 4:57 ` Zorro Lang
2020-02-06 17:51 ` Darrick J. Wong
0 siblings, 1 reply; 14+ messages in thread
From: Zorro Lang @ 2020-02-06 4:57 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, fstests
On Tue, Feb 04, 2020 at 04:02:13PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Support 64-bit operation counts so that we can run long-soak tests for
> more than 2 billion fsxops.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> ltp/fsx.c | 54 ++++++++++++++++++++++++++++--------------------------
> 1 file changed, 28 insertions(+), 26 deletions(-)
>
>
> diff --git a/ltp/fsx.c b/ltp/fsx.c
> index 120f4374..02403720 100644
> --- a/ltp/fsx.c
> +++ b/ltp/fsx.c
> @@ -135,12 +135,12 @@ int fd; /* fd for our test file */
> blksize_t block_size = 0;
> off_t file_size = 0;
> off_t biggest = 0;
> -unsigned long testcalls = 0; /* calls to function "test" */
> +long long testcalls = 0; /* calls to function "test" */
Although the fsx still run passed for me, should we try to keep the sign of
a variable type? That's fine to extend the size of the variable, but should we
explain more about why we need to change the type from unsigned to signed?
Thanks,
Zorro
>
> -unsigned long simulatedopcount = 0; /* -b flag */
> +long long simulatedopcount = 0; /* -b flag */
> int closeprob = 0; /* -c flag */
> int debug = 0; /* -d flag */
> -unsigned long debugstart = 0; /* -D flag */
> +long long debugstart = 0; /* -D flag */
> char filldata = 0; /* -g flag */
> int flush = 0; /* -f flag */
> int do_fsync = 0; /* -y flag */
> @@ -148,7 +148,7 @@ unsigned long maxfilelen = 256 * 1024; /* -l flag */
> int sizechecks = 1; /* -n flag disables them */
> int maxoplen = 64 * 1024; /* -o flag */
> int quiet = 0; /* -q flag */
> -unsigned long progressinterval = 0; /* -p flag */
> +long long progressinterval = 0; /* -p flag */
> int readbdy = 1; /* -r flag */
> int style = 0; /* -s flag */
> int prealloc = 0; /* -x flag */
> @@ -157,7 +157,7 @@ int writebdy = 1; /* -w flag */
> long monitorstart = -1; /* -m flag */
> long monitorend = -1; /* -m flag */
> int lite = 0; /* -L flag */
> -long numops = -1; /* -N flag */
> +long long numops = -1; /* -N flag */
> int randomoplen = 1; /* -O flag disables it */
> int seed = 1; /* -S flag */
> int mapped_writes = 1; /* -W flag disables */
> @@ -788,7 +788,7 @@ doread(unsigned offset, unsigned size)
> (monitorstart == -1 ||
> (offset + size > monitorstart &&
> (monitorend == -1 || offset <= monitorend))))))
> - prt("%lu read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> + prt("%lld read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> offset, offset + size - 1, size);
> ret = lseek(fd, (off_t)offset, SEEK_SET);
> if (ret == (off_t)-1) {
> @@ -925,7 +925,7 @@ domapread(unsigned offset, unsigned size)
> (monitorstart == -1 ||
> (offset + size > monitorstart &&
> (monitorend == -1 || offset <= monitorend))))))
> - prt("%lu mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> + prt("%lld mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> offset, offset + size - 1, size);
>
> pg_offset = offset & PAGE_MASK;
> @@ -1003,7 +1003,7 @@ dowrite(unsigned offset, unsigned size)
> (monitorstart == -1 ||
> (offset + size > monitorstart &&
> (monitorend == -1 || offset <= monitorend))))))
> - prt("%lu write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> + prt("%lld write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> offset, offset + size - 1, size);
> ret = lseek(fd, (off_t)offset, SEEK_SET);
> if (ret == (off_t)-1) {
> @@ -1070,7 +1070,7 @@ domapwrite(unsigned offset, unsigned size)
> (monitorstart == -1 ||
> (offset + size > monitorstart &&
> (monitorend == -1 || offset <= monitorend))))))
> - prt("%lu mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> + prt("%lld mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> offset, offset + size - 1, size);
>
> if (file_size > cur_filesize) {
> @@ -1123,11 +1123,12 @@ dotruncate(unsigned size)
>
> if (testcalls <= simulatedopcount)
> return;
> -
> +
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> size <= monitorend)))
> - prt("%lu trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize, size);
> + prt("%lld trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize,
> + size);
> if (ftruncate(fd, (off_t)size) == -1) {
> prt("ftruncate1: %x\n", size);
> prterr("dotruncate: ftruncate");
> @@ -1168,7 +1169,7 @@ do_punch_hole(unsigned offset, unsigned length)
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> end_offset <= monitorend))) {
> - prt("%lu punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> + prt("%lld punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> offset, offset+length, length);
> }
> if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> @@ -1230,7 +1231,7 @@ do_zero_range(unsigned offset, unsigned length, int keep_size)
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> end_offset <= monitorend))) {
> - prt("%lu zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> + prt("%lld zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> offset, offset+length, length);
> }
> if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> @@ -1280,8 +1281,8 @@ do_collapse_range(unsigned offset, unsigned length)
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> end_offset <= monitorend))) {
> - prt("%lu collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> - offset, offset+length, length);
> + prt("%lld collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n",
> + testcalls, offset, offset+length, length);
> }
> if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> prt("collapse range: 0x%x to 0x%x\n", offset, offset + length);
> @@ -1332,7 +1333,7 @@ do_insert_range(unsigned offset, unsigned length)
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> end_offset <= monitorend))) {
> - prt("%lu insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> + prt("%lld insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> offset, offset+length, length);
> }
> if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> @@ -1724,7 +1725,7 @@ do_preallocate(unsigned offset, unsigned length, int keep_size)
> if ((progressinterval && testcalls % progressinterval == 0) ||
> (debug && (monitorstart == -1 || monitorend == -1 ||
> end_offset <= monitorend)))
> - prt("%lu falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> + prt("%lld falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> offset, offset + length, length);
> if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) {
> prt("fallocate: 0x%x to 0x%x\n", offset, offset + length);
> @@ -1773,7 +1774,7 @@ docloseopen(void)
> return;
>
> if (debug)
> - prt("%lu close/open\n", testcalls);
> + prt("%lld close/open\n", testcalls);
> if (close(fd)) {
> prterr("docloseopen: close");
> report_failure(180);
> @@ -1797,7 +1798,7 @@ dofsync(void)
> if (testcalls <= simulatedopcount)
> return;
> if (debug)
> - prt("%lu fsync\n", testcalls);
> + prt("%lld fsync\n", testcalls);
> log4(OP_FSYNC, 0, 0, 0);
> ret = fsync(fd);
> if (ret < 0) {
> @@ -1834,7 +1835,7 @@ cleanup(int sig)
> {
> if (sig)
> prt("signal %d\n", sig);
> - prt("testcalls = %lu\n", testcalls);
> + prt("testcalls = %lld\n", testcalls);
> exit(sig);
> }
>
> @@ -1942,7 +1943,7 @@ test(void)
> debug = 1;
>
> if (!quiet && testcalls < simulatedopcount && testcalls % 100000 == 0)
> - prt("%lu...\n", testcalls);
> + prt("%lld...\n", testcalls);
>
> if (replayopsf) {
> struct log_entry log_entry;
> @@ -2293,13 +2294,13 @@ usage(void)
> }
>
>
> -int
> +long long
> getnum(char *s, char **e)
> {
> - int ret;
> + long long ret;
>
> *e = (char *) 0;
> - ret = strtol(s, e, 0);
> + ret = strtoll(s, e, 0);
> if (*e)
> switch (**e) {
> case 'b':
> @@ -2487,7 +2488,8 @@ main(int argc, char **argv)
> case 'b':
> simulatedopcount = getnum(optarg, &endp);
> if (!quiet)
> - prt("Will begin at operation %ld\n", simulatedopcount);
> + prt("Will begin at operation %lld\n",
> + simulatedopcount);
> if (simulatedopcount == 0)
> usage();
> simulatedopcount -= 1;
> @@ -2854,7 +2856,7 @@ main(int argc, char **argv)
> prterr("close");
> report_failure(99);
> }
> - prt("All %lu operations completed A-OK!\n", testcalls);
> + prt("All %lld operations completed A-OK!\n", testcalls);
> if (recordops)
> logdump();
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] fsx: support 64-bit operation counts
2020-02-06 4:57 ` Zorro Lang
@ 2020-02-06 17:51 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-06 17:51 UTC (permalink / raw)
To: linux-xfs, fstests
On Thu, Feb 06, 2020 at 12:57:28PM +0800, Zorro Lang wrote:
> On Tue, Feb 04, 2020 at 04:02:13PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> >
> > Support 64-bit operation counts so that we can run long-soak tests for
> > more than 2 billion fsxops.
> >
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > ltp/fsx.c | 54 ++++++++++++++++++++++++++++--------------------------
> > 1 file changed, 28 insertions(+), 26 deletions(-)
> >
> >
> > diff --git a/ltp/fsx.c b/ltp/fsx.c
> > index 120f4374..02403720 100644
> > --- a/ltp/fsx.c
> > +++ b/ltp/fsx.c
> > @@ -135,12 +135,12 @@ int fd; /* fd for our test file */
> > blksize_t block_size = 0;
> > off_t file_size = 0;
> > off_t biggest = 0;
> > -unsigned long testcalls = 0; /* calls to function "test" */
> > +long long testcalls = 0; /* calls to function "test" */
>
> Although the fsx still run passed for me, should we try to keep the sign of
> a variable type? That's fine to extend the size of the variable, but should we
> explain more about why we need to change the type from unsigned to signed?
testcalls is compared against simulatedopcount, which is a signed
variable, and we shouldn't really be mixing signs like that.
Hmm, maybe simulatedopcount should also be unsigned, since they're both
absolute counts of filesystem operations. I figured that testcallsx and
simulatedopcount should both be signed because numops is also signed.
Granted, I guess numops is signed so that we can set it to the magic
value -1 and have fsx run "forever".
OFC I guess there's then the problem that if you ever hit 9Eops then
numops/simulatedopcount can become negative... <shrug>
--D
> Thanks,
> Zorro
>
> >
> > -unsigned long simulatedopcount = 0; /* -b flag */
> > +long long simulatedopcount = 0; /* -b flag */
> > int closeprob = 0; /* -c flag */
> > int debug = 0; /* -d flag */
> > -unsigned long debugstart = 0; /* -D flag */
> > +long long debugstart = 0; /* -D flag */
> > char filldata = 0; /* -g flag */
> > int flush = 0; /* -f flag */
> > int do_fsync = 0; /* -y flag */
> > @@ -148,7 +148,7 @@ unsigned long maxfilelen = 256 * 1024; /* -l flag */
> > int sizechecks = 1; /* -n flag disables them */
> > int maxoplen = 64 * 1024; /* -o flag */
> > int quiet = 0; /* -q flag */
> > -unsigned long progressinterval = 0; /* -p flag */
> > +long long progressinterval = 0; /* -p flag */
> > int readbdy = 1; /* -r flag */
> > int style = 0; /* -s flag */
> > int prealloc = 0; /* -x flag */
> > @@ -157,7 +157,7 @@ int writebdy = 1; /* -w flag */
> > long monitorstart = -1; /* -m flag */
> > long monitorend = -1; /* -m flag */
> > int lite = 0; /* -L flag */
> > -long numops = -1; /* -N flag */
> > +long long numops = -1; /* -N flag */
> > int randomoplen = 1; /* -O flag disables it */
> > int seed = 1; /* -S flag */
> > int mapped_writes = 1; /* -W flag disables */
> > @@ -788,7 +788,7 @@ doread(unsigned offset, unsigned size)
> > (monitorstart == -1 ||
> > (offset + size > monitorstart &&
> > (monitorend == -1 || offset <= monitorend))))))
> > - prt("%lu read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > + prt("%lld read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > offset, offset + size - 1, size);
> > ret = lseek(fd, (off_t)offset, SEEK_SET);
> > if (ret == (off_t)-1) {
> > @@ -925,7 +925,7 @@ domapread(unsigned offset, unsigned size)
> > (monitorstart == -1 ||
> > (offset + size > monitorstart &&
> > (monitorend == -1 || offset <= monitorend))))))
> > - prt("%lu mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > + prt("%lld mapread\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > offset, offset + size - 1, size);
> >
> > pg_offset = offset & PAGE_MASK;
> > @@ -1003,7 +1003,7 @@ dowrite(unsigned offset, unsigned size)
> > (monitorstart == -1 ||
> > (offset + size > monitorstart &&
> > (monitorend == -1 || offset <= monitorend))))))
> > - prt("%lu write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > + prt("%lld write\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > offset, offset + size - 1, size);
> > ret = lseek(fd, (off_t)offset, SEEK_SET);
> > if (ret == (off_t)-1) {
> > @@ -1070,7 +1070,7 @@ domapwrite(unsigned offset, unsigned size)
> > (monitorstart == -1 ||
> > (offset + size > monitorstart &&
> > (monitorend == -1 || offset <= monitorend))))))
> > - prt("%lu mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > + prt("%lld mapwrite\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> > offset, offset + size - 1, size);
> >
> > if (file_size > cur_filesize) {
> > @@ -1123,11 +1123,12 @@ dotruncate(unsigned size)
> >
> > if (testcalls <= simulatedopcount)
> > return;
> > -
> > +
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > size <= monitorend)))
> > - prt("%lu trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize, size);
> > + prt("%lld trunc\tfrom 0x%x to 0x%x\n", testcalls, oldsize,
> > + size);
> > if (ftruncate(fd, (off_t)size) == -1) {
> > prt("ftruncate1: %x\n", size);
> > prterr("dotruncate: ftruncate");
> > @@ -1168,7 +1169,7 @@ do_punch_hole(unsigned offset, unsigned length)
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > end_offset <= monitorend))) {
> > - prt("%lu punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > + prt("%lld punch\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > offset, offset+length, length);
> > }
> > if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1230,7 +1231,7 @@ do_zero_range(unsigned offset, unsigned length, int keep_size)
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > end_offset <= monitorend))) {
> > - prt("%lu zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > + prt("%lld zero\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > offset, offset+length, length);
> > }
> > if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1280,8 +1281,8 @@ do_collapse_range(unsigned offset, unsigned length)
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > end_offset <= monitorend))) {
> > - prt("%lu collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > - offset, offset+length, length);
> > + prt("%lld collapse\tfrom 0x%x to 0x%x, (0x%x bytes)\n",
> > + testcalls, offset, offset+length, length);
> > }
> > if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > prt("collapse range: 0x%x to 0x%x\n", offset, offset + length);
> > @@ -1332,7 +1333,7 @@ do_insert_range(unsigned offset, unsigned length)
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > end_offset <= monitorend))) {
> > - prt("%lu insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > + prt("%lld insert\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls,
> > offset, offset+length, length);
> > }
> > if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) {
> > @@ -1724,7 +1725,7 @@ do_preallocate(unsigned offset, unsigned length, int keep_size)
> > if ((progressinterval && testcalls % progressinterval == 0) ||
> > (debug && (monitorstart == -1 || monitorend == -1 ||
> > end_offset <= monitorend)))
> > - prt("%lu falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> > + prt("%lld falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls,
> > offset, offset + length, length);
> > if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) {
> > prt("fallocate: 0x%x to 0x%x\n", offset, offset + length);
> > @@ -1773,7 +1774,7 @@ docloseopen(void)
> > return;
> >
> > if (debug)
> > - prt("%lu close/open\n", testcalls);
> > + prt("%lld close/open\n", testcalls);
> > if (close(fd)) {
> > prterr("docloseopen: close");
> > report_failure(180);
> > @@ -1797,7 +1798,7 @@ dofsync(void)
> > if (testcalls <= simulatedopcount)
> > return;
> > if (debug)
> > - prt("%lu fsync\n", testcalls);
> > + prt("%lld fsync\n", testcalls);
> > log4(OP_FSYNC, 0, 0, 0);
> > ret = fsync(fd);
> > if (ret < 0) {
> > @@ -1834,7 +1835,7 @@ cleanup(int sig)
> > {
> > if (sig)
> > prt("signal %d\n", sig);
> > - prt("testcalls = %lu\n", testcalls);
> > + prt("testcalls = %lld\n", testcalls);
> > exit(sig);
> > }
> >
> > @@ -1942,7 +1943,7 @@ test(void)
> > debug = 1;
> >
> > if (!quiet && testcalls < simulatedopcount && testcalls % 100000 == 0)
> > - prt("%lu...\n", testcalls);
> > + prt("%lld...\n", testcalls);
> >
> > if (replayopsf) {
> > struct log_entry log_entry;
> > @@ -2293,13 +2294,13 @@ usage(void)
> > }
> >
> >
> > -int
> > +long long
> > getnum(char *s, char **e)
> > {
> > - int ret;
> > + long long ret;
> >
> > *e = (char *) 0;
> > - ret = strtol(s, e, 0);
> > + ret = strtoll(s, e, 0);
> > if (*e)
> > switch (**e) {
> > case 'b':
> > @@ -2487,7 +2488,8 @@ main(int argc, char **argv)
> > case 'b':
> > simulatedopcount = getnum(optarg, &endp);
> > if (!quiet)
> > - prt("Will begin at operation %ld\n", simulatedopcount);
> > + prt("Will begin at operation %lld\n",
> > + simulatedopcount);
> > if (simulatedopcount == 0)
> > usage();
> > simulatedopcount -= 1;
> > @@ -2854,7 +2856,7 @@ main(int argc, char **argv)
> > prterr("close");
> > report_failure(99);
> > }
> > - prt("All %lu operations completed A-OK!\n", testcalls);
> > + prt("All %lld operations completed A-OK!\n", testcalls);
> > if (recordops)
> > logdump();
> >
> >
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value
2020-02-05 0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
2020-02-05 6:55 ` Amir Goldstein
@ 2020-02-09 15:29 ` Eryu Guan
2020-02-11 15:20 ` Darrick J. Wong
1 sibling, 1 reply; 14+ messages in thread
From: Eryu Guan @ 2020-02-09 15:29 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, fstests
On Tue, Feb 04, 2020 at 04:02:00PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> If xfs_io's utimes command cannot interpret the arguments that are given
> to it, it will print out "Bad value for [am]time". Detect when this
> happens and drop the file out of the test entirely.
>
> This is particularly noticeable on 32-bit platforms and the largest
> timestamp seconds supported by the filesystem is INT_MAX. In this case,
> the maximum value we can cram into tv_sec is INT_MAX, and there is no
> way to actually test setting a timestamp of INT_MAX + 1 to test the
> clamping.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/generic/402 | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
>
> diff --git a/tests/generic/402 b/tests/generic/402
> index 2a34d127..32988866 100755
> --- a/tests/generic/402
> +++ b/tests/generic/402
> @@ -63,10 +63,19 @@ run_test_individual()
> # check if the time needs update
> if [ $update_time -eq 1 ]; then
> echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
> - $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
> + $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file >> $tmp.utimes 2>&1
Agree with Amir here, ">" whould be better, instead of appending.
> + cat $tmp.utimes >> $seqres.full
> + if grep -q "Bad value" "$tmp.utimes"; then
Echo a message to $seqres.full about this test being skipped?
> + rm -f $file $tmp.utimes
> + return
> + fi
> + cat $tmp.utimes
> + rm $tmp.utimes
> if [ $? -ne 0 ]; then
So here we test the result of "rm $tmp.utimes"? I guess that's always a
pass.
> echo "Failed to update times on $file" | tee -a $seqres.full
> fi
> + else
> + test -f $file || return
Same here, better to be verbose about skipping test.
Thanks,
Eryu
> fi
>
> tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value
2020-02-09 15:29 ` Eryu Guan
@ 2020-02-11 15:20 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2020-02-11 15:20 UTC (permalink / raw)
To: Eryu Guan; +Cc: linux-xfs, fstests
On Sun, Feb 09, 2020 at 11:29:54PM +0800, Eryu Guan wrote:
> On Tue, Feb 04, 2020 at 04:02:00PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <darrick.wong@oracle.com>
> >
> > If xfs_io's utimes command cannot interpret the arguments that are given
> > to it, it will print out "Bad value for [am]time". Detect when this
> > happens and drop the file out of the test entirely.
> >
> > This is particularly noticeable on 32-bit platforms and the largest
> > timestamp seconds supported by the filesystem is INT_MAX. In this case,
> > the maximum value we can cram into tv_sec is INT_MAX, and there is no
> > way to actually test setting a timestamp of INT_MAX + 1 to test the
> > clamping.
> >
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> > tests/generic/402 | 11 ++++++++++-
> > 1 file changed, 10 insertions(+), 1 deletion(-)
> >
> >
> > diff --git a/tests/generic/402 b/tests/generic/402
> > index 2a34d127..32988866 100755
> > --- a/tests/generic/402
> > +++ b/tests/generic/402
> > @@ -63,10 +63,19 @@ run_test_individual()
> > # check if the time needs update
> > if [ $update_time -eq 1 ]; then
> > echo "Updating file: $file to timestamp $timestamp" >> $seqres.full
> > - $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file
> > + $XFS_IO_PROG -f -c "utimes $timestamp 0 $timestamp 0" $file >> $tmp.utimes 2>&1
>
> Agree with Amir here, ">" whould be better, instead of appending.
Fixed.
> > + cat $tmp.utimes >> $seqres.full
> > + if grep -q "Bad value" "$tmp.utimes"; then
>
> Echo a message to $seqres.full about this test being skipped?
Fixed.
> > + rm -f $file $tmp.utimes
> > + return
> > + fi
> > + cat $tmp.utimes
> > + rm $tmp.utimes
> > if [ $? -ne 0 ]; then
>
> So here we test the result of "rm $tmp.utimes"? I guess that's always a
> pass.
Err, oops, I'll save the value of $? from the xfs_io command.
> > echo "Failed to update times on $file" | tee -a $seqres.full
> > fi
> > + else
> > + test -f $file || return
>
> Same here, better to be verbose about skipping test.
ok.
--D
> Thanks,
> Eryu
>
> > fi
> >
> > tsclamp=$((timestamp<tsmin?tsmin:timestamp>tsmax?tsmax:timestamp))
> >
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2020-02-11 15:20 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-05 0:01 [PATCH 0/5] fstests: random fixes Darrick J. Wong
2020-02-05 0:01 ` [PATCH 1/5] xfs/449: filter out "Discarding..." from output Darrick J. Wong
2020-02-06 4:44 ` Zorro Lang
2020-02-05 0:01 ` [PATCH 2/5] xfs/020: fix truncation test Darrick J. Wong
2020-02-06 4:44 ` Zorro Lang
2020-02-05 0:02 ` [PATCH 3/5] generic/402: skip test if xfs_io can't parse the date value Darrick J. Wong
2020-02-05 6:55 ` Amir Goldstein
2020-02-09 15:29 ` Eryu Guan
2020-02-11 15:20 ` Darrick J. Wong
2020-02-05 0:02 ` [PATCH 4/5] xfs/117: fix inode corruption loop Darrick J. Wong
2020-02-06 4:50 ` Zorro Lang
2020-02-05 0:02 ` [PATCH 5/5] fsx: support 64-bit operation counts Darrick J. Wong
2020-02-06 4:57 ` Zorro Lang
2020-02-06 17:51 ` Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).