OSDN Git Service

libext2fs: Initialize unset inode timestamps when writing a new inode
authorTheodore Ts'o <tytso@mit.edu>
Thu, 14 Aug 2008 18:30:05 +0000 (14:30 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 14 Aug 2008 18:44:15 +0000 (14:44 -0400)
As Li Zefan <lizf@cn.fujitsu.com> 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" <tytso@mit.edu>
lib/ext2fs/inode.c
lib/ext2fs/mkdir.c

index ba15dda..b45de87 100644 (file)
@@ -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);
index 34242df..e769ed5 100644 (file)
@@ -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;
 
        /*