@@ -3535,6 +3535,11 @@ static void btrfs_read_locked_inode(struct inode *inode)
3535
3535
inode -> i_ctime .tv_sec = btrfs_timespec_sec (leaf , & inode_item -> ctime );
3536
3536
inode -> i_ctime .tv_nsec = btrfs_timespec_nsec (leaf , & inode_item -> ctime );
3537
3537
3538
+ BTRFS_I (inode )-> i_otime .tv_sec =
3539
+ btrfs_timespec_sec (leaf , & inode_item -> otime );
3540
+ BTRFS_I (inode )-> i_otime .tv_nsec =
3541
+ btrfs_timespec_nsec (leaf , & inode_item -> otime );
3542
+
3538
3543
inode_set_bytes (inode , btrfs_inode_nbytes (leaf , inode_item ));
3539
3544
BTRFS_I (inode )-> generation = btrfs_inode_generation (leaf , inode_item );
3540
3545
BTRFS_I (inode )-> last_trans = btrfs_inode_transid (leaf , inode_item );
@@ -3669,6 +3674,11 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
3669
3674
btrfs_set_token_timespec_nsec (leaf , & item -> ctime ,
3670
3675
inode -> i_ctime .tv_nsec , & token );
3671
3676
3677
+ btrfs_set_token_timespec_sec (leaf , & item -> otime ,
3678
+ BTRFS_I (inode )-> i_otime .tv_sec , & token );
3679
+ btrfs_set_token_timespec_nsec (leaf , & item -> otime ,
3680
+ BTRFS_I (inode )-> i_otime .tv_nsec , & token );
3681
+
3672
3682
btrfs_set_token_inode_nbytes (leaf , item , inode_get_bytes (inode ),
3673
3683
& token );
3674
3684
btrfs_set_token_inode_generation (leaf , item , BTRFS_I (inode )-> generation ,
@@ -5260,7 +5270,10 @@ static struct inode *new_simple_dir(struct super_block *s,
5260
5270
inode -> i_op = & btrfs_dir_ro_inode_operations ;
5261
5271
inode -> i_fop = & simple_dir_operations ;
5262
5272
inode -> i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO ;
5263
- inode -> i_mtime = inode -> i_atime = inode -> i_ctime = CURRENT_TIME ;
5273
+ inode -> i_mtime = CURRENT_TIME ;
5274
+ inode -> i_atime = inode -> i_mtime ;
5275
+ inode -> i_ctime = inode -> i_mtime ;
5276
+ BTRFS_I (inode )-> i_otime = inode -> i_mtime ;
5264
5277
5265
5278
return inode ;
5266
5279
}
@@ -5828,7 +5841,12 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
5828
5841
5829
5842
inode_init_owner (inode , dir , mode );
5830
5843
inode_set_bytes (inode , 0 );
5831
- inode -> i_mtime = inode -> i_atime = inode -> i_ctime = CURRENT_TIME ;
5844
+
5845
+ inode -> i_mtime = CURRENT_TIME ;
5846
+ inode -> i_atime = inode -> i_mtime ;
5847
+ inode -> i_ctime = inode -> i_mtime ;
5848
+ BTRFS_I (inode )-> i_otime = inode -> i_mtime ;
5849
+
5832
5850
inode_item = btrfs_item_ptr (path -> nodes [0 ], path -> slots [0 ],
5833
5851
struct btrfs_inode_item );
5834
5852
memset_extent_buffer (path -> nodes [0 ], 0 , (unsigned long )inode_item ,
@@ -8577,6 +8595,9 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
8577
8595
8578
8596
ei -> delayed_node = NULL ;
8579
8597
8598
+ ei -> i_otime .tv_sec = 0 ;
8599
+ ei -> i_otime .tv_nsec = 0 ;
8600
+
8580
8601
inode = & ei -> vfs_inode ;
8581
8602
extent_map_tree_init (& ei -> extent_tree );
8582
8603
extent_io_tree_init (& ei -> io_tree , & inode -> i_data );
0 commit comments