label so that bscan can get *all* the info.
- Scratch Pool where the volumes can be re-assigned to any Pool.
- Implement Maximum Job Spool Size
+- Implement EOF/EOV labels for ANSI labels
+- Implement IBM labels.
Maybe in 1.37:
- By the way: on page http://www.bacula.org/?page=tapedrives , at the
#5 Events that call a Python program
(Implemented in Dir/SD)
- Make sure the Device name is in the Query packet returned.
-
ASSERT(dcr);
if (device_is_unmounted(dev)) {
Jmsg(jcr, M_WARNING, 0, _("device %s is BLOCKED due to user unmount.\n"),
- dev_name(dev));
+ dev->print_name());
return false;
}
lock_device(dev);
if (dev->is_busy()) {
Jmsg2(jcr, M_FATAL, 0, _("Device %s is busy. Job %d canceled.\n"),
- dev->name(), jcr->JobId);
+ dev->print_name(), jcr->JobId);
goto get_out;
}
if (!dcr) {
}
Jmsg(jcr, M_FATAL, 0, _("Open device %s volume %s failed, ERR=%s\n"),
- dev_name(dev), dcr->VolumeName, strerror_dev(dev));
+ dev->print_name(), dcr->VolumeName, strerror_dev(dev));
goto get_out;
}
- Dmsg1(129, "open_dev %s OK\n", dev_name(dev));
+ Dmsg1(129, "open_dev %s OK\n", dev->print_name());
}
if (dev->is_dvd()) {
break;
} /* end for loop */
if (!vol_ok) {
- Jmsg1(jcr, M_FATAL, 0, _("Too many errors trying to mount device \"%s\".\n"),
- dev_name(dev));
+ Jmsg1(jcr, M_FATAL, 0, _("Too many errors trying to mount device %s.\n"),
+ dev->print_name());
goto get_out;
}
set_jcr_job_status(jcr, JS_Running);
dir_send_job_status(jcr);
Jmsg(jcr, M_INFO, 0, _("Ready to read from volume \"%s\" on device %s.\n"),
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
get_out:
P(dev->mutex);
block_device(dev, BST_DOING_ACQUIRE);
unlock_device(dev);
if (dev->can_read()) {
- Jmsg(jcr, M_WARNING, 0, _("Device %s is busy reading.\n"), dev->name());
+ Jmsg(jcr, M_WARNING, 0, _("Device %s is busy reading.\n"), dev->print_name());
goto bail_out;
}
if (device_is_unmounted(dev)) {
Jmsg(jcr, M_WARNING, 0, _("device %s is BLOCKED due to user unmount.\n"),
- dev_name(dev));
+ dev->print_name());
goto bail_out;
}
Dmsg1(190, "reserve_append device is %s\n", dev_is_tape(dev)?"tape":"disk");
/* OK, compatible device */
} else {
/* Drive not suitable for us */
- Jmsg(jcr, M_WARNING, 0, _("Device %s is busy writing on another Volume.\n"), dev->name());
+ Jmsg(jcr, M_WARNING, 0, _("Device %s is busy writing on another Volume.\n"), dev->print_name());
goto bail_out;
}
} else {
/* OK, compatible device */
} else {
/* Drive not suitable for us */
- Jmsg(jcr, M_WARNING, 0, _("Device %s is busy writing on another Volume.\n"), dev->name());
+ Jmsg(jcr, M_WARNING, 0, _("Device %s is busy writing on another Volume.\n"), dev->print_name());
goto bail_out;
}
} else {
* With the reservation system, this should not happen
*/
if (dev->can_read()) {
- Jmsg(jcr, M_FATAL, 0, _("Device %s is busy reading.\n"), dev_name(dev));
+ Jmsg(jcr, M_FATAL, 0, _("Device %s is busy reading.\n"), dev->print_name());
goto get_out;
}
strcmp(dev->VolHdr.VolName, dcr->VolumeName) == 0)) { /* wrong tape mounted */
Dmsg0(190, "Wrong tape mounted.\n");
if (dev->num_writers != 0 || dev->reserved_device) {
- Jmsg(jcr, M_FATAL, 0, _("Device %s is busy writing on another Volume.\n"), dev_name(dev));
+ Jmsg(jcr, M_FATAL, 0, _("Device %s is busy writing on another Volume.\n"), dev->print_name());
goto get_out;
}
/* Wrong tape mounted, release it, then fall through to get correct one */
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"),
- dev_name(dev));
+ Jmsg(jcr, M_FATAL, 0, _("Could not ready device %s for append.\n"),
+ dev->print_name());
}
goto get_out;
}
}
} else {
Jmsg2(jcr, M_FATAL, 0, _("BAD ERROR: release_device %s, Volume \"%s\" not in use.\n"),
- dev_name(dev), NPRT(dcr->VolumeName));
+ dev->print_name(), NPRT(dcr->VolumeName));
Jmsg2(jcr, M_ERROR, 0, _("num_writers=%d state=%x\n"), dev->num_writers, dev->state);
}
if (dev->VolCatInfo.VolCatName[0] == 0) {
Pmsg0(000, "NULL Volume name. This shouldn't happen!!!\n");
}
- Dmsg1(20, "Begin append device=%s\n", dev_name(dev));
+ Dmsg1(20, "Begin append device=%s\n", dev->print_name());
begin_data_spool(dcr);
begin_attribute_spool(jcr);
rec.remainder);
if (!write_block_to_device(dcr)) {
Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
- dev_name(dev), strerror_dev(dev));
+ dev->print_name(), strerror_dev(dev));
Jmsg2(jcr, M_FATAL, 0, _("Fatal append error on device %s: ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
+ dev->print_name(), strerror_dev(dev));
ok = false;
break;
}
Dmsg0(100, "Writing last part because write_part_after_job is set.\n");
if (dev->part < dev->num_parts) {
Jmsg3(jcr, M_FATAL, 0, _("Error while writing, current part number is less than the total number of parts (%d/%d, device=%s)\n"),
- dev->part, dev->num_parts, dev_name(dev));
+ dev->part, dev->num_parts, dev->print_name());
dev->dev_errno = EIO;
ok = false;
}
if (ok && (open_next_part(dev) < 0)) {
- Jmsg2(jcr, M_FATAL, 0, _("Unable to open device next part %s. ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
+ Jmsg2(jcr, M_FATAL, 0, _("Unable to open device next part %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
dev->dev_errno = EIO;
ok = false;
}
stat = wait_for_sysop(dcr);
if (dev->poll) {
- Dmsg1(400, "Poll timeout in create append vol on device %s\n", dev_name(dev));
+ Dmsg1(400, "Poll timeout in create append vol on device %s\n", dev->print_name());
continue;
}
if (stat == ETIMEDOUT) {
if (!double_dev_wait_time(dev)) {
- Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device \"%s\" for Job %s\n"),
- dev_name(dev), jcr->Job);
+ Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device %s for Job %s\n"),
+ dev->print_name(), jcr->Job);
Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg);
- Dmsg1(400, "Gave up waiting on device %s\n", dev_name(dev));
+ Dmsg1(400, "Gave up waiting on device %s\n", dev->print_name());
return false; /* exceeded maximum waits */
}
continue;
Jmsg(jcr, M_WARNING, 0, _("pthread error in mount_next_volume stat=%d ERR=%s\n"), stat,
be.strerror(stat));
}
- Dmsg1(400, "Someone woke me for device %s\n", dev_name(dev));
+ Dmsg1(400, "Someone woke me for device %s\n", dev->print_name());
/* If no VolumeName, and cannot get one, try again */
if (dcr->VolumeName[0] == 0 && !job_canceled(jcr) &&
stat = wait_for_sysop(dcr); ; /* wait on device */
if (dev->poll) {
- Dmsg1(400, "Poll timeout in mount vol on device %s\n", dev_name(dev));
+ Dmsg1(400, "Poll timeout in mount vol on device %s\n", dev->print_name());
Dmsg1(400, "Blocked=%s\n", edit_blocked_reason(dev));
return true;
}
if (stat == ETIMEDOUT) {
if (!double_dev_wait_time(dev)) {
- Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device \"%s\" for Job %s\n"),
- dev_name(dev), jcr->Job);
+ Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device %s for Job %s\n"),
+ dev->print_name(), jcr->Job);
Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg);
- Dmsg1(400, "Gave up waiting on device %s\n", dev_name(dev));
+ Dmsg1(400, "Gave up waiting on device %s\n", dev->print_name());
return false; /* exceeded maximum waits */
}
continue;
}
if (stat != 0) {
berrno be;
- Jmsg(jcr, M_FATAL, 0, _("pthread error in mount_next_volume stat=%d ERR=%s\n"), stat,
+ Jmsg(jcr, M_FATAL, 0, _("pthread error in mount_next_volume stat=%d: ERR=%s\n"), stat,
be.strerror(stat));
}
- Dmsg1(400, "Someone woke me for device %s\n", dev_name(dev));
+ Dmsg1(400, "Someone woke me for device %s\n", dev->print_name());
break;
}
set_jcr_job_status(jcr, JS_Running);
for ( ; !job_canceled(jcr); ) {
time_t now, start;
- Dmsg3(400, "I'm going to sleep on device %s. HB=%d wait=%d\n", dev_name(dev),
+ Dmsg3(400, "I'm going to sleep on device %s. HB=%d wait=%d\n", dev->print_name(),
(int)me->heartbeat_interval, dev->wait_sec);
start = time(NULL);
/* Wait required time */
str = "%";
break;
case 'a':
- str = dev_name(dcr->dev);
+ str = dcr->dev->archive_name();
break;
case 'c':
str = NPRT(dcr->device->changer_name);
Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len,
rec->remainder);
if (!write_block_to_device(out_jcr->dcr)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
- dev_name(out_dev), strerror_dev(out_dev));
+ Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n",
+ out_dev->print_name(), strerror_dev(out_dev));
Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
}
}
if (!write_block_to_device(out_jcr->dcr)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
- dev_name(out_dev), strerror_dev(out_dev));
+ Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n",
+ out_dev->print_name(), strerror_dev(out_dev));
Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
}
Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len,
rec->remainder);
if (!write_block_to_device(out_jcr->dcr)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
- dev_name(out_dev), strerror_dev(out_dev));
+ Dmsg2(90, "Got write_block_to_dev error on device %s: ERR=%s\n",
+ out_dev->print_name(), strerror_dev(out_dev));
Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
break;
{
DEVICE *dev = dcr->dev;
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
getchar();
return true;
}
{
DEVICE *dev = dcr->dev;
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
getchar();
return true;
}
(dev->part_size + block->binbuf) >= dev->max_part_size) {
if (dev->part < dev->num_parts) {
Jmsg3(dcr->jcr, M_FATAL, 0, _("Error while writing, current part number is less than the total number of parts (%d/%d, device=%s)\n"),
- dev->part, dev->num_parts, dev_name(dev));
+ dev->part, dev->num_parts, dev->print_name());
dev->dev_errno = EIO;
return false;
}
if (open_next_part(dev) < 0) {
- Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device next part %s. ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
+ Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device next part %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
dev->dev_errno = EIO;
return false;
}
((dev->file_size-dev->part_start) == dev->part_size) &&
(dev->part < dev->num_parts)) {
if (open_next_part(dev) < 0) {
- Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device next part %s. ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
+ Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open device next part %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
dev->dev_errno = EIO;
return false;
}
if (dev->at_eot()) {
if (!mount_next_read_volume(dcr)) {
Jmsg(jcr, M_INFO, 0, _("Got EOM at file %u on device %s, Volume \"%s\"\n"),
- dev->file, dev_name(dev), dcr->VolumeName);
+ dev->file, dev->print_name(), dcr->VolumeName);
break;
}
/* Read and discard Volume label */
Jmsg(jcr, M_INFO, 0, _("Mounted Volume \"%s\".\n"), dcr->VolumeName);
} else if (dev->at_eof()) {
Jmsg(jcr, M_INFO, 0, _("Got EOF at file %u on device %s, Volume \"%s\"\n"),
- dev->file, dev_name(dev), dcr->VolumeName);
+ dev->file, dev->print_name(), dcr->VolumeName);
Dmsg0(20, "read_record got eof. try again\n");
continue;
} else if (dev->state & ST_SHORT) {
{
DEVICE *dev = dcr->dev;
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
getchar();
return true;
}
}
force_close_dev(dev);
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
getchar();
return true;
}
return false;
}
}
- Pmsg1(000, "open_dev %s OK\n", dev_name(dev));
+ Pmsg1(000, "open_dev %s OK\n", dev->print_name());
dev->state |= ST_APPEND;
unlock_device(dev);
free_block(block);
if (!load_dev(dev)) {
Pmsg1(0, "Bad status from load. ERR=%s\n", strerror_dev(dev));
} else
- Pmsg1(0, "Loaded %s\n", dev_name(dev));
+ Pmsg1(0, "Loaded %s\n", dev->print_name());
}
/*
Pmsg1(0, "Bad status from rewind. ERR=%s\n", strerror_dev(dev));
clrerror_dev(dev, -1);
} else {
- Pmsg1(0, "Rewound %s\n", dev_name(dev));
+ Pmsg1(0, "Rewound %s\n", dev->print_name());
}
}
Pmsg2(0, "Bad status from weof %d. ERR=%s\n", stat, strerror_dev(dev));
return;
} else {
- Pmsg3(0, "Wrote %d EOF%s to %s\n", num, num==1?"":"s", dev_name(dev));
+ Pmsg3(0, "Wrote %d EOF%s to %s\n", num, num==1?"":"s", dev->print_name());
}
}
sleep_time += 30;
goto try_again;
} else {
- Pmsg1(0, "Rewound %s\n", dev_name(dev));
+ Pmsg1(0, "Rewound %s\n", dev->print_name());
}
if ((status = weof_dev(dev, 1)) < 0) {
Pmsg2(0, "Bad status from weof %d. ERR=%s\n", status, strerror_dev(dev));
goto bail_out;
} else {
- Pmsg1(0, "Wrote EOF to %s\n", dev_name(dev));
+ Pmsg1(0, "Wrote EOF to %s\n", dev->print_name());
}
if (sleep_time) {
return;
}
- Dmsg1(20, "Begin append device=%s\n", dev_name(dev));
+ Dmsg1(20, "Begin append device=%s\n", dev->print_name());
Dmsg1(20, "MaxVolSize=%s\n", edit_uint64(dev->max_volume_size, ec1));
/* Use fixed block size to simplify read back */
Pmsg1(-1, "%s", dev->errmsg); /* print reason */
if (dcr->VolumeName[0] == 0 || strcmp(dcr->VolumeName, "TestVolume2") == 0) {
fprintf(stderr, "Mount second Volume on device %s and press return when ready: ",
- dev_name(dev));
+ dev->print_name());
} else {
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
}
getchar();
return true;
if (!autochanger) {
force_close_dev(dev);
fprintf(stderr, "Mount blank Volume on device %s and press return when ready: ",
- dev_name(dev));
+ dev->print_name());
getchar();
}
open_device(dcr);
close_dev(dev);
dev->state &= ~ST_READ;
if (!acquire_device_for_read(jcr, dev)) {
- Pmsg2(0, "Cannot open Dev=%s, Vol=%s\n", dev_name(dev), dcr->VolumeName);
+ Pmsg2(0, "Cannot open Dev=%s, Vol=%s\n", dev->print_name(), dcr->VolumeName);
return false;
}
return true; /* next volume mounted */
/* Copy user supplied device parameters from Resource */
dev->dev_name = get_memory(strlen(device->device_name)+1);
pm_strcpy(dev->dev_name, device->device_name);
+ dev->prt_name = get_memory(strlen(device->device_name) + strlen(device->hdr.name) + 10);
+ Mmsg(dev->prt_name, "\"%s\" (%s)", device->device_name, device->hdr.name);
dev->capabilities = device->cap_bits;
dev->min_block_size = device->min_block_size;
dev->max_block_size = device->max_block_size;
}
}
-/* This returns the physical device name */
-char *
-dev_name(DEVICE *dev)
-{
- return dev->dev_name;
-}
-
/* Return the resource name for the device */
const char *DEVICE::name() const
{
bool autoselect; /* Autoselect in autochanger */
int label_type; /* Bacula/ANSI/IBM label types */
uint32_t drive_index; /* Autochanger drive index */
- POOLMEM *dev_name; /* device name */
+ POOLMEM *dev_name; /* Physical device name */
+ POOLMEM *prt_name; /* Name used for display purposes */
char *errmsg; /* nicely edited error message */
uint32_t block_num; /* current block number base 0 */
uint32_t file; /* current file number base 0 */
const char *strerror() const;
const char *archive_name() const;
const char *name() const;
+ const char *print_name() const; /* Name for display purposes */
void set_eof();
void set_eot();
void set_append();
inline void DEVICE::clear_offline() { state &= ~ST_OFFLINE; }
inline const char *DEVICE::strerror() const { return errmsg; }
inline const char *DEVICE::archive_name() const { return dev_name; }
+inline const char *DEVICE::print_name() const { return prt_name; }
/*
* Device Context (or Control) Record.
P(dev->mutex); /* lock again */
Jmsg(jcr, M_INFO, 0, _("New volume \"%s\" mounted on device %s at %s.\n"),
- dcr->VolumeName, dev_name(dev), bstrftime(dt, sizeof(dt), time(NULL)));
+ dcr->VolumeName, dev->print_name(), bstrftime(dt, sizeof(dt), time(NULL)));
/*
* If this is a new tape, the label_blk will contain the
return false;
}
}
- Dmsg1(129, "open_dev %s OK\n", dev_name(dev));
+ Dmsg1(129, "open_dev %s OK\n", dev->print_name());
unlock_device(dev);
return true;
if (open_dev(dev, dcr->VolCatInfo.VolCatName, mode) < 0) {
/* If polling, ignore the error */
if (!dev->poll) {
- Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open archive %s. ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
- Pmsg2(000, "Unable to open archive %s. ERR=%s\n",
- dev_name(dev), strerror_dev(dev));
+ Jmsg2(dcr->jcr, M_FATAL, 0, _("Unable to open archive %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
+ Pmsg2(000, "Unable to open archive %s: ERR=%s\n",
+ dev->print_name(), strerror_dev(dev));
}
return false;
}
}
bstrncpy(dcr->VolumeName, newname, sizeof(dcr->VolumeName));
/* The following 3000 OK label. string is scanned in ua_label.c */
- bnet_fsend(dir, "3000 OK label. Volume=%s Device=\"%s\" (%s)\n",
- newname, dev->name(), dev->archive_name());
+ bnet_fsend(dir, "3000 OK label. Volume=%s Device=%s\n",
+ newname, dev->print_name());
break;
case VOL_NO_MEDIA:
bnet_fsend(dir, _("3912 Failed to label Volume: ERR=%s\n"), strerror_dev(dev));
ok = true;
break;
default:
- bnet_fsend(dir, _("3902 Cannot mount Volume on Storage Device \"%s\" (%s) because:\n%s"),
- dev->name(), dev->archive_name(), jcr->errmsg);
+ bnet_fsend(dir, _("3902 Cannot mount Volume on Storage Device %s because:\n%s"),
+ dev->print_name(), jcr->errmsg);
ok = false;
break;
}
/* Someone is waiting, wake him */
Dmsg0(100, "Waiting for mount. Attempting to wake thread\n");
dev->dev_blocked = BST_MOUNT;
- bnet_fsend(dir, "3001 OK mount. Device=\"%s\" (%s)\n",
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, "3001 OK mount. Device=%s\n",
+ dev->print_name());
pthread_cond_signal(&dev->wait_next_vol);
break;
dev->dev_blocked = BST_MOUNT;
}
if (dev->is_labeled()) {
- bnet_fsend(dir, _("3001 Device \"%s\" (%s) is mounted with Volume \"%s\"\n"),
- dev->name(), dev->archive_name(), dev->VolHdr.VolName);
+ bnet_fsend(dir, _("3001 Device %s is mounted with Volume \"%s\"\n"),
+ dev->print_name(), dev->VolHdr.VolName);
} else {
- bnet_fsend(dir, _("3905 Device \"%s\" (%s) open but no Bacula volume is mounted.\n"
+ bnet_fsend(dir, _("3905 Device %s open but no Bacula volume is mounted.\n"
"If this is not a blank tape, try unmounting and remounting the Volume.\n"),
- dev->name(), dev->archive_name());
+ dev->print_name());
}
pthread_cond_signal(&dev->wait_next_vol);
break;
case BST_DOING_ACQUIRE:
- bnet_fsend(dir, _("3001 Device \"%s\" (%s) is mounted; doing acquire.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3001 Device %s is mounted; doing acquire.\n"),
+ dev->print_name());
break;
case BST_WRITING_LABEL:
- bnet_fsend(dir, _("3903 Device \"%s\" (%s) is being labeled.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3903 Device %s is being labeled.\n"),
+ dev->print_name());
break;
case BST_NOT_BLOCKED:
if (dev->is_open()) {
if (dev->is_labeled()) {
- bnet_fsend(dir, _("3001 Device \"%s\" (%s) is mounted with Volume \"%s\"\n"),
- dev->name(), dev->archive_name(), dev->VolHdr.VolName);
+ bnet_fsend(dir, _("3001 Device %s is mounted with Volume \"%s\"\n"),
+ dev->print_name(), dev->VolHdr.VolName);
} else {
- bnet_fsend(dir, _("3905 Device \"%s\" (%s) open but no Bacula volume is mounted.\n"
+ bnet_fsend(dir, _("3905 Device %s open but no Bacula volume is mounted.\n"
"If this is not a blank tape, try unmounting and remounting the Volume.\n"),
- dev->name(), dev->archive_name());
+ dev->print_name());
}
} else {
if (!dev_is_tape(dev)) {
}
read_label(dcr);
if (dev->is_labeled()) {
- bnet_fsend(dir, _("3001 Device \"%s\" (%s) is already mounted with Volume \"%s\"\n"),
- dev->name(), dev->archive_name(), dev->VolHdr.VolName);
+ bnet_fsend(dir, _("3001 Device %s is already mounted with Volume \"%s\"\n"),
+ dev->print_name(), dev->VolHdr.VolName);
} else {
- bnet_fsend(dir, _("3905 Device \"%s\" (%s) open but no Bacula volume is mounted.\n"
+ bnet_fsend(dir, _("3905 Device %s open but no Bacula volume is mounted.\n"
"If this is not a blank tape, try unmounting and remounting the Volume.\n"),
- dev->name(), dev->archive_name());
+ dev->print_name());
}
}
break;
P(dev->mutex); /* Use P to avoid indefinite block */
if (!dev->is_open()) {
Dmsg0(90, "Device already unmounted\n");
- bnet_fsend(dir, _("3901 Device \"%s\" (%s) is already unmounted.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3901 Device %s is already unmounted.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_WAITING_FOR_SYSOP) {
Dmsg2(90, "%d waiter dev_block=%d. doing unmount\n", dev->num_waiting,
offline_or_rewind_dev(dev);
force_close_dev(dev);
dev->dev_blocked = BST_UNMOUNTED_WAITING_FOR_SYSOP;
- bnet_fsend(dir, _("3001 Device \"%s\" (%s) unmounted.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3001 Device %s unmounted.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_DOING_ACQUIRE) {
- bnet_fsend(dir, _("3902 Device \"%s\" (%s) is busy in acquire.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3902 Device %s is busy in acquire.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_WRITING_LABEL) {
- bnet_fsend(dir, _("3903 Device \"%s\" (%s) is being labeled.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3903 Device %s is being labeled.\n"),
+ dev->print_name());
} else if (dev->is_busy()) {
send_dir_busy_message(dir, dev);
open_dev(dev, NULL, 0); /* fake open for close */
offline_or_rewind_dev(dev);
force_close_dev(dev);
- bnet_fsend(dir, _("3002 Device \"%s\" (%s) unmounted.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3002 Device %s unmounted.\n"),
+ dev->print_name());
}
V(dev->mutex);
} else {
P(dev->mutex); /* Use P to avoid indefinite block */
if (!dev->is_open()) {
Dmsg0(90, "Device already released\n");
- bnet_fsend(dir, _("3911 Device \"%s\" (%s) already released.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3911 Device %s already released.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_WAITING_FOR_SYSOP ||
dev->dev_blocked == BST_UNMOUNTED_WAITING_FOR_SYSOP) {
Dmsg2(90, "%d waiter dev_block=%d. doing unmount\n", dev->num_waiting,
dev->dev_blocked);
- bnet_fsend(dir, _("3912 Device \"%s\" (%s) waiting for mount.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3912 Device %s waiting for mount.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_DOING_ACQUIRE) {
- bnet_fsend(dir, _("3913 Device \"%s\" (%s) is busy in acquire.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3913 Device %s is busy in acquire.\n"),
+ dev->print_name());
} else if (dev->dev_blocked == BST_WRITING_LABEL) {
- bnet_fsend(dir, _("3914 Device \"%s\" (%s) is being labeled.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3914 Device %s is being labeled.\n"),
+ dev->print_name());
} else if (dev->is_busy()) {
send_dir_busy_message(dir, dev);
} else { /* device not being used */
Dmsg0(90, "Device not in use, unmounting\n");
release_volume(jcr->dcr);
- bnet_fsend(dir, _("3012 Device \"%s\" (%s) released.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3012 Device %s released.\n"),
+ dev->print_name());
}
V(dev->mutex);
} else {
if (dev) {
P(dev->mutex); /* Use P to avoid indefinite block */
if (!dev_is_tape(dev)) {
- bnet_fsend(dir, _("3995 Device \"%s\" (%s) is not an autochanger.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(dir, _("3995 Device %s is not an autochanger.\n"),
+ dev->print_name());
} else if (!dev->is_open()) {
autochanger_list(dcr, dir);
/* Under certain "safe" conditions, we can steal the lock */
Dmsg1(100, "Volume: %s\n", dev->VolHdr.VolName);
break;
default:
- bnet_fsend(dir, _("3902 Cannot mount Volume on Storage Device \"%s\" (%s) because:\n%s"),
- dev->name(), dev->archive_name(), jcr->errmsg);
+ bnet_fsend(dir, _("3902 Cannot mount Volume on Storage Device %s because:\n%s"),
+ dev->print_name(), jcr->errmsg);
break;
}
/* Ensure that the device is open -- autoload_device() closes it */
for ( ; !dev->is_open(); ) {
if (open_dev(dev, dcr->VolumeName, OPEN_READ_WRITE) < 0) {
- bnet_fsend(dir, _("3910 Unable to open device \"%s\" (%s): ERR=%s\n"),
- dev->name(), dev->archive_name(), dev->strerror());
+ bnet_fsend(dir, _("3910 Unable to open device %s: ERR=%s\n"),
+ dev->print_name(), dev->strerror());
return false;
}
}
static void send_dir_busy_message(BSOCK *dir, DEVICE *dev)
{
if (dev->can_read()) {
- bnet_fsend(dir, _("3911 Device \"%s\" (%s) is busy reading.\n"),
- dev->name(), dev->archive_name());;
+ bnet_fsend(dir, _("3911 Device %s is busy reading.\n"),
+ dev->print_name());;
} else {
- bnet_fsend(dir, _("3912 Device \"%s\" (%s) is busy with %d writer(s).\n"),
- dev->name(), dev->archive_name(), dev->num_writers);
+ bnet_fsend(dir, _("3912 Device %s is busy with %d writer(s).\n"),
+ dev->print_name(), dev->num_writers);
}
}
if (dev->is_labeled()) { /* did we already read label? */
/* Compare Volume Names allow special wild card */
if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
- Mmsg(jcr->errmsg, _("Wrong Volume mounted on device \"%s\" (%s): Wanted %s have %s\n"),
- dev->name(), dev->archive_name(), VolName, dev->VolHdr.VolName);
+ Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
+ dev->print_name(), VolName, dev->VolHdr.VolName);
/*
* Cancel Job if too many label errors
* => we are in a loop
dev->label_type = B_BACULA_LABEL;
if (!rewind_dev(dev)) {
- Mmsg(jcr->errmsg, _("Couldn't rewind device \"%s\" (%s): ERR=%s\n"),
- dev->name(), dev->archive_name(), strerror_dev(dev));
+ Mmsg(jcr->errmsg, _("Couldn't rewind device %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
Dmsg1(30, "%s", jcr->errmsg);
return VOL_NO_MEDIA;
}
return stat;
}
if (stat == VOL_NAME_ERROR || stat == VOL_LABEL_ERROR) {
- Mmsg(jcr->errmsg, _("Wrong Volume mounted on device \"%s\" (%s): Wanted %s have %s\n"),
- dev->name(), dev->archive_name(), VolName, dev->VolHdr.VolName);
+ Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
+ dev->print_name(), VolName, dev->VolHdr.VolName);
if (!dev->poll && jcr->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, "Too many tries: %s", jcr->errmsg);
}
Dmsg0(90, "Big if statement in read_volume_label\n");
if (!read_block_from_dev(dcr, NO_BLOCK_NUMBER_CHECK)) {
- Mmsg(jcr->errmsg, _("Requested Volume \"%s\" on \"%s\" (%s) is not a Bacula "
+ Mmsg(jcr->errmsg, _("Requested Volume \"%s\" on %s is not a Bacula "
"labeled Volume, because: ERR=%s"), NPRT(VolName),
- dev->name(), dev->archive_name(), strerror_dev(dev));
+ dev->print_name(), strerror_dev(dev));
Dmsg1(30, "%s", jcr->errmsg);
} else if (!read_record_from_block(block, record)) {
Mmsg(jcr->errmsg, _("Could not read Volume label from block.\n"));
if (dev->VolHdr.VerNum != BaculaTapeVersion &&
dev->VolHdr.VerNum != OldCompatibleBaculaTapeVersion1 &&
dev->VolHdr.VerNum != OldCompatibleBaculaTapeVersion2) {
- Mmsg(jcr->errmsg, _("Volume on \"%s\" (%s) has wrong Bacula version. Wanted %d got %d\n"),
- dev->name(), dev->archive_name(), BaculaTapeVersion, dev->VolHdr.VerNum);
+ Mmsg(jcr->errmsg, _("Volume on %s has wrong Bacula version. Wanted %d got %d\n"),
+ dev->print_name(), BaculaTapeVersion, dev->VolHdr.VerNum);
Dmsg1(30, "%s", jcr->errmsg);
return VOL_VERSION_ERROR;
}
* a Bacula volume label (VOL_LABEL)
*/
if (dev->VolHdr.LabelType != PRE_LABEL && dev->VolHdr.LabelType != VOL_LABEL) {
- Mmsg(jcr->errmsg, _("Volume on \"%s\" (%s) has bad Bacula label type: %x\n"),
- dev->name(), dev->archive_name(), dev->VolHdr.LabelType);
+ Mmsg(jcr->errmsg, _("Volume on %s has bad Bacula label type: %x\n"),
+ dev->print_name(), dev->VolHdr.LabelType);
Dmsg1(30, "%s", jcr->errmsg);
if (!dev->poll && jcr->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, "Too many tries: %s", jcr->errmsg);
/* Compare Volume Names */
Dmsg2(30, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolName);
if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
- Mmsg(jcr->errmsg, _("Wrong Volume mounted on device \"%s\" (%s): Wanted %s have %s\n"),
- dev->name(), dev->archive_name(), VolName, dev->VolHdr.VolName);
+ Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
+ dev->print_name(), VolName, dev->VolHdr.VolName);
Dmsg1(30, "%s", jcr->errmsg);
/*
* Cancel Job if too many label errors
*/
if (open_guess_name_dev(dev) < 0) {
if (!write || dcr->VolCatInfo.VolCatParts > 0) {
- Mmsg3(jcr->errmsg, _("Requested Volume \"%s\" on \"%s\" (%s) is not a Bacula labeled Volume."),
- dev->name(), dev->archive_name(), dcr->VolumeName);
+ Mmsg2(jcr->errmsg, _("Requested Volume \"%s\" on %s is not a Bacula labeled Volume."),
+ dev->print_name(), dcr->VolumeName);
Dmsg0(100, "Leave read_dev_volume_label_guess VOL_IO_ERROR (!open_guess_name_dev)\n");
return VOL_NO_LABEL;
}
block->BlockNumber = 0;
if (!write_record_to_block(block, &rec)) {
free_pool_memory(rec.data);
- Jmsg2(jcr, M_FATAL, 0, _("Cannot write Volume label to block for device \"%s\" (%s)\n"),
- dev->name(), dev->archive_name());
+ Jmsg1(jcr, M_FATAL, 0, _("Cannot write Volume label to block for device %s\n"),
+ dev->print_name());
return false;
} else {
Dmsg1(90, "Wrote label of %d bytes to block\n", rec.data_len);
*/
if (!dev_cap(dev, CAP_STREAM)) {
if (!rewind_dev(dev)) {
- Jmsg3(jcr, M_WARNING, 0, _("Rewind error on device \"%s\" (%s): ERR=%s\n"),
- dev->name(), dev->archive_name(), strerror_dev(dev));
+ Jmsg2(jcr, M_WARNING, 0, _("Rewind error on device %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
}
if (recycle) {
if (!truncate_dev(dev)) {
- Jmsg3(jcr, M_WARNING, 0, _("Truncate error on device \"%s\" (%s): ERR=%s\n"),
- dev->name(), dev->archive_name(), strerror_dev(dev));
+ Jmsg2(jcr, M_WARNING, 0, _("Truncate error on device %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
}
}
/* Attempt write to check write permission */
Dmsg0(200, "Attempt to write to device.\n");
if (!write_block_to_dev(dcr)) {
- Jmsg3(jcr, M_ERROR, 0, _("Unable to write device \"%s\" (%s): ERR=%s\n"),
- dev->name(), dev->archive_name(), strerror_dev(dev));
+ Jmsg2(jcr, M_ERROR, 0, _("Unable to write device %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
Dmsg0(200, "===ERROR write block to dev\n");
return false;
}
return false;
}
if (recycle) {
- Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\" on device \"%s\" (%s), all previous data lost.\n"),
- dcr->VolumeName, dev->name(), dev->archive_name());
+ Jmsg(jcr, M_INFO, 0, _("Recycled volume \"%s\" on device %s, all previous data lost.\n"),
+ dcr->VolumeName, dev->print_name());
} else {
- Jmsg(jcr, M_INFO, 0, _("Wrote label to prelabeled Volume \"%s\" on device \"%s\" (%s)\n"),
- dcr->VolumeName, dev->name(), dev->archive_name());
+ Jmsg(jcr, M_INFO, 0, _("Wrote label to prelabeled Volume \"%s\" on device %s\n"),
+ dcr->VolumeName, dev->print_name());
}
/*
* End writing real Volume label (from pre-labeled tape), or recycling
dcr->VolCatInfo.Slot = 0;
if (!dir_ask_sysop_to_mount_volume(dcr)) {
Jmsg(jcr, M_FATAL, 0, _("Too many errors trying to mount device %s.\n"),
- dev_name(dev));
+ dev->print_name());
return false;
}
}
/* If not removable, Volume is broken */
if (!dev_cap(dev, CAP_REM)) {
Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"),
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
mark_volume_in_error(dcr);
goto mount_next_vol;
}
return false;
}
Jmsg(jcr, M_INFO, 0, _("Labeled new Volume \"%s\" on device %s.\n"),
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
goto read_volume; /* read label we just wrote */
}
/* If not removable, Volume is broken */
if (!dev_cap(dev, CAP_REM)) {
Jmsg(jcr, M_WARNING, 0, _("Volume \"%s\" not on device %s.\n"),
- dcr->VolumeName, dev_name(dev));
+ dcr->VolumeName, dev->print_name());
mark_volume_in_error(dcr);
if (autochanger) {
mark_volume_not_inchanger(dcr);
Jmsg(jcr, M_INFO, 0, _("Volume \"%s\" previously written, moving to end of data.\n"),
dcr->VolumeName);
if (!eod_dev(dev)) {
- Jmsg(jcr, M_ERROR, 0, _("Unable to position to end of data on device \"%s\". ERR=%s\n"),
- dev_name(dev), strerror_dev(dev));
+ Jmsg(jcr, M_ERROR, 0, _("Unable to position to end of data on device %s: ERR=%s\n"),
+ dev->print_name(), strerror_dev(dev));
mark_volume_in_error(dcr);
goto mount_next_vol;
}
close_dev(dev);
dev->state &= ~ST_READ;
if (!acquire_device_for_read(jcr, dev)) {
- Jmsg2(jcr, M_FATAL, 0, "Cannot open Dev=%s, Vol=%s\n", dev_name(dev),
+ Jmsg2(jcr, M_FATAL, 0, "Cannot open Dev=%s, Vol=%s\n", dev->print_name(),
dcr->VolumeName);
return false;
}
uint32_t new_VolSessionId();
/* From acquire.c */
-bool reserve_device_for_append(JCR *jcr, DEVICE *dev);
-DCR *acquire_device_for_append(JCR *jcr, DEVICE *dev);
-bool reserve_device_for_read(JCR *jcr, DEVICE *dev);
-DCR *acquire_device_for_read(JCR *jcr, DEVICE *dev);
-bool release_device(DCR *dcr);
-DCR *new_dcr(JCR *jcr, DEVICE *dev);
-void free_dcr(DCR *dcr);
+bool reserve_device_for_append(JCR *jcr, DEVICE *dev);
+DCR *acquire_device_for_append(JCR *jcr, DEVICE *dev);
+bool reserve_device_for_read(JCR *jcr, DEVICE *dev);
+DCR *acquire_device_for_read(JCR *jcr, DEVICE *dev);
+bool release_device(DCR *dcr);
+DCR *new_dcr(JCR *jcr, DEVICE *dev);
+void free_dcr(DCR *dcr);
/* From askdir.c */
enum get_vol_info_rw {
GET_VOL_INFO_FOR_WRITE,
GET_VOL_INFO_FOR_READ
};
-bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw);
-bool dir_find_next_appendable_volume(DCR *dcr);
-bool dir_update_volume_info(DCR *dcr, bool label);
-bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr);
-bool dir_ask_sysop_to_mount_volume(DCR *dcr);
-bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec);
-bool dir_send_job_status(JCR *jcr);
-bool dir_create_jobmedia_record(DCR *dcr);
-bool dir_update_device(JCR *jcr, DEVICE *dev);
-bool dir_update_changer(JCR *jcr, AUTOCHANGER *changer);
+bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw);
+bool dir_find_next_appendable_volume(DCR *dcr);
+bool dir_update_volume_info(DCR *dcr, bool label);
+bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr);
+bool dir_ask_sysop_to_mount_volume(DCR *dcr);
+bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec);
+bool dir_send_job_status(JCR *jcr);
+bool dir_create_jobmedia_record(DCR *dcr);
+bool dir_update_device(JCR *jcr, DEVICE *dev);
+bool dir_update_changer(JCR *jcr, AUTOCHANGER *changer);
/* authenticate.c */
-int authenticate_director(JCR *jcr);
-int authenticate_filed(JCR *jcr);
+int authenticate_director(JCR *jcr);
+int authenticate_filed(JCR *jcr);
/* From autochanger.c */
-int autoload_device(DCR *dcr, int writing, BSOCK *dir);
-bool autochanger_list(DCR *dcr, BSOCK *dir);
-void mark_volume_not_inchanger(DCR *dcr);
-char *edit_device_codes(DCR *dcr, char *omsg, const char *cmd);
+int autoload_device(DCR *dcr, int writing, BSOCK *dir);
+bool autochanger_list(DCR *dcr, BSOCK *dir);
+void mark_volume_not_inchanger(DCR *dcr);
+char *edit_device_codes(DCR *dcr, char *omsg, const char *cmd);
/* From block.c */
-void dump_block(DEV_BLOCK *b, const char *msg);
+void dump_block(DEV_BLOCK *b, const char *msg);
DEV_BLOCK *new_block(DEVICE *dev);
DEV_BLOCK *dup_block(DEV_BLOCK *eblock);
-void init_block_write(DEV_BLOCK *block);
-void empty_block(DEV_BLOCK *block);
-void free_block(DEV_BLOCK *block);
-bool write_block_to_device(DCR *dcr);
-bool write_block_to_dev(DCR *dcr);
-void print_block_read_errors(JCR *jcr, DEV_BLOCK *block);
-void ser_block_header(DEV_BLOCK *block);
+void init_block_write(DEV_BLOCK *block);
+void empty_block(DEV_BLOCK *block);
+void free_block(DEV_BLOCK *block);
+bool write_block_to_device(DCR *dcr);
+bool write_block_to_dev(DCR *dcr);
+void print_block_read_errors(JCR *jcr, DEV_BLOCK *block);
+void ser_block_header(DEV_BLOCK *block);
#define CHECK_BLOCK_NUMBERS true
#define NO_BLOCK_NUMBER_CHECK false
-bool read_block_from_device(DCR *dcr, bool check_block_numbers);
-bool read_block_from_dev(DCR *dcr, bool check_block_numbers);
+bool read_block_from_device(DCR *dcr, bool check_block_numbers);
+bool read_block_from_dev(DCR *dcr, bool check_block_numbers);
/* From butil.c -- utilities for SD tool programs */
-void print_ls_output(const char *fname, const char *link, int type, struct stat *statp);
+void print_ls_output(const char *fname, const char *link, int type, struct stat *statp);
JCR *setup_jcr(const char *name, char *dev_name, BSR *bsr,
- const char *VolumeName, int mode);
-void display_tape_error_status(JCR *jcr, DEVICE *dev);
+ const char *VolumeName, int mode);
+void display_tape_error_status(JCR *jcr, DEVICE *dev);
/* From dev.c */
-DEVICE *init_dev(JCR *jcr, DEVICE *dev, DEVRES *device);
-int open_dev(DEVICE *dev, char *VolName, int mode);
-off_t lseek_dev(DEVICE *dev, off_t offset, int whence);
-int open_first_part(DEVICE *dev);
-int open_next_part(DEVICE *dev);
-int open_guess_name_dev(DEVICE *dev);
-void close_dev(DEVICE *dev);
-void force_close_dev(DEVICE *dev);
-bool truncate_dev(DEVICE *dev);
-void term_dev(DEVICE *dev);
-char * strerror_dev(DEVICE *dev);
-void clrerror_dev(DEVICE *dev, int func);
-bool update_pos_dev(DEVICE *dev);
-bool rewind_dev(DEVICE *dev);
-bool load_dev(DEVICE *dev);
-bool offline_dev(DEVICE *dev);
-int flush_dev(DEVICE *dev);
-int weof_dev(DEVICE *dev, int num);
-int write_block(DEVICE *dev);
+DEVICE *init_dev(JCR *jcr, DEVICE *dev, DEVRES *device);
+int open_dev(DEVICE *dev, char *VolName, int mode);
+off_t lseek_dev(DEVICE *dev, off_t offset, int whence);
+int open_first_part(DEVICE *dev);
+int open_next_part(DEVICE *dev);
+int open_guess_name_dev(DEVICE *dev);
+void close_dev(DEVICE *dev);
+void force_close_dev(DEVICE *dev);
+bool truncate_dev(DEVICE *dev);
+void term_dev(DEVICE *dev);
+char * strerror_dev(DEVICE *dev);
+void clrerror_dev(DEVICE *dev, int func);
+bool update_pos_dev(DEVICE *dev);
+bool rewind_dev(DEVICE *dev);
+bool load_dev(DEVICE *dev);
+bool offline_dev(DEVICE *dev);
+int flush_dev(DEVICE *dev);
+int weof_dev(DEVICE *dev, int num);
+int write_block(DEVICE *dev);
uint32_t status_dev(DEVICE *dev);
-int eod_dev(DEVICE *dev);
-bool fsf_dev(DEVICE *dev, int num);
-bool fsr_dev(DEVICE *dev, int num);
-bool bsf_dev(DEVICE *dev, int num);
-bool bsr_dev(DEVICE *dev, int num);
-void attach_jcr_to_device(DEVICE *dev, JCR *jcr);
-void detach_jcr_from_device(DEVICE *dev, JCR *jcr);
-JCR *next_attached_jcr(DEVICE *dev, JCR *jcr);
-bool dev_can_write(DEVICE *dev);
-bool offline_or_rewind_dev(DEVICE *dev);
-bool reposition_dev(DEVICE *dev, uint32_t file, uint32_t block);
-void init_dev_wait_timers(DEVICE *dev);
-bool double_dev_wait_time(DEVICE *dev);
+int eod_dev(DEVICE *dev);
+bool fsf_dev(DEVICE *dev, int num);
+bool fsr_dev(DEVICE *dev, int num);
+bool bsf_dev(DEVICE *dev, int num);
+bool bsr_dev(DEVICE *dev, int num);
+void attach_jcr_to_device(DEVICE *dev, JCR *jcr);
+void detach_jcr_from_device(DEVICE *dev, JCR *jcr);
+JCR *next_attached_jcr(DEVICE *dev, JCR *jcr);
+bool dev_can_write(DEVICE *dev);
+bool offline_or_rewind_dev(DEVICE *dev);
+bool reposition_dev(DEVICE *dev, uint32_t file, uint32_t block);
+void init_dev_wait_timers(DEVICE *dev);
+bool double_dev_wait_time(DEVICE *dev);
/* Get info about device */
-char * dev_name(DEVICE *dev);
-char * dev_vol_name(DEVICE *dev);
+char * dev_vol_name(DEVICE *dev);
uint32_t dev_block(DEVICE *dev);
uint32_t dev_file(DEVICE *dev);
-bool dev_is_tape(DEVICE *dev);
+bool dev_is_tape(DEVICE *dev);
/* From device.c */
-bool open_device(DCR *dcr);
-bool first_open_device(DEVICE *dev);
-bool fixup_device_block_write_error(DCR *dcr);
-void _lock_device(const char *file, int line, DEVICE *dev);
-void _unlock_device(const char *file, int line, DEVICE *dev);
-void _block_device(const char *file, int line, DEVICE *dev, int state);
-void _unblock_device(const char *file, int line, DEVICE *dev);
-void _steal_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold, int state);
-void _give_back_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold);
-void set_new_volume_parameters(DCR *dcr);
-void set_new_file_parameters(DCR *dcr);
-bool device_is_unmounted(DEVICE *dev);
-void dev_lock(DEVICE *dev);
-void dev_unlock(DEVICE *dev);
+bool open_device(DCR *dcr);
+bool first_open_device(DEVICE *dev);
+bool fixup_device_block_write_error(DCR *dcr);
+void _lock_device(const char *file, int line, DEVICE *dev);
+void _unlock_device(const char *file, int line, DEVICE *dev);
+void _block_device(const char *file, int line, DEVICE *dev, int state);
+void _unblock_device(const char *file, int line, DEVICE *dev);
+void _steal_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold, int state);
+void _give_back_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold);
+void set_new_volume_parameters(DCR *dcr);
+void set_new_file_parameters(DCR *dcr);
+bool device_is_unmounted(DEVICE *dev);
+void dev_lock(DEVICE *dev);
+void dev_unlock(DEVICE *dev);
const char *edit_blocked_reason(DEVICE *dev);
/* From dircmd.c */
-void *handle_connection_request(void *arg);
+void *handle_connection_request(void *arg);
/* From fd_cmds.c */
-void run_job(JCR *jcr);
-bool bootstrap_cmd(JCR *jcr);
+void run_job(JCR *jcr);
+bool bootstrap_cmd(JCR *jcr);
/* From job.c */
-void stored_free_jcr(JCR *jcr);
-void connection_from_filed(void *arg);
-void handle_filed_connection(BSOCK *fd, char *job_name);
+void stored_free_jcr(JCR *jcr);
+void connection_from_filed(void *arg);
+void handle_filed_connection(BSOCK *fd, char *job_name);
/* From label.c */
-int read_dev_volume_label(DCR *dcr);
-int read_dev_volume_label_guess(DCR *dcr, bool write);
-void create_session_label(DCR *dcr, DEV_RECORD *rec, int label);
-void create_volume_label(DEVICE *dev, const char *VolName, const char *PoolName);
-bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *PoolName);
-bool write_ansi_ibm_label(DCR *dcr, const char *VolName);
-int read_ansi_ibm_label(DCR *dcr);
-bool write_session_label(DCR *dcr, int label);
-bool write_volume_label_to_block(DCR *dcr);
-bool rewrite_volume_label(DCR *dcr, bool recycle);
-void dump_volume_label(DEVICE *dev);
-void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose);
-bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec);
-bool unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec);
+int read_dev_volume_label(DCR *dcr);
+int read_dev_volume_label_guess(DCR *dcr, bool write);
+void create_session_label(DCR *dcr, DEV_RECORD *rec, int label);
+void create_volume_label(DEVICE *dev, const char *VolName, const char *PoolName);
+bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName, const char *PoolName);
+bool write_ansi_ibm_label(DCR *dcr, const char *VolName);
+int read_ansi_ibm_label(DCR *dcr);
+bool write_session_label(DCR *dcr, int label);
+bool write_volume_label_to_block(DCR *dcr);
+bool rewrite_volume_label(DCR *dcr, bool recycle);
+void dump_volume_label(DEVICE *dev);
+void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose);
+bool unser_volume_label(DEVICE *dev, DEV_RECORD *rec);
+bool unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec);
/* From match_bsr.c */
-int match_bsr(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec,
- SESSION_LABEL *sesrec);
-int match_bsr_block(BSR *bsr, DEV_BLOCK *block);
-void position_bsr_block(BSR *bsr, DEV_BLOCK *block);
-BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev);
-bool match_set_eof(BSR *bsr, DEV_RECORD *rec);
+int match_bsr(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec,
+ SESSION_LABEL *sesrec);
+int match_bsr_block(BSR *bsr, DEV_BLOCK *block);
+void position_bsr_block(BSR *bsr, DEV_BLOCK *block);
+BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev);
+bool match_set_eof(BSR *bsr, DEV_RECORD *rec);
/* From mount.c */
-bool mount_next_write_volume(DCR *dcr, bool release);
-bool mount_next_read_volume(DCR *dcr);
-void release_volume(DCR *ddr);
-void mark_volume_in_error(DCR *dcr);
+bool mount_next_write_volume(DCR *dcr, bool release);
+bool mount_next_read_volume(DCR *dcr);
+void release_volume(DCR *ddr);
+void mark_volume_in_error(DCR *dcr);
/* From parse_bsr.c */
-BSR *parse_bsr(JCR *jcr, char *lf);
-void dump_bsr(BSR *bsr, bool recurse);
-void free_bsr(BSR *bsr);
+BSR *parse_bsr(JCR *jcr, char *lf);
+void dump_bsr(BSR *bsr, bool recurse);
+void free_bsr(BSR *bsr);
VOL_LIST *new_vol();
-int add_vol(JCR *jcr, VOL_LIST *vol);
-void free_vol_list(JCR *jcr);
-void create_vol_list(JCR *jcr);
+int add_vol(JCR *jcr, VOL_LIST *vol);
+void free_vol_list(JCR *jcr);
+void create_vol_list(JCR *jcr);
/* From record.c */
const char *FI_to_ascii(int fi);
const char *stream_to_ascii(int stream, int fi);
-bool write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
-bool can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
-bool read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec);
+bool write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
+bool can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
+bool read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec);
DEV_RECORD *new_record();
-void free_record(DEV_RECORD *rec);
-void empty_record(DEV_RECORD *rec);
+void free_record(DEV_RECORD *rec);
+void empty_record(DEV_RECORD *rec);
/* From read_record.c */
bool read_records(DCR *dcr,
bool mount_cb(DCR *dcr));
/* From spool.c */
-bool begin_data_spool (DCR *dcr);
-bool discard_data_spool (DCR *dcr);
-bool commit_data_spool (DCR *dcr);
-bool are_attributes_spooled (JCR *jcr);
-bool begin_attribute_spool (JCR *jcr);
-bool discard_attribute_spool (JCR *jcr);
-bool commit_attribute_spool (JCR *jcr);
-bool write_block_to_spool_file (DCR *dcr);
-void list_spool_stats (BSOCK *bs);
+bool begin_data_spool (DCR *dcr);
+bool discard_data_spool (DCR *dcr);
+bool commit_data_spool (DCR *dcr);
+bool are_attributes_spooled (JCR *jcr);
+bool begin_attribute_spool (JCR *jcr);
+bool discard_attribute_spool (JCR *jcr);
+bool commit_attribute_spool (JCR *jcr);
+bool write_block_to_spool_file (DCR *dcr);
+void list_spool_stats (BSOCK *bs);
DEV_RECORD *trec = new_record();
Jmsg(jcr, M_INFO, 0, "End of Volume at file %u on device %s, Volume \"%s\"\n",
- dev->file, dev_name(dev), dcr->VolumeName);
+ dev->file, dev->print_name(), dcr->VolumeName);
if (!mount_cb(dcr)) {
Jmsg(jcr, M_INFO, 0, "End of all volumes.\n");
ok = false;
} else if (dev->at_eof()) {
if (verbose) {
Jmsg(jcr, M_INFO, 0, "Got EOF at file %u on device %s, Volume \"%s\"\n",
- dev->file, dev_name(dev), dcr->VolumeName);
+ dev->file, dev->print_name(), dcr->VolumeName);
}
Dmsg3(200, "Got EOF at file %u on device %s, Volume \"%s\"\n",
- dev->file, dev_name(dev), dcr->VolumeName);
+ dev->file, dev->print_name(), dcr->VolumeName);
continue;
} else if (dev_state(dev, ST_SHORT)) {
Jmsg1(jcr, M_ERROR, 0, "%s", dev->errmsg);
dev = device->dev;
if (dev && dev->is_open()) {
if (dev->is_labeled()) {
- bnet_fsend(user, _("Device \"%s\" (%s) is mounted with Volume \"%s\"\n"),
- dev->name(), dev->archive_name(), dev->VolHdr.VolName);
+ bnet_fsend(user, _("Device %s is mounted with Volume \"%s\"\n"),
+ dev->print_name(), dev->VolHdr.VolName);
} else {
- bnet_fsend(user, _("Device \"%s\" (%s) open but no Bacula volume is mounted.\n"),
- dev->name(), dev->archive_name());
+ bnet_fsend(user, _("Device %s open but no Bacula volume is mounted.\n"),
+ dev->print_name());
}
send_blocked_status(jcr, dev);
if (dev->can_append()) {