Now, we set flags of a newly created inode using set_cold_files() in
advance of creating a new node page. By this, some inodes whose node
page is not created yet can be linked into the global dirty list.

If the checkpoint is executed at this moment, the inode will be written
back by writeback_single_inode() and finally update_inode_page() will
fail to detach the inode from the global dirty list because the inode
doesn't have a node page.

The problem is that the inode's state in VFS layer will become clean
after execution of writeback_single_inode() and it's still linked in
the global dirty list of f2fs and this will cause a kernel panic.

Signed-off-by: Daeho Jeong <[email protected]>
Signed-off-by: Youngjin Gil <[email protected]>
Tested-by: Hobin Woo <[email protected]>
---
 fs/f2fs/namei.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 28bdf88..249dbef 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -201,9 +201,6 @@ static int f2fs_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
        if (IS_ERR(inode))
                return PTR_ERR(inode);
 
-       if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
-               set_cold_files(sbi, inode, dentry->d_name.name);
-
        inode->i_op = &f2fs_file_inode_operations;
        inode->i_fop = &f2fs_file_operations;
        inode->i_mapping->a_ops = &f2fs_dblock_aops;
@@ -213,6 +210,8 @@ static int f2fs_create(struct inode *dir, struct dentry 
*dentry, umode_t mode,
        err = f2fs_add_link(dentry, inode);
        if (err)
                goto out;
+       if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
+               set_cold_files(sbi, inode, dentry->d_name.name);
        f2fs_unlock_op(sbi);
 
        alloc_nid_done(sbi, ino);
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to