Linux Test Project
 help / color / mirror / Atom feed
* [LTP] [PATCH v2] growfiles:fix test failure due to missing directory
@ 2026-04-09  9:00 lepillai
  2026-04-09  9:27 ` Cyril Hrubis
  2026-04-10  6:24 ` [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser lepillai
  0 siblings, 2 replies; 4+ messages in thread
From: lepillai @ 2026-04-09  9:00 UTC (permalink / raw)
  To: ltp

From: lekshmi-cpillai <lepillai@linux.ibm.com>

Signed-off-by: lekshmi-cpillai <lepillai@linux.ibm.com>
---
 testcases/kernel/fs/doio/growfiles.c | 35 +++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/testcases/kernel/fs/doio/growfiles.c b/testcases/kernel/fs/doio/growfiles.c
index 21960f82a..5a76ef4c5 100644
--- a/testcases/kernel/fs/doio/growfiles.c
+++ b/testcases/kernel/fs/doio/growfiles.c
@@ -119,6 +119,38 @@ int lkfile(int fd, int operation, int lklevel);
 int pre_alloc(int fd, long size);
 #endif /* !linux */
 
+/* Helper function to create directories recursively */
+static int mkdir_recursive(const char *path, mode_t mode)
+{
+	char tmp[PATH_MAX];
+	char *p = NULL;
+	size_t len;
+	struct stat st;
+
+	snprintf(tmp, sizeof(tmp), "%s", path);
+	len = strlen(tmp);
+	if (tmp[len - 1] == '/')
+		tmp[len - 1] = 0;
+
+	for (p = tmp + 1; *p; p++) {
+		if (*p == '/') {
+			*p = 0;
+			if (stat(tmp, &st) == -1) {
+				if (mkdir(tmp, mode) == -1 && errno != EEXIST) {
+					return -1;
+				}
+			}
+			*p = '/';
+		}
+	}
+	if (stat(tmp, &st) == -1) {
+		if (mkdir(tmp, mode) == -1 && errno != EEXIST) {
+			return -1;
+		}
+	}
+	return 0;
+}
+
 extern int datapidgen(int, char *, int, int);
 extern int datapidchk(int, char *, int, int, char **);
 
@@ -482,7 +514,7 @@ int main(int argc, char **argv)
 			unsetenv("TMPDIR");	/* force the use of auto_dir */
 #endif
 			if (stat(auto_dir, &statbuf) == -1) {
-				if (mkdir(auto_dir, 0777) == -1) {
+				if (mkdir_recursive(auto_dir, 0777) == -1) {
 					if (errno != EEXIST) {
 						fprintf(stderr,
 							"%s%s: Unable to make dir %s\n",
@@ -3058,3 +3090,4 @@ int pre_alloc(int fd, long size)
 	return 0;
 }
 #endif
+
-- 
2.39.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v2] growfiles:fix test failure due to missing directory
  2026-04-09  9:00 [LTP] [PATCH v2] growfiles:fix test failure due to missing directory lepillai
@ 2026-04-09  9:27 ` Cyril Hrubis
  2026-04-10  6:24 ` [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser lepillai
  1 sibling, 0 replies; 4+ messages in thread
From: Cyril Hrubis @ 2026-04-09  9:27 UTC (permalink / raw)
  To: lepillai; +Cc: ltp

Hi!
Again you have send the patch twice, is there something wrong with your
email setup?

> From: lekshmi-cpillai <lepillai@linux.ibm.com>
 ^
 This stil isn't a clear description why these changes are needed.

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser
  2026-04-09  9:00 [LTP] [PATCH v2] growfiles:fix test failure due to missing directory lepillai
  2026-04-09  9:27 ` Cyril Hrubis
@ 2026-04-10  6:24 ` lepillai
  2026-05-06 17:22   ` Andrea Cervesato via ltp
  1 sibling, 1 reply; 4+ messages in thread
From: lepillai @ 2026-04-10  6:24 UTC (permalink / raw)
  To: ltp

From: lekshmi-cpillai <lepillai@linux.ibm.com>

-The test attempts to creates the required directory structure recursively(which was not in current code),Sets appropriate permissions (0755)and  Verifies the directory is accessible
-Added proper error handling

Signed-off-by: lekshmi-cpillai <lepillai@linux.ibm.com>
---
 testcases/kernel/fs/doio/growfiles.c | 35 +++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/testcases/kernel/fs/doio/growfiles.c b/testcases/kernel/fs/doio/growfiles.c
index 21960f82a..5a76ef4c5 100644
--- a/testcases/kernel/fs/doio/growfiles.c
+++ b/testcases/kernel/fs/doio/growfiles.c
@@ -119,6 +119,38 @@ int lkfile(int fd, int operation, int lklevel);
 int pre_alloc(int fd, long size);
 #endif /* !linux */
 
+/* Helper function to create directories recursively */
+static int mkdir_recursive(const char *path, mode_t mode)
+{
+	char tmp[PATH_MAX];
+	char *p = NULL;
+	size_t len;
+	struct stat st;
+
+	snprintf(tmp, sizeof(tmp), "%s", path);
+	len = strlen(tmp);
+	if (tmp[len - 1] == '/')
+		tmp[len - 1] = 0;
+
+	for (p = tmp + 1; *p; p++) {
+		if (*p == '/') {
+			*p = 0;
+			if (stat(tmp, &st) == -1) {
+				if (mkdir(tmp, mode) == -1 && errno != EEXIST) {
+					return -1;
+				}
+			}
+			*p = '/';
+		}
+	}
+	if (stat(tmp, &st) == -1) {
+		if (mkdir(tmp, mode) == -1 && errno != EEXIST) {
+			return -1;
+		}
+	}
+	return 0;
+}
+
 extern int datapidgen(int, char *, int, int);
 extern int datapidchk(int, char *, int, int, char **);
 
@@ -482,7 +514,7 @@ int main(int argc, char **argv)
 			unsetenv("TMPDIR");	/* force the use of auto_dir */
 #endif
 			if (stat(auto_dir, &statbuf) == -1) {
-				if (mkdir(auto_dir, 0777) == -1) {
+				if (mkdir_recursive(auto_dir, 0777) == -1) {
 					if (errno != EEXIST) {
 						fprintf(stderr,
 							"%s%s: Unable to make dir %s\n",
@@ -3058,3 +3090,4 @@ int pre_alloc(int fd, long size)
 	return 0;
 }
 #endif
+
-- 
2.39.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser
  2026-04-10  6:24 ` [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser lepillai
@ 2026-05-06 17:22   ` Andrea Cervesato via ltp
  0 siblings, 0 replies; 4+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-06 17:22 UTC (permalink / raw)
  To: lepillai; +Cc: ltp

Hi,

our Agent review was missing in the ML.
Here it is the result, which seems ok, unless you want to
add some notes to it.

On Fri, 10 Apr 2026, lekshmi-cpillai wrote:
> growfiles:fix test failure due to missing directory /test/growfiles/reiser

Hi lekshmi,

> -The test attempts to creates the required directory structure recursively(which was not
> in current code),Sets appropria te permissions (0755)and  Verifies the directory is accessible

The body only describes what was changed, not why the directory is missing at
runtime. Please explain the root cause: under what conditions does growfiles
encounter a path whose intermediate directories do not exist, and why is
/test/growfiles/reiser specifically affected?

The body also has typos ("appropria te" → "appropriate", "attempts to creates"
→ "attempts to create") and the subject is missing a space after the colon
("growfiles:fix" → "growfiles: fix").

> +	struct stat st;
> ...
> +		if (stat(tmp, &st) == -1) {
> +			if (mkdir(tmp, mode) == -1 && errno != EEXIST) {

The stat() result (st) is never read — only its return value is used. Drop the
stat() call and call mkdir() directly; treat EEXIST as success. This simplifies
the code and avoids a TOCTOU window between stat and mkdir.

Regards,
LTP AI Reviewer

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

end of thread, other threads:[~2026-05-06 17:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09  9:00 [LTP] [PATCH v2] growfiles:fix test failure due to missing directory lepillai
2026-04-09  9:27 ` Cyril Hrubis
2026-04-10  6:24 ` [LTP] [PATCH v3] growfiles:fix test failure due to missing directory /test/growfiles/reiser lepillai
2026-05-06 17:22   ` Andrea Cervesato via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox