summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2020-09-16 13:54:16 -0500
committerDavid Teigland <teigland@redhat.com>2020-09-16 13:54:16 -0500
commit491eb258327ca07d1fe98e8bb344f63e14d97c0a (patch)
tree51cb81d155a6a3b3e40f605bd3e7cca75aaaaaec
parent37bcd7ce840c7c18d41e9e308aba2be7b33e7eec (diff)
downloadlvm2-491eb258327ca07d1fe98e8bb344f63e14d97c0a.tar.gz
label: cleanup set_byte error exit
-rw-r--r--lib/label/label.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/label/label.c b/lib/label/label.c
index ba3b1f9c7..3b2011f6e 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -1519,6 +1519,8 @@ bool dev_write_zeros(struct device *dev, uint64_t start, size_t len)
bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
{
+ bool rv;
+
if (test_mode())
return true;
@@ -1547,25 +1549,30 @@ bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
dev_set_last_byte(dev, start + len);
- if ((!val && !bcache_zero_bytes(scan_bcache, dev->bcache_fd, start, len)) ||
- !bcache_set_bytes(scan_bcache, dev->bcache_fd, start, len, val)) {
- log_error("Error writing device %s at %llu length %u.",
+ if (!val)
+ rv = bcache_zero_bytes(scan_bcache, dev->bcache_fd, start, len);
+ else
+ rv = bcache_set_bytes(scan_bcache, dev->bcache_fd, start, len, val);
+
+ if (!rv) {
+ log_error("Error writing device value %s at %llu length %u.",
dev_name(dev), (unsigned long long)start, (uint32_t)len);
- dev_unset_last_byte(dev);
- label_scan_invalidate(dev);
- return false;
+ goto fail;
}
if (!bcache_flush(scan_bcache)) {
log_error("Error writing device %s at %llu length %u.",
dev_name(dev), (unsigned long long)start, (uint32_t)len);
- dev_unset_last_byte(dev);
- label_scan_invalidate(dev);
- return false;
+ goto fail;
}
dev_unset_last_byte(dev);
return true;
+
+fail:
+ dev_unset_last_byte(dev);
+ label_scan_invalidate(dev);
+ return false;
}
void dev_set_last_byte(struct device *dev, uint64_t offset)