[LTP] [PATCH] tst_fill_fs: drop safe_macro from fill_flat_vec

Li Wang liwang@redhat.com
Thu Jun 15 09:53:07 CEST 2023


LTP fs_fill is trying to spawn nCPUS thread to create corresponding
subdirectories and completely fill them. But in the invoke function
tst_fill_fs(, TST_FILL_BLOCKS) -> fill_flat_vec() which has SAFE_MACROs
to break the open behavior once fs is filled with ENOSPC return.

The failure like there aren't enough free inodes in the filesystem for
the tst_fs_fill test program to create it's set of "AOF" data files.

  4108	tst_test.c:1634: TINFO: === Testing on xfs ===
  4109	tst_test.c:1094: TINFO: Formatting /dev/loop0 with xfs opts='' extra opts=''
  4110	fs_fill.c:108: TINFO: Running 98 writer threads
  4111	tst_fill_fs.c:77: TBROK: openat(89</mnt/testarea/ltp-wGg0XNSHcr/LTP_fs_XLxrLh/mntpoint/thread84>, 'AOF', 101, 600): ENOSPC (28)
  4112	tst_fill_fs.c:77: TBROK: openat(87</mnt/testarea/ltp-wGg0XNSHcr/LTP_fs_XLxrLh/mntpoint/thread83>, 'AOF', 101, 600): ENOSPC (28)
  4113	tst_fill_fs.c:77: TWARN: openat(85</mnt/testarea/ltp-wGg0XNSHcr/LTP_fs_XLxrLh/mntpoint/thread82>, 'AOF', 101, 600): ENOSPC (28)
  4114	tst_fill_fs.c:77: TWARN: openat(3</mnt/testarea/ltp-wGg0XNSHcr/LTP_fs_XLxrLh/mntpoint/thread81>, 'AOF', 101, 600): ENOSPC (28)

This patch is just to convert the fill_flat_vec() to ignore ENOSPC like
fill_randome() in opening subdirectories.

Reported-by: Shizhao Chen <shichen@redhat.com>
Signed-off-by: Li Wang <liwang@redhat.com>
Cc: Dave Chinner <dchinner@redhat.com>
Cc: Richard Palethorpe <rpalethorpe@suse.com>
---
 lib/tst_fill_fs.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/tst_fill_fs.c b/lib/tst_fill_fs.c
index b9d29755a..243eb279f 100644
--- a/lib/tst_fill_fs.c
+++ b/lib/tst_fill_fs.c
@@ -73,12 +73,29 @@ void fill_random(const char *path, int verbose)
 
 void fill_flat_vec(const char *path, int verbose)
 {
-	int dir = SAFE_OPEN(path, O_PATH | O_DIRECTORY);
-	int fd = SAFE_OPENAT(dir, "AOF", O_WRONLY | O_CREAT, 0600);
+	int dir, fd;
 	struct iovec iov[512];
 	int iovcnt = ARRAY_SIZE(iov);
 	int retries = 3;
 
+	dir = open(path, O_PATH | O_DIRECTORY);
+	if (dir == -1) {
+		if (errno == ENOSPC) {
+			tst_res(TINFO | TERRNO, "open()");
+			return;
+		}
+		tst_brk(TBROK | TERRNO, "open(%s, %d) failed", path, O_PATH | O_DIRECTORY);
+	}
+
+	fd = openat(dir, "AOF", O_WRONLY | O_CREAT, 0600);
+	if (fd == -1) {
+		if (errno == ENOSPC) {
+			tst_res(TINFO | TERRNO, "openat()");
+			return;
+		}
+		tst_brk(TBROK | TERRNO, "openat(%s, %d, 0600) failed", dir, O_PATH | O_DIRECTORY);
+	}
+
 	SAFE_CLOSE(dir);
 
 	for (int i = 0; i < iovcnt; i++) {
-- 
2.40.1



More information about the ltp mailing list