[lvm-devel] stable-2.02 - label: cleanup set_byte error exit

Zdenek Kabelac zkabelac at sourceware.org
Sun Oct 18 21:02:39 UTC 2020


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e94e0cd0206044780bdde19b833d818da8f3f651
Commit:        e94e0cd0206044780bdde19b833d818da8f3f651
Parent:        35104f7ba5c5318b059ed0fd76f47fdd1c04285b
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Wed Sep 16 13:54:16 2020 -0500
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Sun Oct 18 21:28:13 2020 +0200

label: cleanup set_byte error exit

---
 lib/label/label.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/lib/label/label.c b/lib/label/label.c
index 065da1282..e05b18a9e 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -1414,6 +1414,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;
 
@@ -1444,25 +1446,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)




More information about the lvm-devel mailing list