All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/6] common: add _mkfs_dev helper
@ 2014-08-16 13:13 Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev Dmitry Monakhov
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov

It is not good practice to directly use MKFS_PROG.

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 common/rc        |   28 ++++++++++++++++++++++++++++
 tests/btrfs/020  |    4 ++--
 tests/shared/298 |    4 ++--
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/common/rc b/common/rc
index 16da898..84fef35 100644
--- a/common/rc
+++ b/common/rc
@@ -509,6 +509,34 @@ _test_mkfs()
     esac
 }
 
+_mkfs_dev()
+{
+    case $FSTYP in
+    nfs*)
+	# do nothing for nfs
+	;;
+    udf)
+        $MKFS_UDF_PROG $MKFS_OPTIONS $* 2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd
+	;;
+    btrfs)
+        $MKFS_BTRFS_PROG $MKFS_OPTIONS $* 2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd
+	;;
+    *)
+	yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* \
+		2>$tmp_dir.mkfserr 1>$tmp_dir.mkfsstd
+	;;
+    esac
+
+    if [ $? -ne 0 ]; then
+	# output stored mkfs output
+	cat $tmp_dir.mkfserr >&2
+	cat $tmp_dir.mkfsstd
+	status=1
+	exit 1
+    fi
+    rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
+}
+
 _scratch_mkfs()
 {
     case $FSTYP in
diff --git a/tests/btrfs/020 b/tests/btrfs/020
index 5a928dd..84251f3 100755
--- a/tests/btrfs/020
+++ b/tests/btrfs/020
@@ -73,8 +73,8 @@ loop_dev1=`_create_loop_device $fs_img1`
 loop_dev2=`_create_loop_device $fs_img2`
 loop_dev3=`_create_loop_device $fs_img3`
 
-$MKFS_BTRFS_PROG -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1
-$MOUNT_PROG -o ro $loop_dev1 $loop_mnt
+_mkfs_dev -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1
+_mount -o ro $loop_dev1 $loop_mnt
 
 # Fail the second device and replace with the third
 _destroy_loop_device $loop_dev2
diff --git a/tests/shared/298 b/tests/shared/298
index 372fd02..2b7fdd1 100755
--- a/tests/shared/298
+++ b/tests/shared/298
@@ -134,8 +134,8 @@ mkdir $loop_mnt
 
 [ "$FSTYP" = "xfs" ] && MKFS_OPTIONS="-f $MKFS_OPTIONS"
 
-$MKFS_PROG -t $FSTYP $MKFS_OPTIONS $loop_dev &> /dev/null
-$MOUNT_PROG $loop_dev $loop_mnt
+_mkfs_dev $loop_dev
+_mount $loop_dev $loop_mnt
 
 echo -n "Generating garbage on loop..."
 # Goal is to fill it up, ignore any errors.
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
@ 2014-08-16 13:13 ` Dmitry Monakhov
  2014-08-20 23:14   ` Dave Chinner
  2014-08-16 13:13 ` [PATCH 3/6] src/e4compact cleanup Dmitry Monakhov
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov

Currently default block size is frozen to 4096 which is bad for
various reasons for example:
1) It ignores MKFS_OPT
2) Not works for architectures where PG_SIZE != 4096

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 common/rc |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/common/rc b/common/rc
index 84fef35..d149d1c 100644
--- a/common/rc
+++ b/common/rc
@@ -582,7 +582,7 @@ _scratch_mkfs_sized()
 {
     fssize=$1
     blocksize=$2
-    [ -z "$blocksize" ] && blocksize=4096
+    [ -z "$blocksize" ] && blocksize=`blockdev --getbsz $TEST_DEV`
 
     re='^[0-9]+$'
     if ! [[ $fssize =~ $re ]] ; then
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/6] src/e4compact cleanup
  2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev Dmitry Monakhov
@ 2014-08-16 13:13 ` Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 4/6] src/e4compact: handle various block_size correctly Dmitry Monakhov
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov

- fix incorrect donor offset initialization.
- fix donor name logging.
- handle EOPNOTSUPP correctly

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 src/e4compact.c |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/e4compact.c b/src/e4compact.c
index de0aeb6..ecc6906 100644
--- a/src/e4compact.c
+++ b/src/e4compact.c
@@ -64,7 +64,6 @@ static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor
 	mv_ioc.donor_fd = donor->fd;
 	mv_ioc.orig_start = start;
 	mv_ioc.donor_start = donor->offset;
-	mv_ioc.moved_len = 0;
 	mv_ioc.len = len;
 
 	if (verbose)
@@ -77,6 +76,7 @@ static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor
 	do {
 		i++;
 		errno = 0;
+		mv_ioc.moved_len = 0;
 		ret = ioctl(fd, EXT4_IOC_MOVE_EXT, &mv_ioc);
 		if (verbose)
 			printf("process %s  it:%d start:%lld len:%lld donor:%lld,"
@@ -102,12 +102,12 @@ static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor
 		assert(mv_ioc.len >= mv_ioc.moved_len);
 		mv_ioc.len -= mv_ioc.moved_len;
 		mv_ioc.orig_start += mv_ioc.moved_len;
-		mv_ioc.donor_start = mv_ioc.orig_start;
+		mv_ioc.donor_start += mv_ioc.moved_len;
 		moved += mv_ioc.moved_len;
-
 	} while (mv_ioc.len);
 
-	if (ret && (errno == EBUSY || errno == ENODATA))
+	if (ret && ignore_error &&
+	    (errno == EBUSY || errno == ENODATA || errno == EOPNOTSUPP))
 		ret = 0;
 	donor->length -= moved;
 	donor->offset += moved;
@@ -154,6 +154,10 @@ int main(int argc, char **argv)
 			exit(1);
 		}
 	}
