Fix 0000437: when storing on multiple volumes via File backend, a data
block of 64k gets lost
This commit is contained in:
47
app-backup/bareos/files/bareos-14.2.2-dataloss.patch
Normal file
47
app-backup/bareos/files/bareos-14.2.2-dataloss.patch
Normal file
@@ -0,0 +1,47 @@
|
||||
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");
|
||||
Reference in New Issue
Block a user