diff mbox series

tests: PAGE_SIZE larger than blocksize with hole

Message ID 20180616071334.10699-1-artem.blagodarenko@gmail.com
State Accepted, archived
Headers show
Series tests: PAGE_SIZE larger than blocksize with hole | expand

Commit Message

Artem Blagodarenko June 16, 2018, 7:13 a.m. UTC
From: Andreas Dilger <andreas.dilger@intel.com>

Verify correct operation in the case of writing files with allocated
blocks at the end of the file beyond i_size.  This can happen for
PAGE_SIZE > blocksize, or through fallocate().

The f_eofblocks thest checks quite the same situation, but for broken
file system. This test is about correct file.

Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Artem Blagodarenko <artem.blagodarenko@gmail.com>
---
 tests/f_pgsize_gt_blksize/expect.1 |  7 +++++++
 tests/f_pgsize_gt_blksize/expect.2 |  7 +++++++
 tests/f_pgsize_gt_blksize/name     |  1 +
 tests/f_pgsize_gt_blksize/script   | 18 ++++++++++++++++++
 4 files changed, 33 insertions(+)
 create mode 100644 tests/f_pgsize_gt_blksize/expect.1
 create mode 100644 tests/f_pgsize_gt_blksize/expect.2
 create mode 100644 tests/f_pgsize_gt_blksize/name
 create mode 100644 tests/f_pgsize_gt_blksize/script

Comments

Theodore Ts'o June 23, 2018, 9:21 p.m. UTC | #1
On Sat, Jun 16, 2018 at 10:13:34AM +0300, Artem Blagodarenko wrote:
> From: Andreas Dilger <andreas.dilger@intel.com>
> 
> Verify correct operation in the case of writing files with allocated
> blocks at the end of the file beyond i_size.  This can happen for
> PAGE_SIZE > blocksize, or through fallocate().
> 
> The f_eofblocks thest checks quite the same situation, but for broken
> file system. This test is about correct file.
> 
> Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
> Signed-off-by: Artem Blagodarenko <artem.blagodarenko@gmail.com>

I had to apply the following fixup so that the test it would (a) pass,
and (b) it would correctly test the orignial goal of the test.

Problems:

* $RANDOM is not set in upstream test framework.  This meant DATA_FILE
  was set to the NULL string, but since stdout of debugfs was
  redirected to /dev/null, apparently no one noticed.

* Using the source of /dev/zero for the file doesn't work since
  debugfs's write command now will write a sparse file.  But that
  means you're not testing what you had hoped to be testing.  When
  this test was originally written the sparse file optimization was
  probably not present, but then when the test was forward ported to a
  newer version of e2fsprogs, the test started failing due to the
  e2fsck summary line being different, and someone probably just
  blindly fixed up the golden output file instead of asking the
  question why it was the expected output had changed.

					- Ted

diff --git a/tests/f_pgsize_gt_blksize/expect.1 b/tests/f_pgsize_gt_blksize/expect.1
index 628a376a2..c00f5db51 100644
--- a/tests/f_pgsize_gt_blksize/expect.1
+++ b/tests/f_pgsize_gt_blksize/expect.1
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 12/32 files (0.0% non-contiguous), 23/100 blocks
+test_filesys: 12/32 files (0.0% non-contiguous), 40/100 blocks
 Exit status is 0
diff --git a/tests/f_pgsize_gt_blksize/expect.2 b/tests/f_pgsize_gt_blksize/expect.2
index 628a376a2..c00f5db51 100644
--- a/tests/f_pgsize_gt_blksize/expect.2
+++ b/tests/f_pgsize_gt_blksize/expect.2
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 12/32 files (0.0% non-contiguous), 23/100 blocks
+test_filesys: 12/32 files (0.0% non-contiguous), 40/100 blocks
 Exit status is 0
diff --git a/tests/f_pgsize_gt_blksize/script b/tests/f_pgsize_gt_blksize/script
index 54fa9b81e..422b83ae4 100644
--- a/tests/f_pgsize_gt_blksize/script
+++ b/tests/f_pgsize_gt_blksize/script
@@ -3,8 +3,8 @@ SKIP_GUNZIP="true"
 touch $TMPFILE
 $MKE2FS -N 32 -F -o Linux -b 1024 $TMPFILE 100 > /dev/null 2>&1
 
-DATA_FILE=$RANDOM
-dd if=/dev/zero of=$DATA_FILE bs=1k count=16 > /dev/null 2>&1
+DATA_FILE=$(mktemp ${TMPDIR:-/tmp}/e2fsprogs-zerodata.XXXXXX)
+dd if=$TEST_BITS of=$DATA_FILE bs=1k count=16 > /dev/null 2>&1
 $DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
 write $DATA_FILE foo
 set_inode_field foo size 13000
diff mbox series

Patch

diff --git a/tests/f_pgsize_gt_blksize/expect.1 b/tests/f_pgsize_gt_blksize/expect.1
new file mode 100644
index 00000000..628a376a
--- /dev/null
+++ b/tests/f_pgsize_gt_blksize/expect.1
@@ -0,0 +1,7 @@ 
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/32 files (0.0% non-contiguous), 23/100 blocks
+Exit status is 0
diff --git a/tests/f_pgsize_gt_blksize/expect.2 b/tests/f_pgsize_gt_blksize/expect.2
new file mode 100644
index 00000000..628a376a
--- /dev/null
+++ b/tests/f_pgsize_gt_blksize/expect.2
@@ -0,0 +1,7 @@ 
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/32 files (0.0% non-contiguous), 23/100 blocks
+Exit status is 0
diff --git a/tests/f_pgsize_gt_blksize/name b/tests/f_pgsize_gt_blksize/name
new file mode 100644
index 00000000..3aa02027
--- /dev/null
+++ b/tests/f_pgsize_gt_blksize/name
@@ -0,0 +1 @@ 
+PAGE_SIZE larger than blocksize with hole at end
diff --git a/tests/f_pgsize_gt_blksize/script b/tests/f_pgsize_gt_blksize/script
new file mode 100644
index 00000000..84c1a9f8
--- /dev/null
+++ b/tests/f_pgsize_gt_blksize/script
@@ -0,0 +1,18 @@ 
+SKIP_GUNZIP="true"
+
+touch $TMPFILE
+$MKE2FS -N 32 -F -o Linux -b 1024 $TMPFILE 100 > /dev/null 2>&1 
+
+DATA_FILE=$RANDOM
+dd if=/dev/zero of=$DATA_FILE bs=1k count=16 > /dev/null 2>&1
+$DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
+write $DATA_FILE foo
+set_inode_field foo size 13000
+q
+EOF
+
+. $cmd_dir/run_e2fsck
+
+rm -f $DATA_FILE
+
+unset DATA_FILE