-static void
-dump_to_tape(
- disk_t * dp)
-{
- dumper_t *dumper;
- cmd_t cmd;
- int result_argc;
- char **result_argv;
- char *qname;
- disk_t *dp1;
-
- qname = quote_string(dp->name);
- g_printf(_("driver: dumping %s:%s directly to tape\n"),
- dp->host->hostname, qname);
- fflush(stdout);
-
- /* pick a dumper and fail if there are no idle dumpers */
-
- dumper = idle_dumper();
- if (!dumper) {
- g_printf(_("driver: no idle dumpers for %s:%s.\n"),
- dp->host->hostname, qname);
- fflush(stdout);
- log_add(L_WARNING, _("no idle dumpers for %s:%s.\n"),
- dp->host->hostname, qname);
- amfree(qname);
- return; /* fatal problem */
- }
-
- /* tell the taper to read from a port number of its choice */
-
- taper_cmd(PORT_WRITE, dp, NULL, sched(dp)->level, sched(dp)->datestamp);
- cmd = getresult(taper, 1, &result_argc, &result_argv);
- if (cmd != PORT) {
- g_printf(_("driver: did not get PORT from taper for %s:%s\n"),
- dp->host->hostname, qname);
- fflush(stdout);
- log_add(L_WARNING, _("driver: did not get PORT from taper for %s:%s.\n"),
- dp->host->hostname, qname);
- amfree(qname);
- return; /* fatal problem */
- }
- amfree(qname);
-
- /* copy port number */
- dumper->output_port = atoi(result_argv[1]);
- amfree(dp->dataport_list);
- dp->dataport_list = stralloc(result_argv[2]);
-
- dumper->dp = dp;
- dumper->chunker = NULL;
- dumper->result = LAST_TOK;
- taper_result = LAST_TOK;
- sched(dp)->dumper = dumper;
-
- if (dp->host->pre_script == 0) {
- for (dp1=dp->host->disks; dp1 != NULL; dp1 = dp1->hostnext) {
- run_server_scripts(EXECUTE_ON_PRE_HOST_BACKUP,
- get_config_name(), dp1, -1);
- }
- dp->host->pre_script = 1;
- }
- run_server_scripts(EXECUTE_ON_PRE_DLE_BACKUP, get_config_name(), dp,
- sched(dp)->level);
-
- /* tell the dumper to dump to a port */
- dumper_cmd(dumper, PORT_DUMP, dp, NULL);
- dp->host->start_t = time(NULL) + 15;
- amfree(dp->dataport_list);
-
- /* update statistics & print state */
-
- taper_busy = dumper->busy = 1;
- taper_input_error = NULL;
- taper_tape_error = NULL;
- taper_dumper = dumper;
- taper_disk = dp;
- taper_first_label = NULL;
- taper_written = 0;
- taper_state |= TAPER_STATE_DUMP_TO_TAPE;
- sched(dp)->act_size = sched(dp)->est_size;
- dp->host->inprogress += 1;
- dp->inprogress = 1;
- sched(dp)->timestamp = time((time_t *)0);
- allocate_bandwidth(dp->host->netif, sched(dp)->est_kps);
- idle_reason = NOT_IDLE;
-
- short_dump_state();
-
- dumper->ev_read = event_register(dumper->fd, EV_READFD,
- handle_dumper_result, dumper);
- taper_ev_read = event_register(taper, EV_READFD,
- handle_taper_result, NULL);
-
- g_strfreev(result_argv);
-}