+	if (!donor_name) {
+		usage();
+		exit(1);
+	}
 	donor.fd = open(donor_name, O_RDWR);
 	if (donor.fd < 0) {
 		perror("can not open donor file");
@@ -168,7 +172,8 @@ int main(int argc, char **argv)
 		donor.offset /= st.st_blksize;
 
 	if (verbose)
-		printf("Init donor :%s off:%lld len:%lld\n", argv[1], donor.offset, donor.length);
+		printf("Init donor :%s off:%lld len:%lld\n",
+		       donor_name, donor.offset, donor.length);
 	while ((read = getline(&line, &len, stdin)) != -1) {
 
 		if (line[read -1] == '\n')
@@ -197,7 +202,7 @@ int main(int argc, char **argv)
 			ret = do_defrag_one(fd, line, 0,
 					    (st.st_size  + st.st_blksize-1)/
 					    st.st_blksize, &donor);
-			if (ret && ignore_error)
+			if (ret && !ignore_error)
 				break;
 		}
 	}
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/6] src/e4compact: handle various block_size correctly
  2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 3/6] src/e4compact cleanup Dmitry Monakhov
@ 2014-08-16 13:13 ` Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 5/6] src/e4compact: add sparse file optimization Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 6/6] ext4/308: add new defrag compact test case Dmitry Monakhov
  4 siblings, 0 replies; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov

EXT4_IOC_MOVE_EXT requires both files has same offset inside page

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 src/e4compact.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/e4compact.c b/src/e4compact.c
index ecc6906..314c329 100644
--- a/src/e4compact.c
+++ b/src/e4compact.c
@@ -50,6 +50,8 @@ struct donor_info
 
 static int ignore_error = 0;
 static int verbose = 0;
+static unsigned blk_per_pg;
+static unsigned blk_sz;
 
 
 static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor_info *donor)
@@ -60,6 +62,9 @@ static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor
 	int i = 0;
 
 	assert(donor->length >= len);
+	/* EXT4_IOC_MOVE_EXT requires both files has same offset inside page */
+	donor->offset += (blk_per_pg - (donor->offset  & (blk_per_pg -1)) +
+			 (start  & (blk_per_pg -1))) & (blk_per_pg -1);
 
 	mv_ioc.donor_fd = donor->fd;
 	mv_ioc.orig_start = start;
@@ -133,6 +138,7 @@ int main(int argc, char **argv)
 	extern int optind;
 	int c;
 	char * donor_name = NULL;
+
 	donor.offset = 0;
 	while ((c = getopt(argc, argv, "f:o:iv")) != -1) {
 		switch (c) {
@@ -170,10 +176,13 @@ int main(int argc, char **argv)
 	donor.length = st.st_size / st.st_blksize;
 	if (donor.offset)
 		donor.offset /= st.st_blksize;
+	blk_sz = st.st_blksize;
+	blk_per_pg = sysconf(_SC_PAGESIZE) / blk_sz;
 
 	if (verbose)
-		printf("Init donor :%s off:%lld len:%lld\n",
-		       donor_name, donor.offset, donor.length);
+		printf("Init donor %s off:%lld len:%lld bsz:%lu\n",
+		       donor_name, donor.offset, donor.length, st.st_blksize);
+
 	while ((read = getline(&line, &len, stdin)) != -1) {
 
 		if (line[read -1] == '\n')
@@ -200,8 +209,8 @@ int main(int argc, char **argv)
 		}
 		if (st.st_size && st.st_blocks) {
 			ret = do_defrag_one(fd, line, 0,
-					    (st.st_size  + st.st_blksize-1)/
-					    st.st_blksize, &donor);
+					    (st.st_size  + blk_sz-1)/ blk_sz,
+					    &donor);
 			if (ret && !ignore_error)
 				break;
 		}
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 5/6] src/e4compact: add sparse file optimization
  2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
                   ` (2 preceding siblings ...)
  2014-08-16 13:13 ` [PATCH 4/6] src/e4compact: handle various block_size correctly Dmitry Monakhov
@ 2014-08-16 13:13 ` Dmitry Monakhov
  2014-08-16 13:13 ` [PATCH 6/6] ext4/308: add new defrag compact test case Dmitry Monakhov
  4 siblings, 0 replies; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov


Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 src/e4compact.c |   86 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 76 insertions(+), 10 deletions(-)

diff --git a/src/e4compact.c b/src/e4compact.c
index 314c329..a0f216b 100644
--- a/src/e4compact.c
+++ b/src/e4compact.c
@@ -16,6 +16,8 @@
 #include <ctype.h>
 #include <limits.h>
 #include <errno.h>
+#include <linux/fs.h>
+#include <linux/fiemap.h>
 #include <linux/types.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
@@ -40,6 +42,7 @@ struct move_extent {
 
 #define EXT4_IOC_MOVE_EXT      _IOWR('f', 15, struct move_extent)
 #endif
+#define EXTENT_MAX_COUNT        512
 
 struct donor_info
 {
@@ -50,11 +53,12 @@ struct donor_info
 
 static int ignore_error = 0;
 static int verbose = 0;
+static int do_sparse = 0;
 static unsigned blk_per_pg;
 static unsigned blk_sz;
 
-
-static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor_info *donor)
+static int do_defrag_range(int fd, char *name,__u64 start, __u64 len,
+			   struct donor_info *donor)
 {
 	int ret, retry;
 	struct move_extent mv_ioc;
@@ -119,10 +123,64 @@ static int do_defrag_one(int fd, char *name,__u64 start, __u64 len, struct donor
 	return ret;
 }
 
+static int do_defrag_sparse(int fd, char *name,__u64 start, __u64 len,
+			    struct donor_info *donor)
+{
+	int i, ret = 0;
+	struct fiemap	*fiemap_buf = NULL;
+	struct fiemap_extent	*ext_buf = NULL;
+
+	fiemap_buf = malloc(EXTENT_MAX_COUNT * sizeof(struct fiemap_extent)
+			    + sizeof(struct fiemap));
+	if (fiemap_buf == NULL) {
+		fprintf(stderr, "%s Can not allocate memory\n", __func__);
+		return -1;
+	}
+	ext_buf = fiemap_buf->fm_extents;
+	memset(fiemap_buf, 0, sizeof(struct fiemap));
+	fiemap_buf->fm_flags |= FIEMAP_FLAG_SYNC;
+	fiemap_buf->fm_extent_count = EXTENT_MAX_COUNT;
+
+	do {
+		__u64 next;
+
+		fiemap_buf->fm_start = start * blk_sz;
+		fiemap_buf->fm_length = len * blk_sz;
+		ret = ioctl(fd, FS_IOC_FIEMAP, fiemap_buf);
+		if (ret < 0 || fiemap_buf->fm_mapped_extents == 0) {
+			fprintf(stderr, "%s Can get extent info for %s ret:%d mapped:%d",
+				__func__, name, ret, fiemap_buf->fm_mapped_extents);
+			goto out;
+		}
+		for (i = 0; i < fiemap_buf->fm_mapped_extents; i++) {
+			ret = do_defrag_range(fd, name,
+					      ext_buf[i].fe_logical / blk_sz,
+					      ext_buf[i].fe_length / blk_sz,
+					      donor);
+			if (ret)
+				goto out;
+		}
+		next = (ext_buf[fiemap_buf->fm_mapped_extents -1].fe_logical +
+			   ext_buf[fiemap_buf->fm_mapped_extents -1].fe_length) /
+			blk_sz;
+		if (next <  start + len) {
+			len -= next  - start;
+			start = next;
+		} else
+			break;
+
+	} while (fiemap_buf->fm_mapped_extents == EXTENT_MAX_COUNT &&
+		 !(ext_buf[EXTENT_MAX_COUNT-1].fe_flags & FIEMAP_EXTENT_LAST));
+out:
+	free(fiemap_buf);
+	return ret;
+}
+
 void usage()
 {
 	printf("Usage: -f donor_file [-o donor_offset] [-v] [-i]\n"
 	       "\t\t -v: verbose\n"
+	       "\t\t -s: enable sparse file optimization\n"
 	       "\t\t -i: ignore errors\n");
 }
 
@@ -138,9 +196,10 @@ int main(int argc, char **argv)
 	extern int optind;
 	int c;
 	char * donor_name = NULL;
+	__u64 eof_blk;
 
 	donor.offset = 0;
-	while ((c = getopt(argc, argv, "f:o:iv")) != -1) {
+	while ((c = getopt(argc, argv, "f:o:isv")) != -1) {
 		switch (c) {
 		case 'o':
 			donor.offset = atol(optarg);
@@ -151,6 +210,9 @@ int main(int argc, char **argv)
 		case 'v':
 			verbose = 1;
 			break;
+		case 's':
+			do_sparse = 1;
+			break;
 		case 'f':
 			donor_name = (optarg);
 			break;
@@ -207,13 +269,17 @@ int main(int argc, char **argv)
 				break;
 
 		}
-		if (st.st_size && st.st_blocks) {
-			ret = do_defrag_one(fd, line, 0,
-					    (st.st_size  + blk_sz-1)/ blk_sz,
-					    &donor);
-			if (ret && !ignore_error)
-				break;
-		}
+		if (!(st.st_size && st.st_blocks))
+			continue;
+
+		eof_blk = (st.st_size + blk_sz-1) / blk_sz;
+		if (do_sparse)
+			ret = do_defrag_sparse(fd, line, 0, eof_blk, &donor);
+		else
+			ret = do_defrag_range(fd, line, 0, eof_blk, &donor);
+		if (ret && !ignore_error)
+			break;
+
 	}
 	free(line);
 	return ret;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 6/6] ext4/308: add new defrag compact test case
  2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
                   ` (3 preceding siblings ...)
  2014-08-16 13:13 ` [PATCH 5/6] src/e4compact: add sparse file optimization Dmitry Monakhov
@ 2014-08-16 13:13 ` Dmitry Monakhov
  2014-09-08 12:21   ` Dave Chinner
  4 siblings, 1 reply; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-16 13:13 UTC (permalink / raw)
  To: fstests; +Cc: david, Dmitry Monakhov

Check data integrity and layout stability during defrag compacting
EXT4_IOC_MOVE_EXT swap extents between target and donor inode.
If ioctl was performed twice then inode's layout should not change.

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 tests/ext4/308     |  103 ++++++++
 tests/ext4/308.out |  681 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/ext4/group   |    3 +-
 3 files changed, 786 insertions(+), 1 deletions(-)
 create mode 100755 tests/ext4/308
 create mode 100644 tests/ext4/308.out

diff --git a/tests/ext4/308 b/tests/ext4/308
new file mode 100755
index 0000000..846ef12
--- /dev/null
+++ b/tests/ext4/308
@@ -0,0 +1,103 @@
+#! /bin/bash
+# FSQA Test No. 308
+#
+# Check data integrity and layout stability during defrag compacting
+# EXT4_IOC_MOVE_EXT simply swap extents between target and donor inode.
+# So if ioctl was performed twice then inode's layout should not change.
+#
+#-----------------------------------------------------------------------
+# (c) 2014 Dmitry Monakhov
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+PIDS=""
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/defrag
+
+# real QA test starts here
+_supported_os Linux
+_need_to_be_root
+_require_scratch
+_require_defrag
+
+rm -f $seqres.full
+
+_workout()
+{
+	nr=$1
+	echo "Create file with $nr * 2 fragments"
+	# Create sparse file
+	for ((i=0;i<nr;i++))
+	do
+		$XFS_IO_PROG -f -c "falloc $((409600*i)) 4k"  \
+			$SCRATCH_MNT/test.$nr >> $seqres.full 2>&1
+	done
+	# Fill holes for half of range , as result file will contain nr*1.5 fragments
+	$XFS_IO_PROG -c "falloc 0 $((204800*nr))"  \
+	    $SCRATCH_MNT/test.$nr | _filter_xfs_io
+	# Data wrilte will convert extetns to inialized ones
+	for ((i=0;i<nr;i++))
+	do
+		patt=`printf "0x%x" $i`
+		$XFS_IO_PROG -c "pwrite -S $patt $((i*123400)) 1234" \
+			$SCRATCH_MNT/test.$nr | _filter_xfs_io
+	done
+	md5sum $SCRATCH_MNT/test.*
+	$XFS_IO_PROG -c "fiemap" -f $SCRATCH_MNT/test.* > $tmp.fiemap.before
+
+	echo "Perform compacting"
+	$XFS_IO_PROG -c "falloc 0 246M" -f $SCRATCH_MNT/donor | _filter_xfs_io
+	ls $SCRATCH_MNT/test.* | run_check $here/src/e4compact \
+		 -v -i -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
+	md5sum $SCRATCH_MNT/test.*
+	$XFS_IO_PROG -c "fiemap" -f $SCRATCH_MNT/test.* > $tmp.fiemap.pass1
+	diff $tmp.fiemap.before $tmp.fiemap.pass1 > /dev/null && \
+	    _fail "Pass1: Extent's layout not changed"
+
+	echo "Perform compacting, second pass"
+	# Second pass should restore original layout
+	ls $SCRATCH_MNT/test.* | run_check $here/src/e4compact \
+		 -v -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
+	md5sum $SCRATCH_MNT/test.*
+	$XFS_IO_PROG -c "fiemap" -f $SCRATCH_MNT/test.* > $tmp.fiemap.pass2
+	diff -up $tmp.fiemap.before $tmp.fiemap.pass2 || \
+	    _fail "Pass2: Extent's layout changed."
+	unlink $SCRATCH_MNT/donor
+}
+
+# Actual testing starting from here
+_scratch_mkfs  >> $seqres.full 2>&1
+_scratch_mount
+_workout 10
+_workout 20
+_workout 40
+_workout 80
+_workout 160
+status=0
\ No newline at end of file
diff --git a/tests/ext4/308.out b/tests/ext4/308.out
new file mode 100644
index 0000000..4d361a1
--- /dev/null
+++ b/tests/ext4/308.out
@@ -0,0 +1,681 @@
+QA output created by 308
+Create file with 10 * 2 fragments
+wrote 1234/1234 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 123400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 246800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 370200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 493600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 617000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 740400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 863800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 987200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1110600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+Perform compacting
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+Perform compacting, second pass
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+Create file with 20 * 2 fragments
+wrote 1234/1234 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 123400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 246800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 370200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 493600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 617000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 740400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 863800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 987200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1110600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1234000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1357400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1480800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1604200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1727600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1851000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1974400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2097800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2221200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2344600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+Perform compacting
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+Perform compacting, second pass
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+Create file with 40 * 2 fragments
+wrote 1234/1234 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 123400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 246800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 370200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 493600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 617000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 740400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 863800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 987200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1110600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1234000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1357400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1480800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1604200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1727600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1851000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1974400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2097800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2221200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2344600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2468000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2591400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2714800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2838200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2961600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3085000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3208400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3331800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3455200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3578600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3702000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3825400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3948800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4072200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4195600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4319000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4442400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4565800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4689200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4812600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+Perform compacting
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+Perform compacting, second pass
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+Create file with 80 * 2 fragments
+wrote 1234/1234 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 123400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 246800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 370200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 493600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 617000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 740400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 863800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 987200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1110600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1234000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1357400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1480800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1604200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1727600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1851000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1974400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2097800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2221200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2344600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2468000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2591400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2714800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2838200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2961600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3085000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3208400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3331800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3455200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3578600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3702000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3825400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3948800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4072200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4195600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4319000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4442400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4565800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4689200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4812600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4936000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5059400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5182800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5306200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5429600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5553000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5676400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5799800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5923200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6046600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6170000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6293400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6416800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6540200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6663600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6787000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6910400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7033800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7157200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7280600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7404000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7527400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7650800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7774200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7897600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8021000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8144400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8267800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8391200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8514600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8638000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8761400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8884800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9008200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9131600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9255000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9378400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9501800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9625200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9748600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
+Perform compacting
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
+Perform compacting, second pass
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
+Create file with 160 * 2 fragments
+wrote 1234/1234 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 123400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 246800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 370200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 493600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 617000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 740400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 863800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 987200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1110600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1234000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1357400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1480800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1604200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1727600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1851000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 1974400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2097800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2221200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2344600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2468000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2591400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2714800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2838200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 2961600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3085000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3208400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3331800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3455200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3578600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3702000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3825400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 3948800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4072200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4195600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4319000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4442400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4565800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4689200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4812600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 4936000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5059400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5182800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5306200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5429600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5553000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5676400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5799800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 5923200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6046600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6170000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6293400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6416800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6540200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6663600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6787000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 6910400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7033800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7157200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7280600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7404000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7527400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7650800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7774200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 7897600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8021000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8144400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8267800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8391200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8514600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8638000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8761400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 8884800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9008200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9131600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9255000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9378400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9501800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9625200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9748600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9872000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 9995400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10118800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10242200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10365600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10489000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10612400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10735800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10859200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 10982600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11106000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11229400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11352800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11476200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11599600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11723000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11846400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 11969800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12093200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12216600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12340000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12463400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12586800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12710200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12833600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 12957000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13080400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13203800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13327200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13450600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13574000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13697400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13820800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 13944200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14067600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14191000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14314400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14437800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14561200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14684600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14808000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 14931400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15054800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15178200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15301600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15425000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15548400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15671800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15795200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 15918600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16042000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16165400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16288800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16412200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16535600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16659000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16782400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 16905800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17029200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17152600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17276000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17399400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17522800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17646200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17769600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 17893000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18016400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18139800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18263200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18386600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18510000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18633400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18756800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 18880200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19003600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19127000
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19250400
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19373800
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19497200
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 1234/1234 bytes at offset 19620600
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+aff33ee70cfca814d5afc93c589a991d  /mnt_scratch/test.160
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
+Perform compacting
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+aff33ee70cfca814d5afc93c589a991d  /mnt_scratch/test.160
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
+Perform compacting, second pass
+50f924a5dc9b03609a4577f9f961414b  /mnt_scratch/test.10
+aff33ee70cfca814d5afc93c589a991d  /mnt_scratch/test.160
+6f9881a10aa775535623786328412d3d  /mnt_scratch/test.20
+f968580511a76bdf4ac521291a901ba0  /mnt_scratch/test.40
+96a65e624734a046b2fd52448f71074d  /mnt_scratch/test.80
diff --git a/tests/ext4/group b/tests/ext4/group
index b384981..aa6a53b 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -13,4 +13,5 @@
 304 aio dangerous ioctl rw stress
 305 auto
 306 auto rw resize quick
-307 auto ioctl rw
\ No newline at end of file
+307 auto ioctl rw
+308 auto ioctl rw prealloc quick
\ No newline at end of file
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-16 13:13 ` [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev Dmitry Monakhov
@ 2014-08-20 23:14   ` Dave Chinner
  2014-08-21  7:36     ` Dmitry Monakhov
  0 siblings, 1 reply; 17+ messages in thread
From: Dave Chinner @ 2014-08-20 23:14 UTC (permalink / raw)
  To: Dmitry Monakhov; +Cc: fstests

On Sat, Aug 16, 2014 at 05:13:07PM +0400, Dmitry Monakhov wrote:
> Currently default block size is frozen to 4096 which is bad for
> various reasons for example:
> 1) It ignores MKFS_OPT

