int cmd_chunk_recover(int argc, char *argv[]) { int ret = 0; char *file; int yes = 0; int verbose = 0; while (1) { int c = getopt(argc, argv, "yvh"); if (c < 0) break; switch (c) { case 'y': yes = 1; break; case 'v': verbose = 1; break; case 'h': default: usage(cmd_chunk_recover_usage); } } argc = argc - optind; if (argc == 0) usage(cmd_chunk_recover_usage); file = argv[optind]; ret = check_mounted(file); if (ret < 0) { fprintf(stderr, "Could not check mount status: %s\n", strerror(-ret)); return 1; } else if (ret) { fprintf(stderr, "the device is busy\n"); return 1; } ret = btrfs_recover_chunk_tree(file, verbose, yes); if (!ret) { fprintf(stdout, "Recover the chunk tree successfully.\n"); } else if (ret > 0) { ret = 0; fprintf(stdout, "Abort to rebuild the on-disk chunk tree.\n"); } else { fprintf(stdout, "Fail to recover the chunk tree.\n"); } return ret; }
static int cmd_rescue_chunk_recover(int argc, char *argv[]) { int ret = 0; char *file; int yes = 0; int verbose = 0; optind = 0; while (1) { int c = getopt(argc, argv, "yvh"); if (c < 0) break; switch (c) { case 'y': yes = 1; break; case 'v': verbose = 1; break; case 'h': default: usage(cmd_rescue_chunk_recover_usage); } } if (check_argc_exact(argc - optind, 1)) usage(cmd_rescue_chunk_recover_usage); file = argv[optind]; ret = check_mounted(file); 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_chunk_tree(file, verbose, yes); if (!ret) { fprintf(stdout, "Chunk tree recovered successfully\n"); } else if (ret > 0) { ret = 0; fprintf(stdout, "Chunk tree recovery aborted\n"); } else { fprintf(stdout, "Chunk tree recovery failed\n"); } return ret; }