[Ocfs2-tools-devel] [PATCH] fsck.ocfs2: dynamically allocate ocfs2_dir_entry for long filenames

Goldwyn Rodrigues rgoldwyn at suse.de
Mon Sep 30 06:57:33 PDT 2013


References: bnc#834191

Signed-off-by: Goldwyn Rodrigues <rgoldwyn at suse.com>
---
 fsck.ocfs2/pass1b.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/fsck.ocfs2/pass1b.c b/fsck.ocfs2/pass1b.c
index f89b401..8e69371 100644
--- a/fsck.ocfs2/pass1b.c
+++ b/fsck.ocfs2/pass1b.c
@@ -961,11 +961,19 @@ static int walk_iterate(struct ocfs2_dir_entry *de, uint64_t blocknr,
 static void walk_cwd(struct dir_scan_context *scan)
 {
 	errcode_t ret;
-	struct ocfs2_dir_entry de;
+	struct ocfs2_dir_entry *de;
+	int len = sizeof(struct ocfs2_dir_entry);
 
-	memcpy(de.name, scan->ds_cwd, scan->ds_cwdlen);
-	de.name_len = scan->ds_cwdlen;
-	name_inode(scan, &de);
+	if (scan->ds_cwdlen > OCFS2_MAX_FILENAME_LEN)
+		len = sizeof(struct ocfs2_dir_entry) + scan->ds_cwdlen
+			- OCFS2_MAX_FILENAME_LEN;
+
+	ret = ocfs2_malloc(len, &de);
+
+	memcpy(de->name, scan->ds_cwd, scan->ds_cwdlen);
+	de->name_len = scan->ds_cwdlen;
+	name_inode(scan, de);
+	free(de);
 
 	ret = ocfs2_dir_iterate(scan->ds_ost->ost_fs, scan->ds_ino,
 				OCFS2_DIRENT_FLAG_EXCLUDE_DOTS, NULL,
-- 
1.8.1.4


-- 
Goldwyn



More information about the Ocfs2-tools-devel mailing list