It still ignores MKFS_OPTIONS. The test device is not made with
those parameters unless you specifically remake it before every
xfstests run with a different configuration.

> 2) Not works for architectures where PG_SIZE != 4096

That I don't understand. 4k block size filesystems work just fine
on architectures with page size > 4k....

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-20 23:14   ` Dave Chinner
@ 2014-08-21  7:36     ` Dmitry Monakhov
  2014-08-21  9:23       ` Dave Chinner
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-21  7:36 UTC (permalink / raw)
  To: Dave Chinner; +Cc: fstests

On Thu, 21 Aug 2014 09:14:50 +1000, Dave Chinner <david@fromorbit.com> wrote:
> On Sat, Aug 16, 2014 at 05:13:07PM +0400, Dmitry Monakhov wrote:
> > Currently default block size is frozen to 4096 which is bad for
> > various reasons for example:
> > 1) It ignores MKFS_OPT
> 
> It still ignores MKFS_OPTIONS. The test device is not made with
> those parameters unless you specifically remake it before every
> xfstests run with a different configuration.
Yes. Usually I recreate test_dev after config was updated.
And I tend to agree that this may not be suitable for others.
In order to fix original issue I'll remove block_size argument from
_scratch_mkfs_sized and pass MKFS_OPTIONS instead. This will be valid
change because currently no one pass block_size to _scratch_mkfs_sized anyway.
> 
> > 2) Not works for architectures where PG_SIZE != 4096
> 
> That I don't understand. 4k block size filesystems work just fine
> on architectures with page size > 4k....
Off course. But I meant to say that this arch may use different
block_size by default.
> 
> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@fromorbit.com
> --
> 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  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-21  7:36     ` Dmitry Monakhov
@ 2014-08-21  9:23       ` Dave Chinner
  2014-08-21 14:01         ` Theodore Ts'o
  2014-08-22 13:24         ` Dmitry Monakhov
  0 siblings, 2 replies; 17+ messages in thread
From: Dave Chinner @ 2014-08-21  9:23 UTC (permalink / raw)
  To: Dmitry Monakhov; +Cc: fstests

On Thu, Aug 21, 2014 at 11:36:39AM +0400, Dmitry Monakhov wrote:
> On Thu, 21 Aug 2014 09:14:50 +1000, Dave Chinner <david@fromorbit.com> wrote:
> > On Sat, Aug 16, 2014 at 05:13:07PM +0400, Dmitry Monakhov wrote:
> > > Currently default block size is frozen to 4096 which is bad for
> > > various reasons for example:
> > > 1) It ignores MKFS_OPT
> > 
> > It still ignores MKFS_OPTIONS. The test device is not made with
> > those parameters unless you specifically remake it before every
> > xfstests run with a different configuration.
> Yes. Usually I recreate test_dev after config was updated.
> And I tend to agree that this may not be suitable for others.
> In order to fix original issue I'll remove block_size argument from
> _scratch_mkfs_sized and pass MKFS_OPTIONS instead. This will be valid

_scratch_mkfs_sized already appends MKFS_OPTIONS to the mkfs
command. So, really, it seems like you are trying to solve the wrong
problem. i.e. if MKFS_OPTIONS already specifies a block size, then
this code is causing it to be specified twice?

i.e. this code works for XFS because it checks MKFS_OPTIONS for a
custom block size and lets that override the test specified default.
It can do this because it uses $fssize for the siz eof the
filesystem to create, not a block count. For ext4, you need to first
determine if ther eis a block size in MKFS_OPTIONS, extract it if
there is, then use that to calculate the size of the fs in blocks to
pass to mkfs.ext4....

What you want the code already does for XFS - you just need to make
the ext4 (and any other fs you care about) also work correctly with
MKFS_OPTIONS....

> change because currently no one pass block_size to _scratch_mkfs_sized anyway.

perhaps because it already does the right thing for XFS... ;)

> > > 2) Not works for architectures where PG_SIZE != 4096
> > 
> > That I don't understand. 4k block size filesystems work just fine
> > on architectures with page size > 4k....
> Off course. But I meant to say that this arch may use different
> block_size by default.

Typically default block size is set by mkfs, not the arch mkfs is
run on.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-21  9:23       ` Dave Chinner
@ 2014-08-21 14:01         ` Theodore Ts'o
  2014-08-21 20:44           ` Dave Chinner
  2014-08-22 13:24         ` Dmitry Monakhov
  1 sibling, 1 reply; 17+ messages in thread
From: Theodore Ts'o @ 2014-08-21 14:01 UTC (permalink / raw)
  To: Dave Chinner; +Cc: Dmitry Monakhov, fstests

On that note, what is dbsize supposed to be?  It appears to be set in
_filter_mkfs?  It appears from context that this is supposed to be the
data block size?  Currently this gets hard coded to 4k for non-xfs
file systems, and it assumes a 256 byte inode.

It looks like we should be extracting this information from dumpe2fs
for extN file systems?

					- Ted

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-21 14:01         ` Theodore Ts'o
@ 2014-08-21 20:44           ` Dave Chinner
  0 siblings, 0 replies; 17+ messages in thread
From: Dave Chinner @ 2014-08-21 20:44 UTC (permalink / raw)
  To: Theodore Ts'o; +Cc: Dmitry Monakhov, fstests

On Thu, Aug 21, 2014 at 10:01:06AM -0400, Theodore Ts'o wrote:
> On that note, what is dbsize supposed to be?  It appears to be set in
> _filter_mkfs?  It appears from context that this is supposed to be the
> data block size?  Currently this gets hard coded to 4k for non-xfs
> file systems, and it assumes a 256 byte inode.
> 
> It looks like we should be extracting this information from dumpe2fs
> for extN file systems?

*nod*

Most of the special mkfs sauce that is used by XFS specific tests
simply has not been written for other filesystems.  The hard coded
results from _filter_mkfs are just there so that generic tests that
use dbsize/isize mostly work.

So if want you to add this "reflect reality" functionality for ext4
you are more than welcome to do it. :)

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-21  9:23       ` Dave Chinner
  2014-08-21 14:01         ` Theodore Ts'o
@ 2014-08-22 13:24         ` Dmitry Monakhov
  2014-08-22 15:09           ` Theodore Ts'o
  1 sibling, 1 reply; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-22 13:24 UTC (permalink / raw)
  To: Dave Chinner; +Cc: fstests

[-- Attachment #1: Type: text/plain, Size: 2018 bytes --]

On Thu, 21 Aug 2014 19:23:44 +1000, Dave Chinner <david@fromorbit.com> wrote:
> On Thu, Aug 21, 2014 at 11:36:39AM +0400, Dmitry Monakhov wrote:
> > On Thu, 21 Aug 2014 09:14:50 +1000, Dave Chinner <david@fromorbit.com> wrote:
> > > On Sat, Aug 16, 2014 at 05:13:07PM +0400, Dmitry Monakhov wrote:
> > > > Currently default block size is frozen to 4096 which is bad for
> > > > various reasons for example:
> > > > 1) It ignores MKFS_OPT
> > > 
> > > It still ignores MKFS_OPTIONS. The test device is not made with
> > > those parameters unless you specifically remake it before every
> > > xfstests run with a different configuration.
> > Yes. Usually I recreate test_dev after config was updated.
> > And I tend to agree that this may not be suitable for others.
> > In order to fix original issue I'll remove block_size argument from
> > _scratch_mkfs_sized and pass MKFS_OPTIONS instead. This will be valid
> 
> _scratch_mkfs_sized already appends MKFS_OPTIONS to the mkfs
> command. So, really, it seems like you are trying to solve the wrong
> problem. i.e. if MKFS_OPTIONS already specifies a block size, then
> this code is causing it to be specified twice?
> 
> i.e. this code works for XFS because it checks MKFS_OPTIONS for a
> custom block size and lets that override the test specified default.
> It can do this because it uses $fssize for the siz eof the
> filesystem to create, not a block count. For ext4, you need to first
> determine if ther eis a block size in MKFS_OPTIONS, extract it if
> there is, then use that to calculate the size of the fs in blocks to
> pass to mkfs.ext4....
> 
> What you want the code already does for XFS - you just need to make
> the ext4 (and any other fs you care about) also work correctly with
> MKFS_OPTIONS....
> 
> > change because currently no one pass block_size to _scratch_mkfs_sized anyway.
> 
> perhaps because it already does the right thing for XFS... ;)
Ok, agree. Since mke2fs can not do right thing let's we do it
it for them. Updated version attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-common-_scratch_mkfs_sized-inherent-default-block-si.patch --]
[-- Type: text/x-patch, Size: 1100 bytes --]

>From df1cc5dd89750a419b921e12599fab644a867f4d Mon Sep 17 00:00:00 2001
From: Dmitry Monakhov <dmonakhov@openvz.org>
Date: Fri, 22 Aug 2014 17:05:14 +0400
Subject: [PATCH] common: _scratch_mkfs_sized inherent default block size from MKFS_OPTIONS


Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
---
 common/rc |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/common/rc b/common/rc
index 84fef35..3fcf0a1 100644
--- a/common/rc
+++ b/common/rc
@@ -582,8 +582,19 @@ _scratch_mkfs_sized()
 {
     fssize=$1
     blocksize=$2
-    [ -z "$blocksize" ] && blocksize=4096
 
+    case $FSTYP in
+    xfs)
+    	def_blksz=`echo $MKFS_OPTIONS|sed -rn 's/.*-b ?size= ?+([0-9]+).*/\1/p'`
+	;;
+    ext2|ext3|ext4|ext4dev|udf|btrfs)
+    	def_blksz=`echo $MKFS_OPTIONS| sed -rn 's/.*-b ?+([0-9]+).*/\1/p'`
+	;;
+    esac
+
+    [ -n "$def_blksz" ] && blocksize=$def_blksz
+    [ -z "$blocksize" ] && blocksize=4096
+ 
     re='^[0-9]+$'
     if ! [[ $fssize =~ $re ]] ; then
         _notrun "error: _scratch_mkfs_sized: fs size \"$fssize\" not an integer."
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-22 13:24         ` Dmitry Monakhov
@ 2014-08-22 15:09           ` Theodore Ts'o
  2014-08-22 15:48             ` Dmitry Monakhov
  0 siblings, 1 reply; 17+ messages in thread
