diff options
author | Li Zefan <lizf@cn.fujitsu.com> | 2011-12-15 02:12:02 +0100 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-12-15 16:50:37 +0100 |
commit | 306424cc880a0fbbdc99eee1f43d056a301a180f (patch) | |
tree | 7c6b3b851fcd325c65724f3a7875311407998a6d /fs/btrfs/ioctl.c | |
parent | btrfs: keep orphans for subvolume deletion (diff) | |
download | linux-306424cc880a0fbbdc99eee1f43d056a301a180f.tar.xz linux-306424cc880a0fbbdc99eee1f43d056a301a180f.zip |
Btrfs: fix ctime update of on-disk inode
To reproduce the bug:
# touch /mnt/tmp
# stat /mnt/tmp | grep Change
Change: 2011-12-09 09:32:23.412105981 +0800
# chattr +i /mnt/tmp
# stat /mnt/tmp | grep Change
Change: 2011-12-09 09:32:43.198105295 +0800
# umount /mnt
# mount /dev/loop1 /mnt
# stat /mnt/tmp | grep Change
Change: 2011-12-09 09:32:23.412105981 +0800
We should update ctime of in-memory inode before calling
btrfs_update_inode().
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to '')
-rw-r--r-- | fs/btrfs/ioctl.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 72d461656f60..40eaa9fdf07c 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -252,11 +252,11 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg) trans = btrfs_join_transaction(root); BUG_ON(IS_ERR(trans)); + btrfs_update_iflags(inode); + inode->i_ctime = CURRENT_TIME; ret = btrfs_update_inode(trans, root, inode); BUG_ON(ret); - btrfs_update_iflags(inode); - inode->i_ctime = CURRENT_TIME; btrfs_end_transaction(trans, root); mnt_drop_write(file->f_path.mnt); |