diff options
Diffstat (limited to 'core/src/stored/label.cc')
-rw-r--r-- | core/src/stored/label.cc | 103 |
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); |