From: Theodore Ts'o @ 2014-08-22 15:09 UTC (permalink / raw)
  To: Dmitry Monakhov; +Cc: Dave Chinner, fstests

The mke2fs command will allow a subsequent -b option to override a
pervious one.  So something like this will work:

mke2fs -t ext4 -b 4096 -b 2048 -b 1024 /tmp/foo.img 100

So you don't really need to do hacks with sed.  Also, if MKFS_OPTIONS
has a -b option, then you shouldn't need to do any -b overrides at
all, since that probably means the person doing the xfstest run
actually specified a block size directly for a Good Reason.  We might
want to issue a warning message if the block size specified by
MKFS_OPTIONS doesn't match what the test file system uses, but that's
more of a sanity check than anything else.

Also, see my comments about dbsize; it might be a good idea if we want
to do this sort of thing to refactor out a standard way of determining
the block size of the test file system.

Cheers,

						- Ted

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-22 15:09           ` Theodore Ts'o
@ 2014-08-22 15:48             ` Dmitry Monakhov
  2014-08-22 16:37               ` Theodore Ts'o
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Monakhov @ 2014-08-22 15:48 UTC (permalink / raw)
  To: Theodore Ts'o; +Cc: Dave Chinner, fstests

On Fri, 22 Aug 2014 11:09:15 -0400, "Theodore Ts'o" <tytso@mit.edu> wrote:
> The mke2fs command will allow a subsequent -b option to override a
> pervious one.  So something like this will work:
> 
> mke2fs -t ext4 -b 4096 -b 2048 -b 1024 /tmp/foo.img 100
No, This will not works. Looks like you have missed the point.
helper has following signature:
_scratch_mkfs_sized <size in bytes> [optional blocksize]
But mke2fs accept filesystem size accounted in fs-blocks, so in order
to convert size in blocks to number of blocks we have to figure out blocksize.
In fact currently _ALL_ users of _scratch_mkfs_sized skip this optional
parameter, so it is reasonable to use the one from MKFS_OPTIONS instead other
which is hard coded inside helper. And as you can see from my patch logic is follows:
1) Use explicit block size if it was passed as function parameter
2) if not (1) then Use block size defined from MKFS_OPTION
3) if not (2) Use default block size (4096) 
> 
> So you don't really need to do hacks with sed.  Also, if MKFS_OPTIONS
> has a -b option, then you shouldn't need to do any -b overrides at
> all, since that probably means the person doing the xfstest run
> actually specified a block size directly for a Good Reason.  We might
> want to issue a warning message if the block size specified by
> MKFS_OPTIONS doesn't match what the test file system uses, but that's
> more of a sanity check than anything else.
> 
> Also, see my comments about dbsize; it might be a good idea if we want
> to do this sort of thing to refactor out a standard way of determining
> the block size of the test file system.
> 
> Cheers,
> 
> 						- Ted

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-22 15:48             ` Dmitry Monakhov
@ 2014-08-22 16:37               ` Theodore Ts'o
  2014-08-23  0:31                 ` Dave Chinner
  0 siblings, 1 reply; 17+ messages in thread
