Ejemplo n.º 1
0
static int segment_info_seq_show(struct seq_file *seq, void *offset)
{
	struct super_block *sb = seq->private;
	struct f2fs_sb_info *sbi = F2FS_SB(sb);
	unsigned int total_segs =
			le32_to_cpu(sbi->raw_super->segment_count_main);
	int i;

	seq_puts(seq, "format: segment_type|valid_blocks\n"
		"segment_type(0:HD, 1:WD, 2:CD, 3:HN, 4:WN, 5:CN)\n");

	for (i = 0; i < total_segs; i++) {
		struct seg_entry *se = get_seg_entry(sbi, i);

		if ((i % 10) == 0)
			seq_printf(seq, "%-5d", i);
		seq_printf(seq, "%d|%-3u", se->type,
					get_valid_blocks(sbi, i, 1));
		if ((i % 10) == 9 || i == (total_segs - 1))
			seq_putc(seq, '\n');
		else
			seq_putc(seq, ' ');
	}

	return 0;
}
Ejemplo n.º 2
0
static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno)
{
    struct sit_info *sit_i = SIT_I(sbi);
    unsigned int secno = GET_SECNO(sbi, segno);
    unsigned int start = secno * sbi->segs_per_sec;
    unsigned long long mtime = 0;
    unsigned int vblocks;
    unsigned char age = 0;
    unsigned char u;
    unsigned int i;

    for (i = 0; i < sbi->segs_per_sec; i++)
        mtime += get_seg_entry(sbi, start + i)->mtime;
    vblocks = get_valid_blocks(sbi, segno, sbi->segs_per_sec);

    mtime = div_u64(mtime, sbi->segs_per_sec);
    vblocks = div_u64(vblocks, sbi->segs_per_sec);

    u = (vblocks * 100) >> sbi->log_blocks_per_seg;

    /* Handle if the system time is changed by user */
    if (mtime < sit_i->min_mtime)
        sit_i->min_mtime = mtime;
    if (mtime > sit_i->max_mtime)
        sit_i->max_mtime = mtime;
    if (sit_i->max_mtime != sit_i->min_mtime)
        age = 100 - div64_u64(100 * (mtime - sit_i->min_mtime),
                              sit_i->max_mtime - sit_i->min_mtime);

    return UINT_MAX - ((100 * (100 - u) * age) / (100 + u));
}
Ejemplo n.º 3
0
static unsigned int get_gc_cost(struct f2fs_sb_info *sbi, unsigned int segno,
                                struct victim_sel_policy *p)
{
    if (p->alloc_mode == SSR)
        return get_seg_entry(sbi, segno)->ckpt_valid_blocks;

    /* alloc_mode == LFS */
    if (p->gc_mode == GC_GREEDY)
        return get_valid_blocks(sbi, segno, sbi->segs_per_sec);
    else
        return get_cb_cost(sbi, segno);
}
Ejemplo n.º 4
0
static int segment_info_seq_show(struct seq_file *seq, void *offset)
{
	struct super_block *sb = seq->private;
	struct f2fs_sb_info *sbi = F2FS_SB(sb);
	unsigned int total_segs = le32_to_cpu(sbi->raw_super->segment_count_main);
	int i;

	for (i = 0; i < total_segs; i++) {
		seq_printf(seq, "%u", get_valid_blocks(sbi, i, 1));
		if (i != 0 && (i % 10) == 0)
			seq_puts(seq, "\n");
		else
			seq_puts(seq, " ");
	}
	return 0;
}
Ejemplo n.º 5
0
static int segment_bits_seq_show(struct seq_file *seq, void *offset)
{
	struct super_block *sb = seq->private;
	struct f2fs_sb_info *sbi = F2FS_SB(sb);
	unsigned int total_segs =
			le32_to_cpu(sbi->raw_super->segment_count_main);
	int i, j;

	seq_puts(seq, "format: segment_type|valid_blocks|bitmaps\n"
		"segment_type(0:HD, 1:WD, 2:CD, 3:HN, 4:WN, 5:CN)\n");

	for (i = 0; i < total_segs; i++) {
		struct seg_entry *se = get_seg_entry(sbi, i);

		seq_printf(seq, "%-10d", i);
		seq_printf(seq, "%d|%-3u|", se->type,
					get_valid_blocks(sbi, i, false));
		for (j = 0; j < SIT_VBLOCK_MAP_SIZE; j++)
			seq_printf(seq, " %.2x", se->cur_valid_map[j]);
		seq_putc(seq, '\n');
	}
	return 0;
}