/* * return codes: * 0 : All superblocks are valid, no need to recover * 1 : Usage or syntax error * 2 : Recover all bad superblocks successfully * 3 : Fail to Recover bad supeblocks * 4 : Abort to recover bad superblocks */ int cmd_super_recover(int argc, char **argv) { int ret; int verbose = 0; int yes = 0; char *dname; while (1) { int c = getopt(argc, argv, "vy"); if (c < 0) break; switch (c) { case 'v': verbose = 1; break; case 'y': yes = 1; break; default: usage(cmd_super_recover_usage); } } argc = argc - optind; if (argc != 1) usage(cmd_super_recover_usage); dname = argv[optind]; ret = check_mounted(dname); if (ret) { fprintf(stderr, "the device is busy\n"); return 1; } ret = btrfs_recover_superblocks(dname, verbose, yes); return ret; }
/* * return codes: * 0 : All superblocks are valid, no need to recover * 1 : Usage or syntax error * 2 : Recover all bad superblocks successfully * 3 : Fail to Recover bad superblocks * 4 : Abort to recover bad superblocks */ static int cmd_rescue_super_recover(int argc, char **argv) { int ret; int verbose = 0; int yes = 0; char *dname; optind = 0; while (1) { int c = getopt(argc, argv, "vy"); if (c < 0) break; switch (c) { case 'v': verbose = 1; break; case 'y': yes = 1; break; default: usage(cmd_rescue_super_recover_usage); } } if (check_argc_exact(argc - optind, 1)) usage(cmd_rescue_super_recover_usage); dname = argv[optind]; ret = check_mounted(dname); if (ret < 0) { errno = -ret; error("could not check mount status: %m"); return 1; } else if (ret) { error("the device is busy"); return 1; } ret = btrfs_recover_superblocks(dname, verbose, yes); return ret; }