smoverlay/app-backup/bareos/files/bareos-14.2.2-dataloss.patch

48 lines
1.7 KiB
Diff

From 263240eaa911563a8468ecdaf7d4957201b41426 Mon Sep 17 00:00:00 2001
From: Marco van Wieringen <marco.van.wieringen@bareos.com>
Date: Fri, 13 Mar 2015 18:32:58 +0100
Subject: [PATCH] Don't trash dcr->rec while doing autolabeling.
Fixes #437: When storing on multiple volumes via File backend, a data
block of 64k gets lost
---
src/stored/label.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/stored/label.c b/src/stored/label.c
index deeb169..4cbfb64 100644
--- a/src/stored/label.c
+++ b/src/stored/label.c
@@ -341,6 +341,7 @@ static bool write_volume_label_to_block(DCR *dcr)
bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName,
const char *PoolName, bool relabel)
{
+ DEV_RECORD *rec;
JCR *jcr = dcr->jcr;
DEVICE *dev = dcr->dev;
DEV_BLOCK *block = dcr->block;
@@ -418,15 +419,18 @@ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName,
goto bail_out;
}
- create_volume_label_record(dcr, dev, dcr->rec);
- dcr->rec->Stream = 0;
- dcr->rec->maskedStream = 0;
+ rec = new_record();
+ create_volume_label_record(dcr, dev, rec);
+ rec->Stream = 0;
+ rec->maskedStream = 0;
- if (!write_record_to_block(dcr, dcr->rec)) {
+ if (!write_record_to_block(dcr, rec)) {
Dmsg2(130, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg());
+ free_record(rec);
goto bail_out;
} else {
- Dmsg2(130, "Wrote label of %d bytes to %s\n", dcr->rec->data_len, dev->print_name());
+ Dmsg2(130, "Wrote label of %d bytes to %s\n", rec->data_len, dev->print_name());
+ free_record(rec);
}
Dmsg0(130, "Call write_block_to_dev()\n");