fix 0 file creation time
PATCH 1/1 fix 0 file creation time
$ lsattr -c 1970-01-01 08:00:00.0 +0800 --------------- ./lost+found
It turns out that the crtime of files created by e2fsprogs is 0.
Signed-off-by Li Zefan <[email protected]>
--- lib/ext2fs/inode.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
lib/ext2fs/inode.c +1 -0
@@ -767,6 +767,7 @@ 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 ; + large_inode->i_crtime = large_inode->i_atime; retval =ext2fs_write_inode_full (fs, ino, buf, size);free (buf);
Signature · 1 line
1.5.4.rc3
Review
Quoted 7 lines · Li Zefan
$ lsattr -c 1970-01-01 08:00:00.0 +0800 --------------- ./lost+foundIt turns out that the crtime of files created by e2fsprogs is 0.
(quoted diff) +1
-0+ large_inode->i_crtime = large_inode->i_atime;
Your patch assumes that i_atime is appropriately set, which is not necessarily the case. Enclosed the patch which I have committed into e2fsprogs.
- Ted
commit 3bcc6276a0c229791ca4a4fee4cf6d8d48ebe824
Author: Theodore Ts'o <[email protected]> Date: Thu Aug 14 14:30:05 2008 -0400
libext2fs: Initialize unset inode timestamps when writing a new inode
As Li Zefan <[email protected]> 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" <[email protected]>
lib/ext2fs/inode.c +10 -0
@@ -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);
lib/ext2fs/mkdir.c +0 -1
@@ -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;/*