if (dev->max_block_size > 1000000) {
Jmsg3(jcr, M_ERROR, 0, _("Block size %u on device %s is too large, using default %u\n"),
- dev->max_block_size, dev->dev_name, DEFAULT_BLOCK_SIZE);
+ dev->max_block_size, dev->print_name(), DEFAULT_BLOCK_SIZE);
dev->max_block_size = 0;
}
if (dev->max_block_size % TAPE_BSIZE != 0) {
Jmsg2(jcr, M_WARNING, 0, _("Max block size %u not multiple of device %s block size.\n"),
- dev->max_block_size, dev->dev_name);
+ dev->max_block_size, dev->print_name());
}
dev->errmsg = get_pool_memory(PM_EMSG);
}
dev->use_count++;
Mmsg2(&dev->errmsg, _("WARNING!!!! device %s opened %d times!!!\n"),
- dev->dev_name, dev->use_count);
+ dev->print_name(), dev->use_count);
Emsg1(M_WARNING, 0, "%s", dev->errmsg);
return dev->fd;
}
if (dev->is_tape() || dev->is_fifo()) {
dev->file_size = 0;
int timeout;
+ int ioerrcnt = 10;
Dmsg0(29, "open_dev: device is tape\n");
if (mode == OPEN_READ_WRITE) {
dev->mode = O_RDWR | O_BINARY;
if (errno == EINTR || errno == EAGAIN) {
continue;
}
+ /* Busy wait for specified time (default = 5 mins) */
if (errno == EBUSY && timeout-- > 0) {
- Dmsg2(100, "Device %s busy. ERR=%s\n", dev->dev_name, be.strerror());
+ Dmsg2(100, "Device %s busy. ERR=%s\n", dev->print_name(), be.strerror());
bmicrosleep(1, 0);
continue;
}
+ /* IO error (no volume) try 10 times every 6 seconds */
+ if (errno == EIO && ioerrcnt-- > 0) {
+ bmicrosleep(5, 0);
+ continue;
+ }
dev->dev_errno = errno;
Mmsg2(&dev->errmsg, _("Unable to open device %s: ERR=%s\n"),
dev->print_name(), be.strerror(dev->dev_errno));
if (VolName == NULL || *VolName == 0) {
Mmsg(dev->errmsg, _("Could not open file device %s. No Volume name given.\n"),
- dev->dev_name);
+ dev->print_name());
return -1;
}
get_filename(dev, VolName, archive_name);
if (mount_dev(dev, 1) < 0) {
- Mmsg(dev->errmsg, _("Could not mount archive device %s.\n"),
- dev->dev_name);
+ Mmsg(dev->errmsg, _("Could not mount device %s.\n"),
+ dev->print_name());
Emsg0(M_FATAL, 0, dev->errmsg);
dev->fd = -1;
return dev->fd;
struct mtop mt_com;
unsigned int i;
- Dmsg1(29, "rewind_dev %s\n", dev->dev_name);
+ Dmsg1(29, "rewind_dev %s\n", dev->print_name());
if (dev->fd < 0) {
dev->dev_errno = EBADF;
Mmsg1(&dev->errmsg, _("Bad call to rewind_dev. Device %s not open\n"),
- dev->dev_name);
+ dev->print_name());
Emsg0(M_ABORT, 0, dev->errmsg);
return false;
}
continue;
}
Mmsg2(&dev->errmsg, _("Rewind error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
break;
berrno be;
dev->dev_errno = errno;
Mmsg2(&dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
}
bool ok = true;
off_t pos;
+ if (dev->fd < 0) {
+ dev->dev_errno = EBADF;
+ Mmsg1(&dev->errmsg, _("Bad call to eod_dev. Device %s not open\n"),
+ dev->print_name());
+ return false;
+ }
Dmsg0(29, "eod_dev\n");
if (dev->at_eot()) {
return true;
dev->dev_errno = errno;
berrno be;
Mmsg2(&dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
#ifdef MTEOM
Dmsg1(50, "ioctl error: %s\n", be.strerror());
update_pos_dev(dev);
Mmsg2(&dev->errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
berrno be;
clrerror_dev(dev, -1);
Mmsg2(&dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
Dmsg2(100, "EOD file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(&dev->errmsg, _("Bad device call. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad device call. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
dev->dev_errno = errno;
Pmsg1(000, "Seek error: ERR=%s\n", be.strerror());
Mmsg2(&dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
ok = false;
} else {
dev->file_addr = pos;
berrno be;
dev->dev_errno = errno;
Mmsg2(&dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return 0;
}
Dmsg0(-20, " Device status:");
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(&dev->errmsg, _("Bad call to load_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to load_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
berrno be;
dev->dev_errno = ENOTTY; /* function not available */
Mmsg2(&dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
#else
berrno be;
dev->dev_errno = errno;
Mmsg2(&dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
return true;
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(&dev->errmsg, _("Bad call to offline_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to offline_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
berrno be;
dev->dev_errno = errno;
Mmsg2(&dev->errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
- Dmsg1(100, "Offlined device %s\n", dev->dev_name);
+ Dmsg1(100, "Offlined device %s\n", dev->print_name());
return true;
}
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(&dev->errmsg, _("Bad call to fsf_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to fsf_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
}
if (dev->state & ST_EOT) {
dev->dev_errno = 0;
- Mmsg1(dev->errmsg, _("Device %s at End of Tape.\n"), dev->dev_name);
+ Mmsg1(dev->errmsg, _("Device %s at End of Tape.\n"), dev->print_name());
return false;
}
if (dev->state & ST_EOF) {
Dmsg0(200, "Set ST_EOT\n");
clrerror_dev(dev, MTFSF);
Mmsg2(dev->errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
Dmsg1(200, "%s", dev->errmsg);
return false;
}
Dmsg2(100, "Set ST_EOT read errno=%d. ERR=%s\n", dev->dev_errno,
be.strerror());
Mmsg2(dev->errmsg, _("read error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
Dmsg1(100, "%s", dev->errmsg);
break;
}
Dmsg0(100, "Set ST_EOT\n");
clrerror_dev(dev, MTFSF);
Mmsg2(&dev->errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
Dmsg0(100, "Got < 0 for MTFSF\n");
Dmsg1(100, "%s", dev->errmsg);
} else {
}
if (dev->state & ST_EOT) {
dev->dev_errno = 0;
- Mmsg1(dev->errmsg, _("Device %s at End of Tape.\n"), dev->dev_name);
+ Mmsg1(dev->errmsg, _("Device %s at End of Tape.\n"), dev->print_name());
stat = -1;
} else {
stat = 0;
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(dev->errmsg, _("Bad call to bsf_dev. Archive device not open\n"));
+ Mmsg0(dev->errmsg, _("Bad call to bsf_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
if (!dev->is_tape()) {
Mmsg1(dev->errmsg, _("Device %s cannot BSF because it is not a tape.\n"),
- dev->dev_name);
+ dev->print_name());
return false;
}
Dmsg0(29, "bsf_dev\n");
berrno be;
clrerror_dev(dev, MTBSF);
Mmsg2(dev->errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
}
update_pos_dev(dev);
return stat == 0;
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(dev->errmsg, _("Bad call to fsr_dev. Archive not open\n"));
+ Mmsg0(dev->errmsg, _("Bad call to fsr_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
return false;
}
if (!dev_cap(dev, CAP_FSR)) {
- Mmsg1(dev->errmsg, _("ioctl MTFSR not permitted on %s.\n"), dev->dev_name);
+ Mmsg1(dev->errmsg, _("ioctl MTFSR not permitted on %s.\n"), dev->print_name());
return false;
}
}
}
Mmsg2(dev->errmsg, _("ioctl MTFSR error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
}
update_pos_dev(dev);
return stat == 0;
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(dev->errmsg, _("Bad call to bsr_dev. Archive not open\n"));
+ Mmsg0(dev->errmsg, _("Bad call to bsr_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
}
if (!dev_cap(dev, CAP_BSR)) {
- Mmsg1(dev->errmsg, _("ioctl MTBSR not permitted on %s.\n"), dev->dev_name);
+ Mmsg1(dev->errmsg, _("ioctl MTBSR not permitted on %s.\n"), dev->print_name());
return false;
}
berrno be;
clrerror_dev(dev, MTBSR);
Mmsg2(dev->errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
}
update_pos_dev(dev);
return stat == 0;
{
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(dev->errmsg, _("Bad call to reposition_dev. Archive not open\n"));
+ Mmsg0(dev->errmsg, _("Bad call to reposition_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return false;
}
berrno be;
dev->dev_errno = errno;
Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
return false;
}
dev->file = file;
if (dev->fd < 0) {
dev->dev_errno = EBADF;
- Mmsg0(dev->errmsg, _("Bad call to weof_dev. Archive drive not open\n"));
+ Mmsg0(dev->errmsg, _("Bad call to weof_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return -1;
}
clrerror_dev(dev, MTWEOF);
if (stat == -1) {
Mmsg2(dev->errmsg, _("ioctl MTWEOF error on %s. ERR=%s.\n"),
- dev->dev_name, be.strerror());
+ dev->print_name(), be.strerror());
}
}
return stat;
static void do_close(DEVICE *dev)
{
- Dmsg1(29, "really close_dev %s\n", dev->dev_name);
+ Dmsg1(29, "really close_dev %s\n", dev->print_name());
if (dev->fd >= 0) {
close(dev->fd);
}
if (unmount_dev(dev, 1) < 0) {
- Dmsg1(0, "Cannot unmount device %s.\n", dev->dev_name);
+ Dmsg1(0, "Cannot unmount device %s.\n", dev->print_name());
}
/* Remove the last part file if it is empty */
close_dev(DEVICE *dev)
{
if (!dev) {
- Mmsg0(&dev->errmsg, _("Bad call to close_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to close_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return;
}
void force_close_dev(DEVICE *dev)
{
if (!dev) {
- Mmsg0(&dev->errmsg, _("Bad call to force_close_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to force_close_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return;
}
- Dmsg1(29, "Force close_dev %s\n", dev->dev_name);
+ Dmsg1(29, "Force close_dev %s\n", dev->print_name());
do_close(dev);
#ifdef FULL_DEBUG
bool truncate_dev(DEVICE *dev)
{
- Dmsg1(100, "truncate_dev %s\n", dev->dev_name);
+ Dmsg1(100, "truncate_dev %s\n", dev->print_name());
if (dev->is_tape()) {
return true; /* we don't really truncate tapes */
/* maybe we should rewind and write and eof ???? */
{
if (!dev) {
dev->dev_errno = EBADF;
- Mmsg0(&dev->errmsg, _("Bad call to term_dev. Archive not open\n"));
+ Mmsg0(&dev->errmsg, _("Bad call to term_dev. Device not open\n"));
Emsg0(M_FATAL, 0, dev->errmsg);
return;
}