]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/f2fs/segment.c
Merge tag 'tag-chrome-platform-for-v5.6' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / fs / f2fs / segment.c
index 3ec912bd55040412426eef9b8a1ad7deb82fcae6..cf0eb002cfd40ced0bd135ab9593f9d30df68af0 100644 (file)
@@ -334,7 +334,6 @@ void f2fs_drop_inmem_pages(struct inode *inode)
        }
 
        fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
-       stat_dec_atomic_write(inode);
 
        spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
        if (!list_empty(&fi->inmem_ilist))
@@ -505,7 +504,7 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
         * dir/node pages without enough free segments.
         */
        if (has_not_enough_free_secs(sbi, 0, 0)) {
-               mutex_lock(&sbi->gc_mutex);
+               down_write(&sbi->gc_lock);
                f2fs_gc(sbi, false, false, NULL_SEGNO);
        }
 }
@@ -2225,7 +2224,7 @@ void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
        struct sit_info *sit_i = SIT_I(sbi);
 
        f2fs_bug_on(sbi, addr == NULL_ADDR);
-       if (addr == NEW_ADDR)
+       if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
                return;
 
        invalidate_mapping_pages(META_MAPPING(sbi), addr, addr);
@@ -2861,9 +2860,9 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
        if (sbi->discard_blks == 0)
                goto out;
 
-       mutex_lock(&sbi->gc_mutex);
+       down_write(&sbi->gc_lock);
        err = f2fs_write_checkpoint(sbi, &cpc);
-       mutex_unlock(&sbi->gc_mutex);
+       up_write(&sbi->gc_lock);
        if (err)
                goto out;
 
@@ -3036,7 +3035,8 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
        if (fio->type == DATA) {
                struct inode *inode = fio->page->mapping->host;
 
-               if (is_cold_data(fio->page) || file_is_cold(inode))
+               if (is_cold_data(fio->page) || file_is_cold(inode) ||
+                               f2fs_compressed_file(inode))
                        return CURSEG_COLD_DATA;
                if (file_is_hot(inode) ||
                                is_inode_flag_set(inode, FI_HOT_DATA) ||
@@ -3289,7 +3289,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
 
        stat_inc_inplace_blocks(fio->sbi);
 
-       if (fio->bio)
+       if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
                err = f2fs_merge_page_bio(fio);
        else
                err = f2fs_submit_page_bio(fio);