From: Theodore Ts'o @ 2014-08-22 16:37 UTC (permalink / raw)
  To: Dmitry Monakhov; +Cc: Dave Chinner, fstests

On Fri, Aug 22, 2014 at 07:48:07PM +0400, Dmitry Monakhov wrote:
> No, This will not works. Looks like you have missed the point.
> helper has following signature:
> _scratch_mkfs_sized <size in bytes> [optional blocksize]
> But mke2fs accept filesystem size accounted in fs-blocks, so in order
> to convert size in blocks to number of blocks we have to figure out blocksize.

Ah, sorry.  I didn't understand what problem you were trying to solve.

But mke2fs does accept the filesystem size accounted in kilobytes (and
megabytes, gigabytes, etc.).  So you could just take the size in
bytes, divide by 1024, and then append 'k', i.e:

       mke2fs $MKFS_OPTS $DEVICE $(expr $bytes / 1024)k

This will work regardless of the block size.

Cheers,

						- Ted

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev
  2014-08-22 16:37               ` Theodore Ts'o
@ 2014-08-23  0:31                 ` Dave Chinner
  0 siblings, 0 replies; 17+ messages in thread
From: Dave Chinner @ 2014-08-23  0:31 UTC (permalink / raw)
  To: Theodore Ts'o; +Cc: Dmitry Monakhov, fstests

