This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
- version 2 as ammended with additional clauses defined in the
+ version 2 as amended with additional clauses defined in the
file LICENSE in the main source directory.
This program is distributed in the hope that it will be useful,
dcr->dev->num_parts = dcr->VolCatInfo.VolCatParts;
}
- Dmsg2(300, "do_reqest_vol_info got slot=%d Volume=%s\n",
+ Dmsg2(300, "do_reqest_vol_info return true slot=%d Volume=%s\n",
vol.Slot, vol.VolCatName);
return true;
}
bnet_fsend(dir, Get_Vol_Info, jcr->Job, dcr->VolCatInfo.VolCatName,
writing==GET_VOL_INFO_FOR_WRITE?1:0);
Dmsg1(100, ">dird: %s", dir->msg);
- return do_get_volume_info(dcr);
+ bool OK = do_get_volume_info(dcr);
+ return OK;
}
/*
unbash_spaces(dcr->media_type);
unbash_spaces(dcr->pool_name);
Dmsg1(100, ">dird: %s", dir->msg);
- if (do_get_volume_info(dcr)) {
- if (is_volume_in_use(dcr->VolumeName)) {
+ bool OK = do_get_volume_info(dcr);
+ if (OK) {
+ if (is_volume_in_use(dcr)) {
+ Dmsg1(100, "Volume %s is in use.\n", dcr->VolumeName);
continue;
} else {
found = true;
}
if (found) {
Dmsg0(400, "dir_find_next_appendable_volume return true\n");
- new_volume(dcr->VolumeName, NULL); /* reserve volume */
+ new_volume(dcr, dcr->VolumeName); /* reserve volume */
return true;
}
+ dcr->VolumeName[0] = 0;
return false;
}
vol->VolCatParts);
Dmsg1(100, ">dird: %s", dir->msg);
+ /* Do not lock device here because it may be locked from label */
if (!do_get_volume_info(dcr)) {
Jmsg(jcr, M_FATAL, 0, "%s", jcr->errmsg);
Pmsg2(000, "Didn't get vol info vol=%s: ERR=%s",
bool first = true;
DEVICE *dev = dcr->dev;
JCR *jcr = dcr->jcr;
+ bool OK = false;
Dmsg0(400, "enter dir_ask_sysop_to_create_appendable_volume\n");
ASSERT(dev->dev_blocked);
return false;
}
/* First pass, we *know* there are no appendable volumes, so no need to call */
- if (!first && dir_find_next_appendable_volume(dcr)) { /* get suggested volume */
- unmounted = (dev->dev_blocked == BST_UNMOUNTED) ||
- (dev->dev_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP);
+ if (!first) {
+ P(dev->mutex);
+ OK = dir_find_next_appendable_volume(dcr); /* get suggested volume */
+ V(dev->mutex);
+ }
+ if (!first && OK) {
+ unmounted = is_device_unmounted(dev);
/*
* If we have a valid volume name and we are not
* removable media, return now, or if we have a
Dmsg1(400, "Someone woke me for device %s\n", dev->print_name());
/* If no VolumeName, and cannot get one, try again */
+ P(dev->mutex);
if (dcr->VolumeName[0] == 0 && !job_canceled(jcr) &&
!dir_find_next_appendable_volume(dcr)) {
+ V(dev->mutex);
Jmsg(jcr, M_MOUNT, 0, _(
"Someone woke me up, but I cannot find any appendable\n"
"volumes for Job=%s.\n"), jcr->Job);
init_device_wait_timers(dcr);
continue;
}
- unmounted = (dev->dev_blocked == BST_UNMOUNTED) ||
- (dev->dev_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP);
+ V(dev->mutex);
+ unmounted = is_device_unmounted(dev);
if (unmounted) {
+ Dmsg0(400, "Device is unmounted. Must wait.\n");
continue; /* continue to wait */
}
Jmsg(jcr, M_MOUNT, 0, _("%s Volume \"%s\" on Storage Device %s for Job %s\n"),
msg, dcr->VolumeName, dev->print_name(), jcr->Job);
Dmsg3(400, "Mount \"%s\" on device \"%s\" for Job %s\n",
- dcr->VolumeName, dcr->dev_name, jcr->Job);
+ dcr->VolumeName, dev->print_name(), jcr->Job);
}
jcr->JobStatus = JS_WaitMount;
stat = wait_for_sysop(dcr); ; /* wait on device */
if (dev->poll) {
Dmsg1(400, "Poll timeout in mount vol on device %s\n", dev->print_name());
- Dmsg1(400, "Blocked=%s\n", edit_blocked_reason(dev));
+ Dmsg1(400, "Blocked=%s\n", dev->print_blocked());
return true;
}