|
@@ -74,6 +74,7 @@ static match_table_t f2fs_tokens = {
|
|
|
enum {
|
|
|
GC_THREAD, /* struct f2fs_gc_thread */
|
|
|
SM_INFO, /* struct f2fs_sm_info */
|
|
|
+ F2FS_SBI, /* struct f2fs_sb_info */
|
|
|
};
|
|
|
|
|
|
struct f2fs_attr {
|
|
@@ -91,6 +92,8 @@ static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
|
|
|
return (unsigned char *)sbi->gc_thread;
|
|
|
else if (struct_type == SM_INFO)
|
|
|
return (unsigned char *)SM_I(sbi);
|
|
|
+ else if (struct_type == F2FS_SBI)
|
|
|
+ return (unsigned char *)sbi;
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
@@ -180,6 +183,7 @@ F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
|
|
|
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, max_small_discards, max_discards);
|
|
|
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, ipu_policy, ipu_policy);
|
|
|
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ipu_util, min_ipu_util);
|
|
|
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
|
|
|
|
|
|
#define ATTR_LIST(name) (&f2fs_attr_##name.attr)
|
|
|
static struct attribute *f2fs_attrs[] = {
|
|
@@ -191,6 +195,7 @@ static struct attribute *f2fs_attrs[] = {
|
|
|
ATTR_LIST(max_small_discards),
|
|
|
ATTR_LIST(ipu_policy),
|
|
|
ATTR_LIST(min_ipu_util),
|
|
|
+ ATTR_LIST(max_victim_search),
|
|
|
NULL,
|
|
|
};
|
|
|
|
|
@@ -775,6 +780,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
|
|
|
sbi->node_ino_num = le32_to_cpu(raw_super->node_ino);
|
|
|
sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino);
|
|
|
sbi->cur_victim_sec = NULL_SECNO;
|
|
|
+ sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH;
|
|
|
|
|
|
for (i = 0; i < NR_COUNT_TYPE; i++)
|
|
|
atomic_set(&sbi->nr_pages[i], 0);
|