f2fs: revert segment allocation for direct IO
authorJaegeuk Kim <jaegeuk@kernel.org>
Fri, 11 Nov 2016 20:31:40 +0000 (12:31 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 25 Nov 2016 18:15:02 +0000 (10:15 -0800)
Now we don't need to be too much careful about storage alignment for dio, since
its speed becomes quite fast and we'd better avoid any misalignment first.

Revert: 38aa0889b250 (f2fs: align direct_io'ed data to section)

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

index 47ded0c34df1e9b97fd6d6a4e8080150db35b537..ca53da5686336517eb70a1c4d66592bfd499d2f3 100644 (file)
@@ -588,7 +588,6 @@ static int __allocate_data_block(struct dnode_of_data *dn)
        struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
        struct f2fs_summary sum;
        struct node_info ni;
-       int seg = CURSEG_WARM_DATA;
        pgoff_t fofs;
        blkcnt_t count = 1;
 
@@ -606,11 +605,8 @@ alloc:
        get_node_info(sbi, dn->nid, &ni);
        set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
 
-       if (dn->ofs_in_node == 0 && dn->inode_page == dn->node_page)
-               seg = CURSEG_DIRECT_IO;
-
        allocate_data_block(sbi, NULL, dn->data_blkaddr, &dn->data_blkaddr,
-                                                               &sum, seg);
+                                               &sum, CURSEG_WARM_DATA);
        set_data_blkaddr(dn);
 
        /* update i_size */
index a6e2ede94b087476bc0a98990e53cb629d9ea1f7..0496e82834d0293d0def3ab068535605340bc23e 100644 (file)
@@ -591,7 +591,6 @@ enum {
        CURSEG_WARM_NODE,       /* direct node blocks of normal files */
        CURSEG_COLD_NODE,       /* indirect node blocks */
        NO_CHECK_TYPE,
-       CURSEG_DIRECT_IO,       /* to use for the direct IO path */
 };
 
 struct flush_cmd {
index 7fb7dd3d1e7422ee3e0dd6455521561d46202c76..4cc589a493e3a298d2c52be8fc03f5819a6e7283 100644 (file)
@@ -1346,25 +1346,21 @@ static void allocate_segment_by_default(struct f2fs_sb_info *sbi,
        stat_inc_seg_type(sbi, curseg);
 }
 
-static void __allocate_new_segments(struct f2fs_sb_info *sbi, int type)
-{
-       struct curseg_info *curseg = CURSEG_I(sbi, type);
-       unsigned int old_segno;
-
-       old_segno = curseg->segno;
-       SIT_I(sbi)->s_ops->allocate_segment(sbi, type, true);
-       locate_dirty_segment(sbi, old_segno);
-}
-
 void allocate_new_segments(struct f2fs_sb_info *sbi)
 {
+       struct curseg_info *curseg;
+       unsigned int old_segno;
        int i;
 
        if (test_opt(sbi, LFS))
                return;
 
-       for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
-               __allocate_new_segments(sbi, i);
+       for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
+               curseg = CURSEG_I(sbi, i);
+               old_segno = curseg->segno;
+               SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
+               locate_dirty_segment(sbi, old_segno);
+       }
 }
 
 static const struct segment_allocation default_salloc_ops = {
@@ -1498,25 +1494,11 @@ void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
                struct f2fs_summary *sum, int type)
 {
        struct sit_info *sit_i = SIT_I(sbi);
-       struct curseg_info *curseg;
-       bool direct_io = (type == CURSEG_DIRECT_IO);
-
-       if (direct_io) {
-               if (sbi->active_logs <= 4)
-                       type = CURSEG_HOT_DATA;
-               else
-                       type = CURSEG_WARM_DATA;
-       }
-       curseg = CURSEG_I(sbi, type);
+       struct curseg_info *curseg = CURSEG_I(sbi, type);
 
        mutex_lock(&curseg->curseg_mutex);
        mutex_lock(&sit_i->sentry_lock);
 
-       /* direct_io'ed data is aligned to the segment for better performance */
-       if (direct_io && curseg->next_blkoff &&
-                               !has_not_enough_free_secs(sbi, 0, 0))
-               __allocate_new_segments(sbi, type);
-
        *new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
 
        /*