f2fs: clear FI_DATA_EXIST flag in truncate_inline_inode
authorKinglong Mee <kinglongmee@gmail.com>
Fri, 10 Mar 2017 12:43:20 +0000 (20:43 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 22 Mar 2017 02:34:31 +0000 (22:34 -0400)
Clear FI_DATA_EXIST flag atomically in truncate_inline_inode, and
the return value from truncate_inline_inode isn't used, remove it.

Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h
fs/f2fs/file.c
fs/f2fs/inline.c

index 7c9685c4c904f042f3c5cd4a7de18ae20cc4881d..148c8b1d506c05bdf434f449a2e129a521d7a31f 100644 (file)
@@ -1873,12 +1873,6 @@ static inline int f2fs_has_inline_data(struct inode *inode)
        return is_inode_flag_set(inode, FI_INLINE_DATA);
 }
 
-static inline void f2fs_clear_inline_inode(struct inode *inode)
-{
-       clear_inode_flag(inode, FI_INLINE_DATA);
-       clear_inode_flag(inode, FI_DATA_EXIST);
-}
-
 static inline int f2fs_exist_data(struct inode *inode)
 {
        return is_inode_flag_set(inode, FI_DATA_EXIST);
@@ -2508,7 +2502,7 @@ extern struct kmem_cache *inode_entry_slab;
 bool f2fs_may_inline_data(struct inode *inode);
 bool f2fs_may_inline_dentry(struct inode *inode);
 void read_inline_data(struct page *page, struct page *ipage);
-bool truncate_inline_inode(struct page *ipage, u64 from);
+void truncate_inline_inode(struct inode *inode, struct page *ipage, u64 from);
 int f2fs_read_inline_data(struct inode *inode, struct page *page);
 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page);
 int f2fs_convert_inline_inode(struct inode *inode);
index 22c73b205cd72b89e9c943977e203db33a5d6117..77ebd6b9323c4823673759d6c11b3800b0be538d 100644 (file)
@@ -569,9 +569,7 @@ int truncate_blocks(struct inode *inode, u64 from, bool lock)
        }
 
        if (f2fs_has_inline_data(inode)) {
-               truncate_inline_inode(ipage, from);
-               if (from == 0)
-                       clear_inode_flag(inode, FI_DATA_EXIST);
+               truncate_inline_inode(inode, ipage, from);
                f2fs_put_page(ipage, 1);
                truncate_page = true;
                goto out;
index e32a9e5279686035829dba5d45396e22cf10438f..93c15337bcd9d7ae1361410d310f9280ef93c8f7 100644 (file)
@@ -63,19 +63,21 @@ void read_inline_data(struct page *page, struct page *ipage)
                SetPageUptodate(page);
 }
 
-bool truncate_inline_inode(struct page *ipage, u64 from)
+void truncate_inline_inode(struct inode *inode, struct page *ipage, u64 from)
 {
        void *addr;
 
        if (from >= MAX_INLINE_DATA)
-               return false;
+               return;
 
        addr = inline_data_addr(ipage);
 
        f2fs_wait_on_page_writeback(ipage, NODE, true);
        memset(addr + from, 0, MAX_INLINE_DATA - from);
        set_page_dirty(ipage);
-       return true;
+
+       if (from == 0)
+               clear_inode_flag(inode, FI_DATA_EXIST);
 }
 
 int f2fs_read_inline_data(struct inode *inode, struct page *page)
@@ -146,11 +148,11 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
        set_inode_flag(dn->inode, FI_APPEND_WRITE);
 
        /* clear inline data and flag after data writeback */
-       truncate_inline_inode(dn->inode_page, 0);
+       truncate_inline_inode(dn->inode, dn->inode_page, 0);
        clear_inline_node(dn->inode_page);
 clear_out:
        stat_dec_inline_inode(dn->inode);
-       f2fs_clear_inline_inode(dn->inode);
+       clear_inode_flag(dn->inode, FI_INLINE_DATA);
        f2fs_put_dnode(dn);
        return 0;
 }
@@ -267,9 +269,8 @@ process_inline:
        if (f2fs_has_inline_data(inode)) {
                ipage = get_node_page(sbi, inode->i_ino);
                f2fs_bug_on(sbi, IS_ERR(ipage));
-               if (!truncate_inline_inode(ipage, 0))
-                       return false;
-               f2fs_clear_inline_inode(inode);
+               truncate_inline_inode(inode, ipage, 0);
+               clear_inode_flag(inode, FI_INLINE_DATA);
                f2fs_put_page(ipage, 1);
        } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
                if (truncate_blocks(inode, 0, false))
@@ -380,7 +381,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
        set_page_dirty(page);
 
        /* clear inline dir and flag after data writeback */
-       truncate_inline_inode(ipage, 0);
+       truncate_inline_inode(dir, ipage, 0);
 
        stat_dec_inline_dir(dir);
        clear_inode_flag(dir, FI_INLINE_DENTRY);
@@ -455,7 +456,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
        }
 
        memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA);
-       truncate_inline_inode(ipage, 0);
+       truncate_inline_inode(dir, ipage, 0);
 
        unlock_page(ipage);