On Fri, Aug 22, 2014 at 12:37:12PM -0400, Theodore Ts'o wrote:
> On Fri, Aug 22, 2014 at 07:48:07PM +0400, Dmitry Monakhov wrote:
> > No, This will not works. Looks like you have missed the point.
> > helper has following signature:
> > _scratch_mkfs_sized <size in bytes> [optional blocksize]
> > But mke2fs accept filesystem size accounted in fs-blocks, so in order
> > to convert size in blocks to number of blocks we have to figure out blocksize.
> 
> Ah, sorry.  I didn't understand what problem you were trying to solve.
> 
> But mke2fs does accept the filesystem size accounted in kilobytes (and
> megabytes, gigabytes, etc.).  So you could just take the size in
> bytes, divide by 1024, and then append 'k', i.e:
> 
>        mke2fs $MKFS_OPTS $DEVICE $(expr $bytes / 1024)k

Not according to the man page:

	blocks-count is the number of blocks on the device.

Perhaps the documentation needs to be updated to match reality?

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 6/6] ext4/308: add new defrag compact test case
  2014-08-16 13:13 ` [PATCH 6/6] ext4/308: add new defrag compact test case Dmitry Monakhov
@ 2014-09-08 12:21   ` Dave Chinner
  0 siblings, 0 replies; 17+ messages in thread
