aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2022-08-04 15:18:15 -0400
committerTheodore Ts'o <tytso@mit.edu>2022-08-04 15:18:15 -0400
commit0288b1fd6909e92e3668dde8f1f6401fdabd1494 (patch)
tree612357dd1eb2125a4a05dd18b9016d65c06dc4e4
parent6772d4969e9c90460945bbf02b87c227b93a9832 (diff)
downloade2fsprogs-0288b1fd6909e92e3668dde8f1f6401fdabd1494.tar.gz
resize2fs: fix to respect the environment variable E2FSPROGS_FAKE_TIME
When performing an off-line resize, if an inode's block map needs to be updated, resize2fs will update the inode's ctime. In addition, if inode numbers need to be renumbered due to the file system shrinking forcing the inode table to be shrunk, any directories which need to be modified will have their ctime and mtime updated. If the E2FSPROGS_FAkE_TIME environment variable is set, when the file system is opened, fs->now will be set to this value, and resize2fs needs to use it instead of calling time(0) to get their current time. Addresses-Google-Bug: 230874381 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--resize/resize2fs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
index 916b1f4b4..cfc81fc78 100644
--- a/resize/resize2fs.c
+++ b/resize/resize2fs.c
@@ -2266,7 +2266,8 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
if (inode->i_flags & EXT4_EA_INODE_FL)
update_ea_inode_refs = 1;
else
- inode->i_ctime = time(0);
+ inode->i_ctime = rfs->old_fs->now ?
+ rfs->old_fs->now : time(0);
retval = ext2fs_write_inode_full(rfs->old_fs, new_inode,
inode, inode_size);
@@ -2419,7 +2420,8 @@ static int check_and_change_inodes(ext2_ino_t dir,
/* Update the directory mtime and ctime */
retval = ext2fs_read_inode(is->rfs->old_fs, dir, &inode);
if (retval == 0) {
- inode.i_mtime = inode.i_ctime = time(0);
+ inode.i_mtime = inode.i_ctime = is->rfs->old_fs->now ?
+ is->rfs->old_fs->now : time(0);
is->err = ext2fs_write_inode(is->rfs->old_fs, dir, &inode);
if (is->err)
return ret | DIRENT_ABORT;