int32_t dump_fd;
struct device_info devices[MAX_DEVICES];
int ndevs;
- char *extension_list;
+ char *extension_list[2];
const char *rootdev_name;
int dbg_lv;
int show_dentry;
__u8 encrypt_pw_salt[16]; /* Salt used for string2key algorithm */
struct f2fs_device devs[MAX_DEVICES]; /* device list */
__le32 qf_ino[F2FS_MAX_QUOTAS]; /* quota inode numbers */
- __u8 reserved[315]; /* valid reserved region */
+ __u8 hot_ext_count; /* # of hot file extension */
+ __u8 reserved[314]; /* valid reserved region */
} __attribute__((packed));
/*
NULL
};
+const char *hot_ext_lists[] = {
+ NULL
+};
+
+const char **default_ext_list[] = {
+ media_ext_lists,
+ hot_ext_lists
+};
+
static bool is_extension_exist(const char *name)
{
int i;
static void cure_extension_list(void)
{
- const char **extlist = media_ext_lists;
- char *ext_str = c.extension_list;
+ const char **extlist;
+ char *ext_str;
char *ue;
int name_len;
- int i = 0;
+ int i, pos = 0;
set_sb(extension_count, 0);
memset(sb->extension_list, 0, sizeof(sb->extension_list));
- while (*extlist) {
- name_len = strlen(*extlist);
- memcpy(sb->extension_list[i++], *extlist, name_len);
- extlist++;
- }
- set_sb(extension_count, i);
-
- if (!ext_str)
- return;
+ for (i = 0; i < 2; i++) {
+ ext_str = c.extension_list[i];
+ extlist = default_ext_list[i];
- /* add user ext list */
- ue = strtok(ext_str, ", ");
- while (ue != NULL) {
- name_len = strlen(ue);
- if (name_len >= 8) {
- MSG(0, "\tWarn: Extension name (%s) is too long\n", ue);
- goto next;
+ while (*extlist) {
+ name_len = strlen(*extlist);
+ memcpy(sb->extension_list[pos++], *extlist, name_len);
+ extlist++;
}
- if (!is_extension_exist(ue))
- memcpy(sb->extension_list[i++], ue, name_len);
+ if (i == 0)
+ set_sb(extension_count, pos);
+ else
+ sb->hot_ext_count = pos - get_sb(extension_count);;
+
+ if (!ext_str)
+ continue;
+
+ /* add user ext list */
+ ue = strtok(ext_str, ", ");
+ while (ue != NULL) {
+ name_len = strlen(ue);
+ if (name_len >= 8) {
+ MSG(0, "\tWarn: Extension name (%s) is too long\n", ue);
+ goto next;
+ }
+ if (!is_extension_exist(ue))
+ memcpy(sb->extension_list[pos++], ue, name_len);
next:
- ue = strtok(NULL, ", ");
- if (i >= F2FS_MAX_EXTENSION)
- break;
- }
+ ue = strtok(NULL, ", ");
+ if (pos >= F2FS_MAX_EXTENSION)
+ break;
+ }
- set_sb(extension_count, i);
+ if (i == 0)
+ set_sb(extension_count, pos);
+ else
+ sb->hot_ext_count = pos - get_sb(extension_count);
- free(c.extension_list);
+ free(c.extension_list[i]);
+ }
}
static void verify_cur_segs(void)
MSG(0, " -a heap-based allocation [default:0]\n");
MSG(0, " -c [device path] up to 7 devices excepts meta device\n");
MSG(0, " -d debug level [default:0]\n");
- MSG(0, " -e [extension list] e.g. \"mp3,gif,mov\"\n");
+ MSG(0, " -e [cold file ext list] e.g. \"mp3,gif,mov\"\n");
+ MSG(0, " -E [hot file ext list] e.g. \"db\"\n");
MSG(0, " -f force overwrite the exist filesystem\n");
MSG(0, " -i extended node bitmap, node ratio is 20%% by default\n");
MSG(0, " -l label\n");
MSG(0, "Info: Disable heap-based policy\n");
MSG(0, "Info: Debug level = %d\n", c.dbg_lv);
- if (c.extension_list)
- MSG(0, "Info: Add new extension list\n");
+ if (c.extension_list[0])
+ MSG(0, "Info: Add new cold file extension list\n");
+ if (c.extension_list[1])
+ MSG(0, "Info: Add new hot file extension list\n");
if (c.vol_label)
MSG(0, "Info: Label = %s\n", c.vol_label);
static void f2fs_parse_options(int argc, char *argv[])
{
- static const char *option_string = "qa:c:d:e:il:mo:O:s:S:z:t:fw:";
+ static const char *option_string = "qa:c:d:e:E:il:mo:O:s:S:z:t:fw:";
int32_t option=0;
while ((option = getopt(argc,argv,option_string)) != EOF) {
c.dbg_lv = atoi(optarg);
break;
case 'e':
- c.extension_list = strdup(optarg);
+ c.extension_list[0] = strdup(optarg);
+ break;
+ case 'E':
+ c.extension_list[1] = strdup(optarg);
break;
case 'i':
c.large_nat_bitmap = 1;