static int cmd_balance_full(int argc, char **argv) { struct btrfs_ioctl_balance_args args; memset(&args, 0, sizeof(args)); args.flags |= BTRFS_BALANCE_TYPE_MASK; return do_balance(argv[1], &args, BALANCE_START_NOWARN); }
void reiserfs_insert_item (reiserfs_filsys_t fs, struct path * path, struct item_head * ih, const void * body) { struct tree_balance tb; _init_tb_struct (&tb, fs, path, IH_SIZE + ih_item_len(ih)); if (fix_nodes (M_INSERT, &tb, ih) != CARRY_ON) die ("reiserfs_insert_item: fix_nodes failed"); do_balance (&tb, ih, body, M_INSERT, 0/*zero num*/); }
void reiserfs_paste_into_item (reiserfs_filsys_t fs, struct path * path, const void * body, int size) { struct tree_balance tb; _init_tb_struct (&tb, fs, path, size); if (fix_nodes (M_PASTE, &tb, 0/*ih*/) != CARRY_ON) reiserfs_panic ("reiserfs_paste_into_item: fix_nodes failed"); do_balance (&tb, 0, body, M_PASTE, 0/*zero num*/); }
int cmd_balance(int argc, char **argv) { if (argc == 2) { /* old 'btrfs filesystem balance <path>' syntax */ struct btrfs_ioctl_balance_args args; memset(&args, 0, sizeof(args)); args.flags |= BTRFS_BALANCE_TYPE_MASK; return do_balance(argv[1], &args, 1); } return handle_command_group(&balance_cmd_group, argc, argv); }
int do_deposit(string str) { int amount; if (sscanf(str, "%d",amount)) { if (amount < 1) { write("Please enter a positive number.\n"); return 1; } if (this_player()->deposit(amount)) { write("You deposit " + amount + " ducats in the bank.\n"); } else { write("You do not have " + amount + " ducats.\n"); } do_balance(); return 1; } else { write("Usage: deposit (amount)\n"); return 1; } }
static int cmd_balance_start(int argc, char **argv) { struct btrfs_ioctl_balance_args args; struct btrfs_balance_args *ptrs[] = { &args.data, &args.sys, &args.meta, NULL }; int force = 0; int verbose = 0; int nofilters = 1; int i; memset(&args, 0, sizeof(args)); optind = 1; while (1) { static const struct option longopts[] = { { "data", optional_argument, NULL, 'd'}, { "metadata", optional_argument, NULL, 'm' }, { "system", optional_argument, NULL, 's' }, { "force", no_argument, NULL, 'f' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; int opt = getopt_long(argc, argv, "d::s::m::fv", longopts, NULL); if (opt < 0) break; switch (opt) { case 'd': nofilters = 0; args.flags |= BTRFS_BALANCE_DATA; if (parse_filters(optarg, &args.data)) return 1; break; case 's': nofilters = 0; args.flags |= BTRFS_BALANCE_SYSTEM; if (parse_filters(optarg, &args.sys)) return 1; break; case 'm': nofilters = 0; args.flags |= BTRFS_BALANCE_METADATA; if (parse_filters(optarg, &args.meta)) return 1; break; case 'f': force = 1; break; case 'v': verbose = 1; break; default: usage(cmd_balance_start_usage); } } if (check_argc_exact(argc - optind, 1)) usage(cmd_balance_start_usage); /* * allow -s only under --force, otherwise do with system chunks * the same thing we were ordered to do with meta chunks */ if (args.flags & BTRFS_BALANCE_SYSTEM) { if (!force) { error( "Refusing to explicitly operate on system chunks.\n" "Pass --force if you really want to do that."); return 1; } } else if (args.flags & BTRFS_BALANCE_METADATA) { args.flags |= BTRFS_BALANCE_SYSTEM; memcpy(&args.sys, &args.meta, sizeof(struct btrfs_balance_args)); } if (nofilters) { /* relocate everything - no filters */ args.flags |= BTRFS_BALANCE_TYPE_MASK; } /* drange makes sense only when devid is set */ for (i = 0; ptrs[i]; i++) { if ((ptrs[i]->flags & BTRFS_BALANCE_ARGS_DRANGE) && !(ptrs[i]->flags & BTRFS_BALANCE_ARGS_DEVID)) { error("drange filter must be used with devid filter"); return 1; } } /* soft makes sense only when convert for corresponding type is set */ for (i = 0; ptrs[i]; i++) { if ((ptrs[i]->flags & BTRFS_BALANCE_ARGS_SOFT) && !(ptrs[i]->flags & BTRFS_BALANCE_ARGS_CONVERT)) { error("'soft' option can be used only when converting profiles"); return 1; } } if (force) args.flags |= BTRFS_BALANCE_FORCE; if (verbose) dump_ioctl_balance_args(&args); return do_balance(argv[optind], &args, nofilters); }
static int cmd_balance_start(int argc, char **argv) { struct btrfs_ioctl_balance_args args; struct btrfs_balance_args *ptrs[] = { &args.data, &args.sys, &args.meta, NULL }; int force = 0; int verbose = 0; int background = 0; unsigned start_flags = 0; int i; memset(&args, 0, sizeof(args)); optind = 0; while (1) { enum { GETOPT_VAL_FULL_BALANCE = 256, GETOPT_VAL_BACKGROUND = 257 }; static const struct option longopts[] = { { "data", optional_argument, NULL, 'd'}, { "metadata", optional_argument, NULL, 'm' }, { "system", optional_argument, NULL, 's' }, { "force", no_argument, NULL, 'f' }, { "verbose", no_argument, NULL, 'v' }, { "full-balance", no_argument, NULL, GETOPT_VAL_FULL_BALANCE }, { "background", no_argument, NULL, GETOPT_VAL_BACKGROUND }, { "bg", no_argument, NULL, GETOPT_VAL_BACKGROUND }, { NULL, 0, NULL, 0 } }; int opt = getopt_long(argc, argv, "d::s::m::fv", longopts, NULL); if (opt < 0) break; switch (opt) { case 'd': start_flags |= BALANCE_START_FILTERS; args.flags |= BTRFS_BALANCE_DATA; if (parse_filters(optarg, &args.data)) return 1; break; case 's': start_flags |= BALANCE_START_FILTERS; args.flags |= BTRFS_BALANCE_SYSTEM; if (parse_filters(optarg, &args.sys)) return 1; break; case 'm': start_flags |= BALANCE_START_FILTERS; args.flags |= BTRFS_BALANCE_METADATA; if (parse_filters(optarg, &args.meta)) return 1; break; case 'f': force = 1; break; case 'v': verbose = 1; break; case GETOPT_VAL_FULL_BALANCE: start_flags |= BALANCE_START_NOWARN; break; case GETOPT_VAL_BACKGROUND: background = 1; break; default: usage_unknown_option(cmd_balance_start_usage, argv); } } if (check_argc_exact(argc - optind, 1)) return 1; /* * allow -s only under --force, otherwise do with system chunks * the same thing we were ordered to do with meta chunks */ if (args.flags & BTRFS_BALANCE_SYSTEM) { if (!force) { error( "Refusing to explicitly operate on system chunks.\n" "Pass --force if you really want to do that."); return 1; } } else if (args.flags & BTRFS_BALANCE_METADATA) { args.flags |= BTRFS_BALANCE_SYSTEM; memcpy(&args.sys, &args.meta, sizeof(struct btrfs_balance_args)); } if (!(start_flags & BALANCE_START_FILTERS)) { /* relocate everything - no filters */ args.flags |= BTRFS_BALANCE_TYPE_MASK; } /* drange makes sense only when devid is set */ for (i = 0; ptrs[i]; i++) { if ((ptrs[i]->flags & BTRFS_BALANCE_ARGS_DRANGE) && !(ptrs[i]->flags & BTRFS_BALANCE_ARGS_DEVID)) { error("drange filter must be used with devid filter"); return 1; } } /* soft makes sense only when convert for corresponding type is set */ for (i = 0; ptrs[i]; i++) { if ((ptrs[i]->flags & BTRFS_BALANCE_ARGS_SOFT) && !(ptrs[i]->flags & BTRFS_BALANCE_ARGS_CONVERT)) { error("'soft' option can be used only when converting profiles"); return 1; } } if (force) args.flags |= BTRFS_BALANCE_FORCE; if (verbose) dump_ioctl_balance_args(&args); if (background) { switch (fork()) { case (-1): error("unable to fork to run balance in background"); return 1; case (0): setsid(); switch(fork()) { case (-1): error( "unable to fork to run balance in background"); exit(1); case (0): /* * Read the return value to silence compiler * warning. Change to / should succeed and * we're not in a security-sensitive context. */ i = chdir("/"); close(0); close(1); close(2); open("/dev/null", O_RDONLY); open("/dev/null", O_WRONLY); open("/dev/null", O_WRONLY); break; default: exit(0); } break; default: exit(0); } } return do_balance(argv[optind], &args, start_flags); }