From: Theodore Ts'o Date: Thu, 14 Aug 2008 18:30:05 +0000 (-0400) Subject: libext2fs: Initialize unset inode timestamps when writing a new inode X-Git-Tag: v1.41.1~84 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3bcc6276a0c229791ca4a4fee4cf6d8d48ebe824;p=thirdparty%2Fe2fsprogs.git libext2fs: Initialize unset inode timestamps when writing a new inode As Li Zefan reported, the creation timestamp was not getting set on the lost+found inode. This patch makes sure all of the timestamps are appropriately set. Signed-off-by: "Theodore Ts'o" --- diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c index ba15dda9e..b45de8726 100644 --- a/lib/ext2fs/inode.c +++ b/lib/ext2fs/inode.c @@ -752,6 +752,14 @@ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, int size = EXT2_INODE_SIZE(fs->super); struct ext2_inode_large *large_inode; errcode_t retval; + __u32 t = fs->now ? fs->now : time(NULL); + + if (!inode->i_ctime) + inode->i_ctime = t; + if (!inode->i_mtime) + inode->i_mtime = t; + if (!inode->i_atime) + inode->i_atime = t; if (size == sizeof(struct ext2_inode)) return ext2fs_write_inode_full(fs, ino, inode, @@ -767,6 +775,8 @@ errcode_t ext2fs_write_new_inode(ext2_filsys fs, ext2_ino_t ino, large_inode = (struct ext2_inode_large *) buf; large_inode->i_extra_isize = sizeof(struct ext2_inode_large) - EXT2_GOOD_OLD_INODE_SIZE; + if (!large_inode->i_crtime) + large_inode->i_crtime = t; retval = ext2fs_write_inode_full(fs, ino, buf, size); free(buf); diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c index 34242df11..e769ed508 100644 --- a/lib/ext2fs/mkdir.c +++ b/lib/ext2fs/mkdir.c @@ -85,7 +85,6 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, ext2fs_iblk_set(fs, &inode, 1); inode.i_block[0] = blk; inode.i_links_count = 2; - inode.i_ctime = inode.i_atime = inode.i_mtime = fs->now ? fs->now : time(NULL); inode.i_size = fs->blocksize; /*