From 1afb468b9a80031b39eab37272709f45727fb221 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 10 Jun 2011 13:58:18 -0400 Subject: [PATCH] libext2fs: create extent-based directories if the extents feature is enabled This allows mke2fs to create the root and lost+found directories using extents. Signed-off-by: "Theodore Ts'o" --- lib/ext2fs/mkdir.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c index 86c65da..9b6b799 100644 --- a/lib/ext2fs/mkdir.c +++ b/lib/ext2fs/mkdir.c @@ -33,6 +33,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, const char *name) { + ext2_extent_handle_t handle; errcode_t retval; struct ext2_inode parent_inode, inode; ext2_ino_t ino = inum; @@ -83,8 +84,10 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, inode.i_mode = LINUX_S_IFDIR | (0777 & ~fs->umask); inode.i_uid = inode.i_gid = 0; ext2fs_iblk_set(fs, &inode, 1); - /* FIXME-64 */ - inode.i_block[0] = blk; + if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) + inode.i_flags |= EXT4_EXTENTS_FL; + else + inode.i_block[0] = blk; inode.i_links_count = 2; inode.i_size = fs->blocksize; @@ -98,6 +101,16 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, if (retval) goto cleanup; + if (fs->super->s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS) { + retval = ext2fs_extent_open2(fs, ino, &inode, &handle); + if (retval) + goto cleanup; + retval = ext2fs_extent_set_bmap(handle, 0, blk, 0); + ext2fs_extent_free(handle); + if (retval) + goto cleanup; + } + /* * Link the directory into the filesystem hierarchy */ -- 1.8.3.1