]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
f2fs: introduce time and interval facility
authorJaegeuk Kim <jaegeuk@kernel.org>
Fri, 8 Jan 2016 23:51:50 +0000 (15:51 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 11 Jan 2016 23:36:27 +0000 (15:36 -0800)
This patch adds time and interval arrays to store some timing variables.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/checkpoint.c
fs/f2fs/f2fs.h
fs/f2fs/segment.c
fs/f2fs/super.c

index 5dbafd5e83d9e4df1f8fc766e9340bab69e109de..3842af954cd5bc127f2f0aad13d0ff52b743779d 100644 (file)
@@ -1139,7 +1139,7 @@ int write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
                        "checkpoint: version = %llx", ckpt_ver);
 
        /* do checkpoint periodically */
-       sbi->cp_expires = round_jiffies_up(jiffies + HZ * sbi->cp_interval);
+       f2fs_update_time(sbi, CP_TIME);
        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
 out:
        mutex_unlock(&sbi->cp_mutex);
index ae0007df6c2cdad384505ca57c65beb6712b87b2..5bbb6a407e79f53fc9ad0ceed9d87dbb4b4b5fae 100644 (file)
@@ -721,6 +721,11 @@ enum {
        SBI_POR_DOING,                          /* recovery is doing or not */
 };
 
+enum {
+       CP_TIME,
+       MAX_TIME,
+};
+
 struct f2fs_sb_info {
        struct super_block *sb;                 /* pointer to VFS super block */
        struct proc_dir_entry *s_proc;          /* proc entry */
@@ -747,7 +752,8 @@ struct f2fs_sb_info {
        struct rw_semaphore node_write;         /* locking node writes */
        struct mutex writepages;                /* mutex for writepages() */
        wait_queue_head_t cp_wait;
-       long cp_expires, cp_interval;           /* next expected periodic cp */
+       unsigned long last_time[MAX_TIME];      /* to store time in jiffies */
+       long interval_time[MAX_TIME];           /* to store thresholds */
 
        struct inode_management im[MAX_INO_ENTRY];      /* manage inode cache */
 
@@ -837,6 +843,19 @@ struct f2fs_sb_info {
        unsigned int shrinker_run_no;
 };
 
+static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
+{
+       sbi->last_time[type] = jiffies;
+}
+
+static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type)
+{
+       struct timespec ts = {sbi->interval_time[type], 0};
+       unsigned long interval = timespec_to_jiffies(&ts);
+
+       return time_after(jiffies, sbi->last_time[type] + interval);
+}
+
 /*
  * Inline functions
  */
index c7bbc915d962725b5c4dd0d48f81c1be361023b3..fed23d5a7b34395be82a22a503cd8f82beac4d0a 100644 (file)
@@ -293,7 +293,7 @@ void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi)
        if (!available_free_memory(sbi, NAT_ENTRIES) ||
                        excess_prefree_segs(sbi) ||
                        !available_free_memory(sbi, INO_ENTRIES) ||
-                       jiffies > sbi->cp_expires) {
+                       f2fs_time_over(sbi, CP_TIME)) {
                if (test_opt(sbi, DATA_FLUSH))
                        sync_dirty_inodes(sbi, FILE_INODE);
                f2fs_sync_fs(sbi->sb, true);
index f5cc790646e2986e0eae2ad38c7165ccb1e4c3a1..787047f59c007b60c477f17c6beb1958a62ba21a 100644 (file)
@@ -218,7 +218,7 @@ F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
-F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, cp_interval);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);
 
 #define ATTR_LIST(name) (&f2fs_attr_##name.attr)
 static struct attribute *f2fs_attrs[] = {
@@ -1122,7 +1122,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
                atomic_set(&sbi->nr_pages[i], 0);
 
        sbi->dir_level = DEF_DIR_LEVEL;
-       sbi->cp_interval = DEF_CP_INTERVAL;
+       sbi->interval_time[CP_TIME] = DEF_CP_INTERVAL;
        clear_sbi_flag(sbi, SBI_NEED_FSCK);
 
        INIT_LIST_HEAD(&sbi->s_list);
@@ -1467,8 +1467,7 @@ try_onemore:
                f2fs_commit_super(sbi, true);
        }
 
-       sbi->cp_expires = round_jiffies_up(jiffies);
-
+       f2fs_update_time(sbi, CP_TIME);
        return 0;
 
 free_kobj: