f2fs: trigger release_dirty_inode in f2fs_put_super
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 19 Aug 2014 16:48:22 +0000 (09:48 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 21 Aug 2014 16:20:29 +0000 (09:20 -0700)
The generic_shutdown_super calls sync_filesystem, evict_inode, and then
f2fs_put_super. In f2fs_evict_inode, we remain some dirty inode information
so we should release them at f2fs_put_super.

Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/checkpoint.c
fs/f2fs/f2fs.h
fs/f2fs/super.c

index 7e1c13bfb99f7aab634f2404fe9368d80d8fc3dd..f14af912a1465e5714b64d0302bda71543518d86 100644 (file)
@@ -348,7 +348,7 @@ bool exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
        return e ? true : false;
 }
 
-static void release_dirty_inode(struct f2fs_sb_info *sbi)
+void release_dirty_inode(struct f2fs_sb_info *sbi)
 {
        struct ino_entry *e, *tmp;
        int i;
index cc5ead1bd37858418f27904f2f25e4e24576a901..cc89a7f490a6028033e0e08eb251b45e941eea94 100644 (file)
@@ -1262,6 +1262,7 @@ int ra_meta_pages(struct f2fs_sb_info *, int, int, int);
 long sync_meta_pages(struct f2fs_sb_info *, enum page_type, long);
 void add_dirty_inode(struct f2fs_sb_info *, nid_t, int type);
 void remove_dirty_inode(struct f2fs_sb_info *, nid_t, int type);
+void release_dirty_inode(struct f2fs_sb_info *);
 bool exist_written_data(struct f2fs_sb_info *, nid_t, int);
 int acquire_orphan_inode(struct f2fs_sb_info *);
 void release_orphan_inode(struct f2fs_sb_info *);
index 60e3554a6eb40200529b503905d539b26062bd05..7a5477915d993f4d48b3dbd30e0e9717bd6a97da 100644 (file)
@@ -435,6 +435,9 @@ static void f2fs_put_super(struct super_block *sb)
        if (sbi->s_dirty)
                write_checkpoint(sbi, true);
 
+       /* normally superblock is clean, so we need to release this */
+       release_dirty_inode(sbi);
+
        iput(sbi->node_inode);
        iput(sbi->meta_inode);