Skip to contentSkip to conversation

syscalls/fallocate04: add 'FALLOC_FL_INSERT_RANGE' test-case

PATCH New Alexey Kodanev 2 participants 4 messages Jun 22, 2016 – Jul 28, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 syscalls/fallocate04: add 'FALLOC_FL_INSERT_RANGE' test-case

Check that it can insert space in the middle of the file. Verify new size and file's content. The flag is available since Linux 4.1. Supported FS: XFS(4.1+) & ext4(4.2+).

Also fix test04() if number of blocks more than 3.

---
 testcases/kernel/syscalls/fallocate/fallocate.h   |    4 ++
 testcases/kernel/syscalls/fallocate/fallocate04.c |   50 ++++++++++++++++++++-
 2 files changed, 52 insertions(+), 2 deletions(-)
testcases/kernel/syscalls/fallocate/fallocate.h +4 -0
index 1900aa0..5119988 100644
@@ -47,6 +47,10 @@
 #define FALLOC_FL_ZERO_RANGE 0x10
 #endif
 
+#ifndef FALLOC_FL_INSERT_RANGE
+#define FALLOC_FL_INSERT_RANGE 0x20
+#endif
+
 #if !defined(HAVE_FALLOCATE)
 static inline long fallocate(int fd, int mode, loff_t offset, loff_t len)
 {
testcases/kernel/syscalls/fallocate/fallocate04.c +48 -2

74 lines not on this page · raw message

Signature · 1 line
1.7.1
#1 lore raw

PATCH 1/1 syscalls/fallocate04: add 'FALLOC_FL_INSERT_RANGE' test-case

Hi!

testcases/kernel/syscalls/fallocate/fallocate04.c static void test04(void) · line 270

Quoted 6 lines
testcases/kernel/syscalls/fallocate/fallocate04.c +2 -1
 	fill_tst_buf(tmp_buf);
 
 	memcpy(exp_buf, tmp_buf, block_size);
-	memcpy(exp_buf + block_size, tmp_buf + size, block_size);
+	memcpy(exp_buf + block_size, tmp_buf + 2 * block_size,
+	       buf_size - block_size * 2);

Looks OK to me.

Quoted 36 lines
testcases/kernel/syscalls/fallocate/fallocate04.c +30 -0
 	exp_buf[block_size - 1] = exp_buf[block_size] = '\0';
 	check_file_data(exp_buf, size);
@@ -274,6 +275,50 @@ static void test04(void)
 	tst_resm(TPASS, "test-case succeeded");
 }
 
+static void test05(void)
+{
+	tst_resm(TINFO, "inserting space with FALLOC_FL_INSERT_RANGE");
+
+	size_t alloc_size0 = get_allocsize();
+
+	tst_resm(TINFO, "read current allocated file size '%zu'", alloc_size0);
+
+	if (fallocate(fd, FALLOC_FL_INSERT_RANGE, block_size,
+	    block_size) == -1) {
+		if (errno == EOPNOTSUPP) {
+			tst_brkm(TCONF, cleanup,
+			         "FALLOC_FL_INSERT_RANGE not supported");
+		}
+		tst_brkm(TFAIL | TERRNO, cleanup, "fallocate failed");
+	}
+
+	/* allocate space and ensure that it filled with zeroes */
+	if (fallocate(fd, FALLOC_FL_ZERO_RANGE, block_size, block_size) == -1)
+		tst_brkm(TFAIL | TERRNO, cleanup, "fallocate failed");
+
+	size_t alloc_size1 = get_allocsize();
+
+	tst_resm(TINFO, "allocated file size before '%zu' and after '%zu'",
+		 alloc_size0, alloc_size1);
+	if ((alloc_size0 + block_size) != alloc_size1)
+		tst_brkm(TFAIL, cleanup, "not expected allocated size");
+
+	size_t size = buf_size;
+	char tmp_buf[buf_size];

testcases/kernel/syscalls/fallocate/fallocate04.c static void test04(void) · line 317

Quoted 10 lines
testcases/kernel/syscalls/fallocate/fallocate04.c +10 -0
+	char exp_buf[size];
+
+	fill_tst_buf(tmp_buf);
+
+	memcpy(exp_buf, tmp_buf, block_size);
+	memcpy(exp_buf +  2 * block_size, tmp_buf + 2 * block_size,
+	       buf_size - block_size * 2);
+	memset(exp_buf + block_size - 1, 0, block_size + 2);
+
+	check_file_data(exp_buf, size);

Why not just:

        fill_tst_buf(exp_buf);
	memset(exp_buf + block_size - 1, 0, block_size + 2);

Otherwise it looks fine.

Signature · 2 lines
Cyril Hrubis
[email protected]
#2 lore raw

PATCH 1/1 syscalls/fallocate04: add 'FALLOC_FL_INSERT_RANGE' test-case

Hi,

Quoted 16 lines · Cyril Hrubis

...

testcases/kernel/syscalls/fallocate/fallocate04.c +13 -0
+
+	size_t size = buf_size;
+	char tmp_buf[buf_size];
+	char exp_buf[size];
+
+	fill_tst_buf(tmp_buf);
+
+	memcpy(exp_buf, tmp_buf, block_size);
+	memcpy(exp_buf +  2 * block_size, tmp_buf + 2 * block_size,
+	       buf_size - block_size * 2);
+	memset(exp_buf + block_size - 1, 0, block_size + 2);
+
+	check_file_data(exp_buf, size);

Why not just:

Quoted 2 lines
         fill_tst_buf(exp_buf);
	memset(exp_buf + block_size - 1, 0, block_size + 2);

Correct, we returned to the state that was after test-case 3.

Thanks,
Alexey

#3 lore raw

PATCH 1/1 syscalls/fallocate04: add 'FALLOC_FL_INSERT_RANGE' test-case

Hi,

Applied corrected version.

Thanks,
Alexey