}
dcr->jcr = jcr;
dcr->dev = dev;
+ if (dev) {
+ dcr->device = dev->device;
+ }
dcr->block = new_block(dev);
dcr->rec = new_record();
dcr->spool_fd = -1;
bstrncpy(dcr->VolumeName, vol->VolumeName, sizeof(dcr->VolumeName));
for (i=0; i<5; i++) {
+ dcr->dev->state &= ~ST_LABEL; /* force reread of label */
if (job_canceled(jcr)) {
Mmsg1(dev->errmsg, _("Job %d canceled.\n"), jcr->JobId);
goto get_out; /* error return */
for ( ; !(dev->state & ST_OPENED); ) {
Dmsg1(120, "bstored: open vol=%s\n", dcr->VolumeName);
if (open_dev(dev, dcr->VolumeName, OPEN_READ_ONLY) < 0) {
+ if (dev->dev_errno == EIO) { /* no tape loaded */
+ goto default_path;
+ }
Jmsg(jcr, M_FATAL, 0, _("Open device %s volume %s failed, ERR=%s\n"),
dev_name(dev), dcr->VolumeName, strerror_dev(dev));
goto get_out;
* correctly possitioned. Possibly have way user can turn
* this optimization (to be implemented) off.
*/
- dcr->dev->state &= ~ST_LABEL; /* force reread of label */
Dmsg0(200, "calling read-vol-label\n");
switch (read_dev_volume_label(dcr)) {
case VOL_OK:
if (do_mount || recycle) {
Dmsg0(190, "Do mount_next_write_vol\n");
- if (!mount_next_write_volume(dcr, release)) {
+ V(mutex); /* don't lock everything during mount */
+ bool mounted = mount_next_write_volume(dcr, release);
+ P(mutex); /* re-lock */
+ if (!mounted) {
if (!job_canceled(jcr)) {
/* Reduce "noise" -- don't print if job canceled */
Jmsg(jcr, M_FATAL, 0, _("Could not ready device \"%s\" for append.\n"),
DEVICE *dev = dcr->dev;
lock_device(dev);
Dmsg1(100, "release_device device is %s\n", dev_is_tape(dev)?"tape":"disk");
- if (dev_state(dev, ST_READ)) {
- dev->state &= ~ST_READ; /* clear read bit */
+ if (dev->can_read()) {
+ dev->clear_read(); /* clear read bit */
if (!dev_is_tape(dev) || !dev_cap(dev, CAP_ALWAYSOPEN)) {
offline_or_rewind_dev(dev);
close_dev(dev);
} else if (dev->num_writers > 0) {
dev->num_writers--;
Dmsg1(100, "There are %d writers in release_device\n", dev->num_writers);
- if (dev_state(dev, ST_LABEL)) {
+ if (dev->is_labeled()) {
Dmsg0(100, "dir_create_jobmedia_record. Release\n");
if (!dir_create_jobmedia_record(dcr)) {
Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
bpipe = open_bpipe(alert, 0, "r");
if (bpipe) {
while (fgets(line, sizeof(line), bpipe->rfd)) {
- Jmsg(jcr, M_INFO, 0, _("Alert: %s"), line);
+ Jmsg(jcr, M_ALERT, 0, _("Alert: %s"), line);
}
status = close_bpipe(bpipe);
} else {
}
if (status != 0) {
berrno be;
- Jmsg(jcr, M_INFO, 0, _("3997 Bad alert command: %s: ERR=%s.\n"),
+ Jmsg(jcr, M_ALERT, 0, _("3997 Bad alert command: %s: ERR=%s.\n"),
alert, be.strerror(status));
}