f2fs: write dirty meta pages collectively
authorJaegeuk Kim <jaegeuk.kim@samsung.com>
Tue, 17 Dec 2013 08:28:41 +0000 (17:28 +0900)
committerJaegeuk Kim <jaegeuk.kim@samsung.com>
Mon, 23 Dec 2013 01:18:07 +0000 (10:18 +0900)
This patch enhances writing dirty meta pages collectively in background.
During the file data writes, it'd better avoid to write small dirty meta pages
frequently.
So let's give a chance to collect a number of dirty meta pages for a while.

Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
fs/f2fs/checkpoint.c

index f8c0749..2fc3b6b 100644 (file)
@@ -107,18 +107,19 @@ static int f2fs_write_meta_pages(struct address_space *mapping,
                                struct writeback_control *wbc)
 {
        struct f2fs_sb_info *sbi = F2FS_SB(mapping->host->i_sb);
-       struct block_device *bdev = sbi->sb->s_bdev;
+       int nrpages = MAX_BIO_BLOCKS(max_hw_blocks(sbi));
        long written;
 
        if (wbc->for_kupdate)
                return 0;
 
-       if (get_pages(sbi, F2FS_DIRTY_META) == 0)
+       /* collect a number of dirty meta pages and write together */
+       if (get_pages(sbi, F2FS_DIRTY_META) < nrpages)
                return 0;
 
        /* if mounting is failed, skip writing node pages */
        mutex_lock(&sbi->cp_mutex);
-       written = sync_meta_pages(sbi, META, bio_get_nr_vecs(bdev));
+       written = sync_meta_pages(sbi, META, nrpages);
        mutex_unlock(&sbi->cp_mutex);
        wbc->nr_to_write -= written;
        return 0;