From: Dave Chinner @ 2014-09-08 12:21 UTC (permalink / raw)
  To: Dmitry Monakhov; +Cc: fstests

On Sat, Aug 16, 2014 at 05:13:11PM +0400, Dmitry Monakhov wrote:
> Check data integrity and layout stability during defrag compacting
> EXT4_IOC_MOVE_EXT swap extents between target and donor inode.
> If ioctl was performed twice then inode's layout should not change.
> 
> Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
....
> +	echo "Perform compacting"
> +	$XFS_IO_PROG -c "falloc 0 246M" -f $SCRATCH_MNT/donor | _filter_xfs_io
> +	ls $SCRATCH_MNT/test.* | run_check $here/src/e4compact \
> +		 -v -i -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
> +	md5sum $SCRATCH_MNT/test.*

Needs to _filter_scratch. I'll fix it up directly rather than
waiting for Dimitry to get back to these patches...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2014-09-08 12:21 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-16 13:13 [PATCH 1/6] common: add _mkfs_dev helper Dmitry Monakhov
2014-08-16 13:13 ` [PATCH 2/6] common: _scratch_mkfs_sized should inherent default block size from test_dev Dmitry Monakhov
2014-08-20 23:14   ` Dave Chinner
2014-08-21  7:36     ` Dmitry Monakhov
2014-08-21  9:23       ` Dave Chinner
2014-08-21 14:01         ` Theodore Ts'o
2014-08-21 20:44           ` Dave Chinner
2014-08-22 13:24         ` Dmitry Monakhov
2014-08-22 15:09           ` Theodore Ts'o
2014-08-22 15:48             ` Dmitry Monakhov
2014-08-22 16:37               ` Theodore Ts'o
2014-08-23  0:31                 ` Dave Chinner
2014-08-16 13:13 ` [PATCH 3/6] src/e4compact cleanup Dmitry Monakhov
2014-08-16 13:13 ` [PATCH 4/6] src/e4compact: handle various block_size correctly Dmitry Monakhov
2014-08-16 13:13 ` [PATCH 5/6] src/e4compact: add sparse file optimization Dmitry Monakhov
2014-08-16 13:13 ` [PATCH 6/6] ext4/308: add new defrag compact test case Dmitry Monakhov
2014-09-08 12:21   ` Dave Chinner

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.