diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/debugfs-extent-header.patch | 47 | ||||
-rw-r--r-- | meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb | 2 |
2 files changed, 49 insertions, 0 deletions
diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/debugfs-extent-header.patch b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/debugfs-extent-header.patch new file mode 100644 index 0000000000..ae44730192 --- /dev/null +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.8/debugfs-extent-header.patch @@ -0,0 +1,47 @@ +debugfs: properly set up extent header in do_write + +do_write doesn't fully set up the first extent header on a new +inode, so if we write a 0-length file, and don't write any data +to the new file, we end up creating something that looks corrupt +to kernelspace: + +EXT4-fs error (device loop0): ext4_ext_check_inode:464: inode #12: comm ls: bad header/extent: invalid magic - magic 0, entries 0, max 0(0), depth 0(0) + +Do something similar to ext4_ext_tree_init() here, and +fill out the first extent header upon creation to avoid this. + +Upstream-Status: Backport + +Reported-by: Robert Yang <liezhi.yang@windriver.com> +Signed-off-by: Eric Sandeen <sandeen@redhat.com> +--- + debugfs/debugfs.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c +--- a/debugfs/debugfs.c ++++ b/debugfs/debugfs.c +@@ -1726,8 +1726,19 @@ void do_write(int argc, char *argv[]) + inode.i_links_count = 1; + inode.i_size = statbuf.st_size; + if (current_fs->super->s_feature_incompat & +- EXT3_FEATURE_INCOMPAT_EXTENTS) ++ EXT3_FEATURE_INCOMPAT_EXTENTS) { ++ int i; ++ struct ext3_extent_header *eh; ++ ++ eh = (struct ext3_extent_header *) &inode.i_block[0]; ++ eh->eh_depth = 0; ++ eh->eh_entries = 0; ++ eh->eh_magic = EXT3_EXT_MAGIC; ++ i = (sizeof(inode.i_block) - sizeof(*eh)) / ++ sizeof(struct ext3_extent); ++ eh->eh_max = ext2fs_cpu_to_le16(i); + inode.i_flags |= EXT4_EXTENTS_FL; ++ } + if (debugfs_write_new_inode(newfile, &inode, argv[0])) { + close(fd); + return; +-- +1.8.1.2 + diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb index 2681f98f00..b54c6a7685 100644 --- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.8.bb @@ -6,6 +6,8 @@ SRC_URI += "file://acinclude.m4 \ file://debugfs-too-short.patch \ file://debugfs-sparse-copy.patch \ file://fix-icache.patch \ + file://debugfs-extent-header.patch \ + file://populate-extfs.sh \ " SRC_URI[md5sum] = "8ef664b6eb698aa6b733df59b17b9ed4" |