[PATCH 2/2] xfstest: ext4/307 cleanup

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



 tests/ext4/307:
 - test various block sizes
 src/e4compact.c:
 - fix incorrect offset for donor file
 - add support for tunable block size

Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
---
 src/e4compact.c    |   22 +++++++++++++++++-----
 tests/ext4/307     |   16 +++++++++++-----
 tests/ext4/307.out |   13 +++++++++++++
 3 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/e4compact.c b/src/e4compact.c
index de0aeb6..c0284ff 100644
--- a/src/e4compact.c
+++ b/src/e4compact.c
@@ -48,6 +48,8 @@ struct donor_info
 	__u64 length;
 };
 
+static long page_size;
+static long block_size;
 static int ignore_error = 0;
 static int verbose = 0;
 
@@ -64,7 +66,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 +78,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 +104,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;
@@ -133,9 +135,16 @@ int main(int argc, char **argv)
 	extern int optind;
 	int c;
 	char * donor_name = NULL;
+	int blk_per_pg;
 	donor.offset = 0;
-	while ((c = getopt(argc, argv, "f:o:iv")) != -1) {
+
+	page_size = sysconf(_SC_PAGESIZE);
+	block_size = page_size;
+
+	while ((c = getopt(argc, argv, "b:f:o:iv")) != -1) {
 		switch (c) {
+		case 'b':
+			block_size = atol(optarg);
 		case 'o':
 			donor.offset = atol(optarg);
 			break;
@@ -167,6 +176,7 @@ int main(int argc, char **argv)
 	if (donor.offset)
 		donor.offset /= st.st_blksize;
 
+	blk_per_pg = page_size / block_size;
 	if (verbose)
 		printf("Init donor :%s off:%lld len:%lld\n", argv[1], donor.offset, donor.length);
 	while ((read = getline(&line, &len, stdin)) != -1) {
@@ -194,6 +204,8 @@ int main(int argc, char **argv)
 
 		}
 		if (st.st_size && st.st_blocks) {
+
+			donor.offset =  (donor.offset + blk_per_pg -1) & ~(blk_per_pg -1);
 			ret = do_defrag_one(fd, line, 0,
 					    (st.st_size  + st.st_blksize-1)/
 					    st.st_blksize, &donor);
diff --git a/tests/ext4/307 b/tests/ext4/307
index 081f819..ee20f61 100755
--- a/tests/ext4/307
+++ b/tests/ext4/307
@@ -39,7 +39,11 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
 FSSTRESS_AVOID="$FSSTRESS_AVOID -ffsync=0 -fsync=0 -ffdatasync=0"
 _workout()
 {
+	blk_sz=$1
 	echo ""
+	echo " Start test for $blk_sz blocksize "
+	_scratch_mkfs_sized $((512 * 1024 * 1024)) $blk_sz >> $seqres.full 2>&1
+	_scratch_mount
 	echo "Run fsstress"
 	out=$SCRATCH_MNT/fsstress.$$
 	args=`_scale_fsstress_args -p4 -n999 -f setattr=1 $FSSTRESS_AVOID -d $out`
@@ -52,9 +56,12 @@ _workout()
 	$XFS_IO_PROG -c "falloc 0 250M" -f $SCRATCH_MNT/donor | _filter_xfs_io
 	echo "Perform compacting"
 	cat $out.list | run_check $here/src/e4compact \
-		-i -v -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
+		-i -v -b $blk_sz -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
+	$XFS_IO_PROG -c "fiemap" -f $SCRATCH_MNT/donor  >> $seqres.full 2>&1
 	echo "Check data"
 	run_check md5sum -c $out.md5sum
+	_scratch_unmount
+	_check_scratch_fs
 }
 
 # real QA test starts here
@@ -65,9 +72,8 @@ _need_to_be_root
 _require_scratch
 _require_defrag
 
-_scratch_mkfs_sized $((512 * 1024 * 1024)) >> $seqres.full 2>&1
-_scratch_mount
-
-_workout
+_workout 4096
+_workout 2048
+_workout 1024
 status=0
 exit
diff --git a/tests/ext4/307.out b/tests/ext4/307.out
index f48e9f3..9cbd1ab 100644
--- a/tests/ext4/307.out
+++ b/tests/ext4/307.out
@@ -1,5 +1,18 @@
 QA output created by 307
 
+ Start test for 4096 blocksize 
+Run fsstress
+Allocate donor file
+Perform compacting
+Check data
+
+ Start test for 2048 blocksize 
+Run fsstress
+Allocate donor file
+Perform compacting
+Check data
+
+ Start test for 1024 blocksize 
 Run fsstress
 Allocate donor file
 Perform compacting
-- 
1.7.1

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




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

  Powered by Linux