f2fs: clear FI_HOT_DATA correctly
authorChao Yu <yuchao0@huawei.com>
Fri, 18 Aug 2017 15:37:36 +0000 (23:37 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 29 Aug 2017 17:02:56 +0000 (10:02 -0700)
This patch fixes to clear FI_HOT_DATA correctly in below path:
- error handling in f2fs_ioc_start_atomic_write
- after commit atomic write in f2fs_ioc_commit_atomic_write
- after drop atomic write in drop_inmem_pages

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c
fs/f2fs/segment.c

index 3eebd49c3348ebf707f071f5d754870c29a125dc..8f0d32a57b52a78f5299ff8d506394d14721e0e0 100644 (file)
@@ -1640,6 +1640,7 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
        ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
        if (ret) {
                clear_inode_flag(inode, FI_ATOMIC_FILE);
+               clear_inode_flag(inode, FI_HOT_DATA);
                goto out;
        }
 
@@ -1678,6 +1679,7 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)
                ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
                if (!ret) {
                        clear_inode_flag(inode, FI_ATOMIC_FILE);
+                       clear_inode_flag(inode, FI_HOT_DATA);
                        stat_dec_atomic_write(inode);
                }
        } else {
index be1c49b9402bbdd4ea6de62176e45ef80ea804b6..8306beace7cb20eb0c0546ae1c2cd2f8bfd252cd 100644 (file)
@@ -255,6 +255,7 @@ void drop_inmem_pages(struct inode *inode)
        mutex_unlock(&fi->inmem_lock);
 
        clear_inode_flag(inode, FI_ATOMIC_FILE);
+       clear_inode_flag(inode, FI_HOT_DATA);
        stat_dec_atomic_write(inode);
 }