Lines Matching full:opt
212 int inject_parse_options(int argc, char *argv[], struct inject_option *opt) in inject_parse_options() argument
246 opt->mb = optarg; in inject_parse_options()
252 opt->idx = atoi(optarg); in inject_parse_options()
253 MSG(0, "Info: inject slot index %d\n", opt->idx); in inject_parse_options()
256 opt->val = strtoll(optarg, &endptr, 0); in inject_parse_options()
257 if (opt->val == LLONG_MAX || opt->val == LLONG_MIN || in inject_parse_options()
260 MSG(0, "Info: inject value %lld : 0x%llx\n", opt->val, in inject_parse_options()
261 (unsigned long long)opt->val); in inject_parse_options()
264 opt->str = strdup(optarg); in inject_parse_options()
265 if (!opt->str) in inject_parse_options()
267 MSG(0, "Info: inject string %s\n", opt->str); in inject_parse_options()
272 opt->sb = atoi(optarg); in inject_parse_options()
273 if (opt->sb < 0 || opt->sb > 2) in inject_parse_options()
275 MSG(0, "Info: inject sb %s\n", pack[opt->sb]); in inject_parse_options()
280 opt->cp = atoi(optarg); in inject_parse_options()
281 if (opt->cp < 0 || opt->cp > 2) in inject_parse_options()
283 MSG(0, "Info: inject cp pack %s\n", pack[opt->cp]); in inject_parse_options()
288 opt->nat = atoi(optarg); in inject_parse_options()
289 if (opt->nat < 0 || opt->nat > 2) in inject_parse_options()
291 MSG(0, "Info: inject nat pack %s\n", pack[opt->nat]); in inject_parse_options()
298 opt->nid = nid; in inject_parse_options()
299 MSG(0, "Info: inject nid %u : 0x%x\n", opt->nid, opt->nid); in inject_parse_options()
304 opt->sit = atoi(optarg); in inject_parse_options()
305 if (opt->sit < 0 || opt->sit > 2) in inject_parse_options()
307 MSG(0, "Info: inject sit pack %s\n", pack[opt->sit]); in inject_parse_options()
314 opt->blk = blk; in inject_parse_options()
315 MSG(0, "Info: inject blkaddr %u : 0x%x\n", opt->blk, opt->blk); in inject_parse_options()
318 opt->ssa = true; in inject_parse_options()
322 opt->node = true; in inject_parse_options()
326 opt->dent = true; in inject_parse_options()
340 if (opt->sb >= 0) { in inject_parse_options()
343 } else if (opt->cp >= 0) { in inject_parse_options()
346 } else if (opt->nat >= 0) { in inject_parse_options()
349 } else if (opt->sit >= 0) { in inject_parse_options()
352 } else if (opt->ssa) { in inject_parse_options()
355 } else if (opt->node) { in inject_parse_options()
358 } else if (opt->dent) { in inject_parse_options()
369 static int inject_sb(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_sb() argument
378 if (opt->sb == 0) in inject_sb()
379 opt->sb = 1; in inject_sb()
381 ret = dev_read_block(buf, opt->sb == 1 ? SB0_ADDR : SB1_ADDR); in inject_sb()
386 if (!strcmp(opt->mb, "magic")) { in inject_sb()
388 opt->sb, get_sb(magic), (u32)opt->val); in inject_sb()
389 set_sb(magic, (u32)opt->val); in inject_sb()
390 } else if (!strcmp(opt->mb, "s_stop_reason")) { in inject_sb()
391 if (opt->idx >= MAX_STOP_REASON) { in inject_sb()
393 opt->idx); in inject_sb()
398 opt->idx, opt->sb, sb->s_stop_reason[opt->idx], in inject_sb()
399 (u8)opt->val); in inject_sb()
400 sb->s_stop_reason[opt->idx] = (u8)opt->val; in inject_sb()
401 } else if (!strcmp(opt->mb, "s_errors")) { in inject_sb()
402 if (opt->idx >= MAX_F2FS_ERRORS) { in inject_sb()
404 opt->idx); in inject_sb()
409 opt->idx, opt->sb, sb->s_errors[opt->idx], (u8)opt->val); in inject_sb()
410 sb->s_errors[opt->idx] = (u8)opt->val; in inject_sb()
411 } else if (!strcmp(opt->mb, "devs.path")) { in inject_sb()
412 if (opt->idx >= MAX_DEVICES) { in inject_sb()
413 ERR_MSG("invalid index %u of sb->devs[]\n", opt->idx); in inject_sb()
417 if (strlen(opt->str) >= MAX_PATH_LEN) { in inject_sb()
423 opt->idx, opt->sb, (char *)sb->devs[opt->idx].path, opt->str); in inject_sb()
424 strcpy((char *)sb->devs[opt->idx].path, opt->str); in inject_sb()
426 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_sb()
432 update_superblock(sb, SB_MASK((u32)opt->sb - 1)); in inject_sb()
436 free(opt->str); in inject_sb()
440 static int inject_cp(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_cp() argument
446 if (opt->cp == 0) in inject_cp()
447 opt->cp = sbi->cur_cp; in inject_cp()
449 if (opt->cp != sbi->cur_cp) { in inject_cp()
457 if (opt->cp == 2) in inject_cp()
464 sbi->cur_cp = opt->cp; in inject_cp()
469 if (!strcmp(opt->mb, "checkpoint_ver")) { in inject_cp()
471 opt->cp, get_cp(checkpoint_ver), (u64)opt->val); in inject_cp()
472 set_cp(checkpoint_ver, (u64)opt->val); in inject_cp()
473 } else if (!strcmp(opt->mb, "ckpt_flags")) { in inject_cp()
475 opt->cp, get_cp(ckpt_flags), (u32)opt->val); in inject_cp()
476 set_cp(ckpt_flags, (u32)opt->val); in inject_cp()
477 } else if (!strcmp(opt->mb, "cur_node_segno")) { in inject_cp()
478 if (opt->idx >= MAX_ACTIVE_NODE_LOGS) { in inject_cp()
480 opt->idx); in inject_cp()
485 opt->idx, opt->cp, get_cp(cur_node_segno[opt->idx]), in inject_cp()
486 (u32)opt->val); in inject_cp()
487 set_cp(cur_node_segno[opt->idx], (u32)opt->val); in inject_cp()
488 } else if (!strcmp(opt->mb, "cur_node_blkoff")) { in inject_cp()
489 if (opt->idx >= MAX_ACTIVE_NODE_LOGS) { in inject_cp()
491 opt->idx); in inject_cp()
496 opt->idx, opt->cp, get_cp(cur_node_blkoff[opt->idx]), in inject_cp()
497 (u16)opt->val); in inject_cp()
498 set_cp(cur_node_blkoff[opt->idx], (u16)opt->val); in inject_cp()
499 } else if (!strcmp(opt->mb, "cur_data_segno")) { in inject_cp()
500 if (opt->idx >= MAX_ACTIVE_DATA_LOGS) { in inject_cp()
502 opt->idx); in inject_cp()
507 opt->idx, opt->cp, get_cp(cur_data_segno[opt->idx]), in inject_cp()
508 (u32)opt->val); in inject_cp()
509 set_cp(cur_data_segno[opt->idx], (u32)opt->val); in inject_cp()
510 } else if (!strcmp(opt->mb, "cur_data_blkoff")) { in inject_cp()
511 if (opt->idx >= MAX_ACTIVE_DATA_LOGS) { in inject_cp()
513 opt->idx); in inject_cp()
518 opt->idx, opt->cp, get_cp(cur_data_blkoff[opt->idx]), in inject_cp()
519 (u16)opt->val); in inject_cp()
520 set_cp(cur_data_blkoff[opt->idx], (u16)opt->val); in inject_cp()
522 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_cp()
528 write_raw_cp_blocks(sbi, cp, opt->cp); in inject_cp()
536 static int inject_nat(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_nat() argument
547 if (!IS_VALID_NID(sbi, opt->nid)) { in inject_nat()
548 ERR_MSG("Invalid nid %u range [%u:%"PRIu64"]\n", opt->nid, 0, in inject_nat()
559 is_set = f2fs_test_bit(opt->nid, nm_i->nat_bitmap); in inject_nat()
560 if (opt->nat == 0) { in inject_nat()
561 opt->nat = is_set ? 2 : 1; in inject_nat()
563 if (opt->nat == 1) in inject_nat()
564 f2fs_clear_bit(opt->nid, nm_i->nat_bitmap); in inject_nat()
566 f2fs_set_bit(opt->nid, nm_i->nat_bitmap); in inject_nat()
569 blk_addr = current_nat_addr(sbi, opt->nid, NULL); in inject_nat()
574 offs = opt->nid % NAT_ENTRY_PER_BLOCK; in inject_nat()
577 if (!strcmp(opt->mb, "version")) { in inject_nat()
579 "in pack %d: %d -> %d\n", opt->nid, opt->nat, in inject_nat()
580 ne->version, (u8)opt->val); in inject_nat()
581 ne->version = (u8)opt->val; in inject_nat()
582 } else if (!strcmp(opt->mb, "ino")) { in inject_nat()
584 "in pack %d: %d -> %d\n", opt->nid, opt->nat, in inject_nat()
585 le32_to_cpu(ne->ino), (nid_t)opt->val); in inject_nat()
586 ne->ino = cpu_to_le32((nid_t)opt->val); in inject_nat()
587 } else if (!strcmp(opt->mb, "block_addr")) { in inject_nat()
589 "in pack %d: 0x%x -> 0x%x\n", opt->nid, opt->nat, in inject_nat()
590 le32_to_cpu(ne->block_addr), (block_t)opt->val); in inject_nat()
591 ne->block_addr = cpu_to_le32((block_t)opt->val); in inject_nat()
593 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_nat()
603 f2fs_set_bit(opt->nid, nm_i->nat_bitmap); in inject_nat()
605 f2fs_clear_bit(opt->nid, nm_i->nat_bitmap); in inject_nat()
611 static int inject_sit(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_sit() argument
619 if (!f2fs_is_valid_blkaddr(sbi, opt->blk, DATA_GENERIC)) { in inject_sit()
621 opt->blk, SM_I(sbi)->main_blkaddr, in inject_sit()
629 segno = GET_SEGNO(sbi, opt->blk); in inject_sit()
632 if (opt->sit == 0) { in inject_sit()
633 opt->sit = is_set ? 2 : 1; in inject_sit()
635 if (opt->sit == 1) in inject_sit()
644 if (!strcmp(opt->mb, "vblocks")) { in inject_sit()
646 "in pack %d: %u -> %u\n", opt->blk, opt->sit, in inject_sit()
647 le16_to_cpu(sit->vblocks), (u16)opt->val); in inject_sit()
648 sit->vblocks = cpu_to_le16((u16)opt->val); in inject_sit()
649 } else if (!strcmp(opt->mb, "valid_map")) { in inject_sit()
650 if (opt->idx == -1) { in inject_sit()
652 opt->idx = offs; in inject_sit()
654 if (opt->idx >= SIT_VBLOCK_MAP_SIZE) { in inject_sit()
655 ERR_MSG("invalid idx %u of valid_map[]\n", opt->idx); in inject_sit()
660 "in pack %d: 0x%02x -> 0x%02x\n", opt->idx, opt->blk, in inject_sit()
661 opt->sit, sit->valid_map[opt->idx], (u8)opt->val); in inject_sit()
662 sit->valid_map[opt->idx] = (u8)opt->val; in inject_sit()
663 } else if (!strcmp(opt->mb, "mtime")) { in inject_sit()
665 "in pack %d: %"PRIu64" -> %"PRIu64"\n", opt->blk, opt->sit, in inject_sit()
666 le64_to_cpu(sit->mtime), (u64)opt->val); in inject_sit()
667 sit->mtime = cpu_to_le64((u64)opt->val); in inject_sit()
669 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_sit()
686 static int inject_ssa(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_ssa() argument
696 if (!f2fs_is_valid_blkaddr(sbi, opt->blk, DATA_GENERIC)) { in inject_ssa()
698 opt->blk, SM_I(sbi)->main_blkaddr, in inject_ssa()
703 segno = GET_SEGNO(sbi, opt->blk); in inject_ssa()
704 offset = OFFSET_IN_SEG(sbi, opt->blk); in inject_ssa()
710 if (!strcmp(opt->mb, "entry_type")) { in inject_ssa()
712 "block 0x%x: %d -> %d\n", opt->blk, footer->entry_type, in inject_ssa()
713 (unsigned char)opt->val); in inject_ssa()
714 footer->entry_type = (unsigned char)opt->val; in inject_ssa()
715 } else if (!strcmp(opt->mb, "check_sum")) { in inject_ssa()
717 "block 0x%x: 0x%x -> 0x%x\n", opt->blk, in inject_ssa()
718 le32_to_cpu(footer->check_sum), (u32)opt->val); in inject_ssa()
719 footer->check_sum = cpu_to_le32((u32)opt->val); in inject_ssa()
721 if (opt->idx == -1) { in inject_ssa()
723 opt->idx = offset; in inject_ssa()
725 if (opt->idx >= ENTRIES_IN_SUM) { in inject_ssa()
726 ERR_MSG("invalid idx %u of entries[]\n", opt->idx); in inject_ssa()
730 sum = &sum_blk->entries[opt->idx]; in inject_ssa()
731 if (!strcmp(opt->mb, "nid")) { in inject_ssa()
733 "block 0x%x: 0x%x -> 0x%x\n", opt->blk, in inject_ssa()
734 le32_to_cpu(sum->nid), (u32)opt->val); in inject_ssa()
735 sum->nid = cpu_to_le32((u32)opt->val); in inject_ssa()
736 } else if (!strcmp(opt->mb, "version")) { in inject_ssa()
738 "block 0x%x: %d -> %d\n", opt->blk, in inject_ssa()
739 sum->version, (u8)opt->val); in inject_ssa()
740 sum->version = (u8)opt->val; in inject_ssa()
741 } else if (!strcmp(opt->mb, "ofs_in_node")) { in inject_ssa()
743 "block 0x%x: %d -> %d\n", opt->blk, in inject_ssa()
744 sum->ofs_in_node, (u16)opt->val); in inject_ssa()
745 sum->ofs_in_node = cpu_to_le16((u16)opt->val); in inject_ssa()
747 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_ssa()
769 struct inject_option *opt) in inject_inode() argument
773 if (!strcmp(opt->mb, "i_mode")) { in inject_inode()
775 opt->nid, le16_to_cpu(inode->i_mode), (u16)opt->val); in inject_inode()
776 inode->i_mode = cpu_to_le16((u16)opt->val); in inject_inode()
777 } else if (!strcmp(opt->mb, "i_advise")) { in inject_inode()
779 opt->nid, inode->i_advise, (u8)opt->val); in inject_inode()
780 inode->i_advise = (u8)opt->val; in inject_inode()
781 } else if (!strcmp(opt->mb, "i_inline")) { in inject_inode()
783 opt->nid, inode->i_inline, (u8)opt->val); in inject_inode()
784 inode->i_inline = (u8)opt->val; in inject_inode()
785 } else if (!strcmp(opt->mb, "i_links")) { in inject_inode()
787 opt->nid, le32_to_cpu(inode->i_links), (u32)opt->val); in inject_inode()
788 inode->i_links = cpu_to_le32((u32)opt->val); in inject_inode()
789 } else if (!strcmp(opt->mb, "i_size")) { in inject_inode()
791 opt->nid, le64_to_cpu(inode->i_size), (u64)opt->val); in inject_inode()
792 inode->i_size = cpu_to_le64((u64)opt->val); in inject_inode()
793 } else if (!strcmp(opt->mb, "i_blocks")) { in inject_inode()
795 opt->nid, le64_to_cpu(inode->i_blocks), (u64)opt->val); in inject_inode()
796 inode->i_blocks = cpu_to_le64((u64)opt->val); in inject_inode()
797 } else if (!strcmp(opt->mb, "i_extra_isize")) { in inject_inode()
800 opt->nid, le16_to_cpu(inode->i_extra_isize), (u16)opt->val); in inject_inode()
801 inode->i_extra_isize = cpu_to_le16((u16)opt->val); in inject_inode()
802 } else if (!strcmp(opt->mb, "i_inode_checksum")) { in inject_inode()
804 "0x%x -> 0x%x\n", opt->nid, in inject_inode()
805 le32_to_cpu(inode->i_inode_checksum), (u32)opt->val); in inject_inode()
806 inode->i_inode_checksum = cpu_to_le32((u32)opt->val); in inject_inode()
807 } else if (!strcmp(opt->mb, "i_addr")) { in inject_inode()
809 if (opt->idx >= DEF_ADDRS_PER_INODE) { in inject_inode()
810 ERR_MSG("invalid index %u of i_addr[]\n", opt->idx); in inject_inode()
814 "0x%x -> 0x%x\n", opt->idx, opt->nid, in inject_inode()
815 le32_to_cpu(inode->i_addr[opt->idx]), (u32)opt->val); in inject_inode()
816 inode->i_addr[opt->idx] = cpu_to_le32((block_t)opt->val); in inject_inode()
817 } else if (!strcmp(opt->mb, "i_nid")) { in inject_inode()
818 if (opt->idx >= 5) { in inject_inode()
819 ERR_MSG("invalid index %u of i_nid[]\n", opt->idx); in inject_inode()
823 "0x%x -> 0x%x\n", opt->idx, opt->nid, in inject_inode()
824 le32_to_cpu(F2FS_INODE_I_NID(inode, opt->idx)), in inject_inode()
825 (u32)opt->val); in inject_inode()
826 F2FS_INODE_I_NID(inode, opt->idx) = cpu_to_le32((nid_t)opt->val); in inject_inode()
828 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_inode()
839 struct inject_option *opt) in inject_index_node() argument
843 if (strcmp(opt->mb, "addr")) { in inject_index_node()
844 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_index_node()
848 if (opt->idx >= DEF_ADDRS_PER_BLOCK) { in inject_index_node()
849 ERR_MSG("invalid index %u of nid/addr[]\n", opt->idx); in inject_index_node()
854 opt->idx, opt->nid, le32_to_cpu(dn->addr[opt->idx]), in inject_index_node()
855 (block_t)opt->val); in inject_index_node()
856 dn->addr[opt->idx] = cpu_to_le32((block_t)opt->val); in inject_index_node()
864 static int inject_node(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_node() argument
872 if (!IS_VALID_NID(sbi, opt->nid)) { in inject_node()
873 ERR_MSG("Invalid nid %u range [%u:%"PRIu64"]\n", opt->nid, 0, in inject_node()
883 get_node_info(sbi, opt->nid, &ni); in inject_node()
888 if (!strcmp(opt->mb, "nid")) { in inject_node()
890 opt->nid, le32_to_cpu(footer->nid), (u32)opt->val); in inject_node()
891 footer->nid = cpu_to_le32((u32)opt->val); in inject_node()
892 } else if (!strcmp(opt->mb, "ino")) { in inject_node()
894 opt->nid, le32_to_cpu(footer->ino), (u32)opt->val); in inject_node()
895 footer->ino = cpu_to_le32((u32)opt->val); in inject_node()
896 } else if (!strcmp(opt->mb, "flag")) { in inject_node()
898 "0x%x -> 0x%x\n", opt->nid, le32_to_cpu(footer->flag), in inject_node()
899 (u32)opt->val); in inject_node()
900 footer->flag = cpu_to_le32((u32)opt->val); in inject_node()
901 } else if (!strcmp(opt->mb, "cp_ver")) { in inject_node()
903 "0x%"PRIx64" -> 0x%"PRIx64"\n", opt->nid, le64_to_cpu(footer->cp_ver), in inject_node()
904 (u64)opt->val); in inject_node()
905 footer->cp_ver = cpu_to_le64((u64)opt->val); in inject_node()
906 } else if (!strcmp(opt->mb, "next_blkaddr")) { in inject_node()
908 "0x%x -> 0x%x\n", opt->nid, in inject_node()
909 le32_to_cpu(footer->next_blkaddr), (u32)opt->val); in inject_node()
910 footer->next_blkaddr = cpu_to_le32((u32)opt->val); in inject_node()
912 ret = inject_inode(sbi, node_blk, opt); in inject_node()
914 ret = inject_index_node(sbi, node_blk, opt); in inject_node()
925 if (ni.nid == ni.ino && strcmp(opt->mb, "i_inode_checksum")) in inject_node()
960 static int inject_dentry(struct f2fs_sb_info *sbi, struct inject_option *opt) in inject_dentry() argument
979 get_node_info(sbi, opt->nid, &ni); in inject_dentry()
997 slot = find_dir_entry(&d, opt->nid); in inject_dentry()
1033 slot = find_dir_entry(&d, opt->nid); in inject_dentry()
1043 ERR_MSG("dentry of ino %u not found\n", opt->nid); in inject_dentry()
1048 if (!strcmp(opt->mb, "d_bitmap")) { in inject_dentry()
1050 opt->nid); in inject_dentry()
1052 } else if (!strcmp(opt->mb, "d_hash")) { in inject_dentry()
1054 "0x%x -> 0x%x\n", opt->nid, le32_to_cpu(dent->hash_code), in inject_dentry()
1055 (u32)opt->val); in inject_dentry()
1056 dent->hash_code = cpu_to_le32((u32)opt->val); in inject_dentry()
1057 } else if (!strcmp(opt->mb, "d_ino")) { in inject_dentry()
1059 "%u -> %u\n", opt->nid, le32_to_cpu(dent->ino), in inject_dentry()
1060 (nid_t)opt->val); in inject_dentry()
1061 dent->ino = cpu_to_le32((nid_t)opt->val); in inject_dentry()
1062 } else if (!strcmp(opt->mb, "d_ftype")) { in inject_dentry()
1064 "%d -> %d\n", opt->nid, dent->file_type, in inject_dentry()
1065 (u8)opt->val); in inject_dentry()
1066 dent->file_type = (u8)opt->val; in inject_dentry()
1068 ERR_MSG("unknown or unsupported member \"%s\"\n", opt->mb); in inject_dentry()
1089 struct inject_option *opt = (struct inject_option *)c.private; in do_inject() local
1092 if (opt->sb >= 0) in do_inject()
1093 ret = inject_sb(sbi, opt); in do_inject()
1094 else if (opt->cp >= 0) in do_inject()
1095 ret = inject_cp(sbi, opt); in do_inject()
1096 else if (opt->nat >= 0) in do_inject()
1097 ret = inject_nat(sbi, opt); in do_inject()
1098 else if (opt->sit >= 0) in do_inject()
1099 ret = inject_sit(sbi, opt); in do_inject()
1100 else if (opt->ssa) in do_inject()
1101 ret = inject_ssa(sbi, opt); in do_inject()
1102 else if (opt->node) in do_inject()
1103 ret = inject_node(sbi, opt); in do_inject()
1104 else if (opt->dent) in do_inject()
1105 ret = inject_dentry(sbi, opt); in do_inject()