Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bareos/bareos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/stored/label.cc')
-rw-r--r--core/src/stored/label.cc103
1 files changed, 52 insertions, 51 deletions
diff --git a/core/src/stored/label.cc b/core/src/stored/label.cc
index 1906d9cd7..c2f6e1a80 100644
--- a/core/src/stored/label.cc
+++ b/core/src/stored/label.cc
@@ -3,7 +3,7 @@
Copyright (C) 2000-2012 Free Software Foundation Europe e.V.
Copyright (C) 2011-2012 Planets Communications B.V.
- Copyright (C) 2013-2021 Bareos GmbH & Co. KG
+ Copyright (C) 2013-2022 Bareos GmbH & Co. KG
This program is Free Software; you can redistribute it and/or
modify it under the terms of version three of the GNU Affero General Public
@@ -69,7 +69,6 @@ static void CreateVolumeLabelRecord(DeviceControlRecord* dcr,
int ReadDevVolumeLabel(DeviceControlRecord* dcr)
{
JobControlRecord* jcr = dcr->jcr;
- Device* volatile dev = dcr->dev;
char* VolName = dcr->VolumeName;
DeviceRecord* record;
bool ok = false;
@@ -81,31 +80,33 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
* We always write the label in an 64512 byte / 63k block.
* so we never have problems reading the volume label.
*/
- dev->SetLabelBlocksize(dcr);
+ dcr->dev->SetLabelBlocksize(dcr);
Dmsg5(100,
"Enter ReadVolumeLabel res=%d device=%s vol=%s dev_Vol=%s "
"max_blocksize=%u\n",
- dev->NumReserved(), dev->print_name(), VolName,
- dev->VolHdr.VolumeName[0] ? dev->VolHdr.VolumeName : "*NULL*",
- dev->max_block_size);
+ dcr->dev->NumReserved(), dcr->dev->print_name(), VolName,
+ dcr->dev->VolHdr.VolumeName[0] ? dcr->dev->VolHdr.VolumeName : "*NULL*",
+ dcr->dev->max_block_size);
- if (!dev->IsOpen()) {
- if (!dev->open(dcr, DeviceMode::OPEN_READ_ONLY)) { return VOL_IO_ERROR; }
+ if (!dcr->dev->IsOpen()) {
+ if (!dcr->dev->open(dcr, DeviceMode::OPEN_READ_ONLY)) {
+ return VOL_IO_ERROR;
+ }
}
- dev->ClearLabeled();
- dev->ClearAppend();
- dev->ClearRead();
- dev->label_type = B_BAREOS_LABEL;
+ dcr->dev->ClearLabeled();
+ dcr->dev->ClearAppend();
+ dcr->dev->ClearRead();
+ dcr->dev->label_type = B_BAREOS_LABEL;
- if (!dev->rewind(dcr)) {
+ if (!dcr->dev->rewind(dcr)) {
Mmsg(jcr->errmsg, _("Couldn't rewind device %s: ERR=%s\n"),
- dev->print_name(), dev->print_errmsg());
+ dcr->dev->print_name(), dcr->dev->print_errmsg());
Dmsg1(130, "return VOL_NO_MEDIA: %s", jcr->errmsg);
return VOL_NO_MEDIA;
}
- bstrncpy(dev->VolHdr.Id, "**error**", sizeof(dev->VolHdr.Id));
+ bstrncpy(dcr->dev->VolHdr.Id, "**error**", sizeof(dcr->dev->VolHdr.Id));
/*
* The stored plugin handling the bSdEventLabelRead event can abort
@@ -119,21 +120,21 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
// Read ANSI/IBM label if so requested
want_ansi_label = dcr->VolCatInfo.LabelType != B_BAREOS_LABEL
|| dcr->device_resource->label_type != B_BAREOS_LABEL;
- if (want_ansi_label || dev->HasCap(CAP_CHECKLABELS)) {
+ if (want_ansi_label || dcr->dev->HasCap(CAP_CHECKLABELS)) {
status = ReadAnsiIbmLabel(dcr);
// If we want a label and didn't find it, return error
if (want_ansi_label && status != VOL_OK) { goto bail_out; }
if (status == VOL_NAME_ERROR || status == VOL_LABEL_ERROR) {
Mmsg(jcr->errmsg,
_("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
- dev->print_name(), VolName, dev->VolHdr.VolumeName);
- if (!dev->poll && jcr->impl->label_errors++ > 100) {
+ dcr->dev->print_name(), VolName, dcr->dev->VolHdr.VolumeName);
+ if (!dcr->dev->poll && jcr->impl->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, _("Too many tries: %s"), jcr->errmsg);
}
goto bail_out;
}
if (status != VOL_OK) { /* Not an ANSI/IBM label, so re-read */
- dev->rewind(dcr);
+ dcr->dev->rewind(dcr);
} else {
have_ansi_label = true;
}
@@ -149,30 +150,30 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
Mmsg(jcr->errmsg,
_("Requested Volume \"%s\" on %s is not a Bareos "
"labeled Volume, because: ERR=%s"),
- NPRT(VolName), dev->print_name(), dev->print_errmsg());
+ NPRT(VolName), dcr->dev->print_name(), dcr->dev->print_errmsg());
Dmsg1(130, "%s", jcr->errmsg);
} else if (!ReadRecordFromBlock(dcr, record)) {
Mmsg(jcr->errmsg, _("Could not read Volume label from block.\n"));
Dmsg1(130, "%s", jcr->errmsg);
- } else if (!UnserVolumeLabel(dev, record)) {
+ } else if (!UnserVolumeLabel(dcr->dev, record)) {
Mmsg(jcr->errmsg, _("Could not UnSerialize Volume label: ERR=%s\n"),
- dev->print_errmsg());
+ dcr->dev->print_errmsg());
Dmsg1(130, "%s", jcr->errmsg);
- } else if (!bstrcmp(dev->VolHdr.Id, BareosId)
- && !bstrcmp(dev->VolHdr.Id, OldBaculaId)
- && !bstrcmp(dev->VolHdr.Id, OlderBaculaId)) {
- Mmsg(jcr->errmsg, _("Volume Header Id bad: %s\n"), dev->VolHdr.Id);
+ } else if (!bstrcmp(dcr->dev->VolHdr.Id, BareosId)
+ && !bstrcmp(dcr->dev->VolHdr.Id, OldBaculaId)
+ && !bstrcmp(dcr->dev->VolHdr.Id, OlderBaculaId)) {
+ Mmsg(jcr->errmsg, _("Volume Header Id bad: %s\n"), dcr->dev->VolHdr.Id);
Dmsg1(130, "%s", jcr->errmsg);
} else {
ok = true;
}
FreeRecord(record); /* finished reading Volume record */
- if (!dev->IsVolumeToUnload()) { dev->ClearUnload(); }
+ if (!dcr->dev->IsVolumeToUnload()) { dcr->dev->ClearUnload(); }
if (!ok) {
if (forge_on || jcr->impl->ignore_label_errors) {
- dev->SetLabeled(); /* set has Bareos label */
+ dcr->dev->SetLabeled(); /* set has Bareos label */
Jmsg(jcr, M_ERROR, 0, "%s", jcr->errmsg);
goto ok_out;
}
@@ -186,11 +187,11 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
* then read the Bareos Volume label. Now we need to
* make sure we have the right Volume.
*/
- if (dev->VolHdr.VerNum != BareosTapeVersion
- && dev->VolHdr.VerNum != OldCompatibleBareosTapeVersion1) {
+ if (dcr->dev->VolHdr.VerNum != BareosTapeVersion
+ && dcr->dev->VolHdr.VerNum != OldCompatibleBareosTapeVersion1) {
Mmsg(jcr->errmsg,
_("Volume on %s has wrong Bareos version. Wanted %d got %d\n"),
- dev->print_name(), BareosTapeVersion, dev->VolHdr.VerNum);
+ dcr->dev->print_name(), BareosTapeVersion, dcr->dev->VolHdr.VerNum);
Dmsg1(130, "VOL_VERSION_ERROR: %s", jcr->errmsg);
status = VOL_VERSION_ERROR;
goto bail_out;
@@ -200,12 +201,12 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
* We are looking for either an unused Bareos tape (PRE_LABEL) or
* a Bareos volume label (VOL_LABEL)
*/
- if (dev->VolHdr.LabelType != PRE_LABEL
- && dev->VolHdr.LabelType != VOL_LABEL) {
+ if (dcr->dev->VolHdr.LabelType != PRE_LABEL
+ && dcr->dev->VolHdr.LabelType != VOL_LABEL) {
Mmsg(jcr->errmsg, _("Volume on %s has bad Bareos label type: %x\n"),
- dev->print_name(), dev->VolHdr.LabelType);
+ dcr->dev->print_name(), dcr->dev->VolHdr.LabelType);
Dmsg1(130, "%s", jcr->errmsg);
- if (!dev->poll && jcr->impl->label_errors++ > 100) {
+ if (!dcr->dev->poll && jcr->impl->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, _("Too many tries: %s"), jcr->errmsg);
}
Dmsg0(150, "return VOL_LABEL_ERROR\n");
@@ -213,22 +214,22 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
goto bail_out;
}
- dev->SetLabeled(); /* set has Bareos label */
+ dcr->dev->SetLabeled(); /* set has Bareos label */
/* Compare Volume Names */
Dmsg2(130, "Compare Vol names: VolName=%s hdr=%s\n", VolName ? VolName : "*",
- dev->VolHdr.VolumeName);
+ dcr->dev->VolHdr.VolumeName);
if (VolName && *VolName && *VolName != '*'
- && !bstrcmp(dev->VolHdr.VolumeName, VolName)) {
+ && !bstrcmp(dcr->dev->VolHdr.VolumeName, VolName)) {
Mmsg(jcr->errmsg,
_("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
- dev->print_name(), VolName, dev->VolHdr.VolumeName);
+ dcr->dev->print_name(), VolName, dcr->dev->VolHdr.VolumeName);
Dmsg1(130, "%s", jcr->errmsg);
/*
* Cancel Job if too many label errors
* => we are in a loop
*/
- if (!dev->poll && jcr->impl->label_errors++ > 100) {
+ if (!dcr->dev->poll && jcr->impl->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, "Too many tries: %s", jcr->errmsg);
}
Dmsg0(150, "return VOL_NAME_ERROR\n");
@@ -236,12 +237,12 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
goto bail_out;
}
- if (debug_level >= 200) { DumpVolumeLabel(dev); }
+ if (debug_level >= 200) { DumpVolumeLabel(dcr->dev); }
Dmsg0(130, "Leave ReadVolumeLabel() VOL_OK\n");
// If we are a streaming device, we only get one chance to read
- if (!dev->HasCap(CAP_STREAM)) {
- dev->rewind(dcr);
+ if (!dcr->dev->HasCap(CAP_STREAM)) {
+ dcr->dev->rewind(dcr);
if (have_ansi_label) {
status = ReadAnsiIbmLabel(dcr);
// If we want a label and didn't find it, return error
@@ -249,12 +250,12 @@ int ReadDevVolumeLabel(DeviceControlRecord* dcr)
}
}
- Dmsg1(100, "Call reserve_volume=%s\n", dev->VolHdr.VolumeName);
- if (reserve_volume(dcr, dev->VolHdr.VolumeName) == NULL) {
+ Dmsg1(100, "Call reserve_volume=%s\n", dcr->dev->VolHdr.VolumeName);
+ if (reserve_volume(dcr, dcr->dev->VolHdr.VolumeName) == NULL) {
Mmsg2(jcr->errmsg, _("Could not reserve volume %s on %s\n"),
- dev->VolHdr.VolumeName, dev->print_name());
- Dmsg2(150, "Could not reserve volume %s on %s\n", dev->VolHdr.VolumeName,
- dev->print_name());
+ dcr->dev->VolHdr.VolumeName, dcr->dev->print_name());
+ Dmsg2(150, "Could not reserve volume %s on %s\n",
+ dcr->dev->VolHdr.VolumeName, dcr->dev->print_name());
status = VOL_NAME_ERROR;
goto bail_out;
}
@@ -279,13 +280,13 @@ ok_out:
* Reset blocksizes from volinfo to device as we set blocksize to
* DEFAULT_BLOCK_SIZE to read the label
*/
- dev->SetBlocksizes(dcr);
+ dcr->dev->SetBlocksizes(dcr);
return VOL_OK;
bail_out:
EmptyBlock(dcr->block);
- dev->rewind(dcr);
+ dcr->dev->rewind(dcr);
Dmsg1(150, "return %d\n", status);
return status;
}
@@ -623,7 +624,7 @@ static void CreateSessionLabel(DeviceControlRecord* dcr,
ser_uint32(jcr->JobErrors);
/* Added in VerNum 11 */
- ser_uint32(jcr->JobStatus);
+ ser_uint32(jcr->getJobStatus());
}
SerEnd(rec->data, SER_LENGTH_Session_Label);
rec->data_len = SerLength(rec->data);