diff options
-rw-r--r-- | fs/f2fs/f2fs.h | 11 | ||||
-rw-r--r-- | fs/f2fs/inode.c | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 7102d3965fea..1df7f10476d6 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h | |||
@@ -664,6 +664,7 @@ struct f2fs_inode_info { | |||
664 | kprojid_t i_projid; /* id for project quota */ | 664 | kprojid_t i_projid; /* id for project quota */ |
665 | int i_inline_xattr_size; /* inline xattr size */ | 665 | int i_inline_xattr_size; /* inline xattr size */ |
666 | struct timespec i_crtime; /* inode creation time */ | 666 | struct timespec i_crtime; /* inode creation time */ |
667 | struct timespec i_disk_time[4]; /* inode disk times */ | ||
667 | }; | 668 | }; |
668 | 669 | ||
669 | static inline void get_extent_info(struct extent_info *ext, | 670 | static inline void get_extent_info(struct extent_info *ext, |
@@ -2474,6 +2475,16 @@ static inline bool f2fs_skip_inode_update(struct inode *inode, int dsync) | |||
2474 | i_size_read(inode) & ~PAGE_MASK) | 2475 | i_size_read(inode) & ~PAGE_MASK) |
2475 | return false; | 2476 | return false; |
2476 | 2477 | ||
2478 | if (!timespec_equal(F2FS_I(inode)->i_disk_time, &inode->i_atime)) | ||
2479 | return false; | ||
2480 | if (!timespec_equal(F2FS_I(inode)->i_disk_time + 1, &inode->i_ctime)) | ||
2481 | return false; | ||
2482 | if (!timespec_equal(F2FS_I(inode)->i_disk_time + 2, &inode->i_mtime)) | ||
2483 | return false; | ||
2484 | if (!timespec_equal(F2FS_I(inode)->i_disk_time + 3, | ||
2485 | &F2FS_I(inode)->i_crtime)) | ||
2486 | return false; | ||
2487 | |||
2477 | down_read(&F2FS_I(inode)->i_sem); | 2488 | down_read(&F2FS_I(inode)->i_sem); |
2478 | ret = F2FS_I(inode)->last_disk_size == i_size_read(inode); | 2489 | ret = F2FS_I(inode)->last_disk_size == i_size_read(inode); |
2479 | up_read(&F2FS_I(inode)->i_sem); | 2490 | up_read(&F2FS_I(inode)->i_sem); |
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 401f09ccce7e..e0d9e8f27ed2 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c | |||
@@ -284,6 +284,10 @@ static int do_read_inode(struct inode *inode) | |||
284 | fi->i_crtime.tv_nsec = le32_to_cpu(ri->i_crtime_nsec); | 284 | fi->i_crtime.tv_nsec = le32_to_cpu(ri->i_crtime_nsec); |
285 | } | 285 | } |
286 | 286 | ||
287 | F2FS_I(inode)->i_disk_time[0] = inode->i_atime; | ||
288 | F2FS_I(inode)->i_disk_time[1] = inode->i_ctime; | ||
289 | F2FS_I(inode)->i_disk_time[2] = inode->i_mtime; | ||
290 | F2FS_I(inode)->i_disk_time[3] = F2FS_I(inode)->i_crtime; | ||
287 | f2fs_put_page(node_page, 1); | 291 | f2fs_put_page(node_page, 1); |
288 | 292 | ||
289 | stat_inc_inline_xattr(inode); | 293 | stat_inc_inline_xattr(inode); |
@@ -444,6 +448,10 @@ void update_inode(struct inode *inode, struct page *node_page) | |||
444 | if (inode->i_nlink == 0) | 448 | if (inode->i_nlink == 0) |
445 | clear_inline_node(node_page); | 449 | clear_inline_node(node_page); |
446 | 450 | ||
451 | F2FS_I(inode)->i_disk_time[0] = inode->i_atime; | ||
452 | F2FS_I(inode)->i_disk_time[1] = inode->i_ctime; | ||
453 | F2FS_I(inode)->i_disk_time[2] = inode->i_mtime; | ||
454 | F2FS_I(inode)->i_disk_time[3] = F2FS_I(inode)->i_crtime; | ||
447 | } | 455 | } |
448 | 456 | ||
449 | void update_inode_page(struct inode *inode) | 457 | void update_inode_page(struct inode *inode) |