[lvm-devel] master - scan: invalidate bcache for dev after errors

David Teigland teigland at sourceware.org
Mon Apr 23 13:55:42 UTC 2018


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=da2b155a9da4c4c9caf502b87ad263de6e678b30
Commit:        da2b155a9da4c4c9caf502b87ad263de6e678b30
Parent:        4331182964e37ad75690007f5f874f2606944a34
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Tue Feb 27 15:03:56 2018 -0600
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Fri Apr 20 11:22:47 2018 -0500

scan: invalidate bcache for dev after errors

If there are errors reading or writing dev,
invalidate bcache for it.
---
 lib/label/label.c |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/lib/label/label.c b/lib/label/label.c
index 88001a9..0514ddf 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -871,11 +871,16 @@ bool dev_read_bytes(struct device *dev, off_t start, size_t len, void *data)
 	}
 
 	if (dev->bcache_fd <= 0) {
-		log_error("dev_read_bytes %s with invalid bcache_fd", dev_name(dev));
+		log_error("dev_read_bytes %s with invalid fd %d", dev_name(dev), dev->bcache_fd);
 		return false;
 	}
 
-	return bcache_read_bytes(scan_bcache, dev->bcache_fd, start, len, data);
+	if (!bcache_read_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
+		label_scan_invalidate(dev);
+		return false;
+	}
+	return true;
+
 }
 
 bool dev_write_bytes(struct device *dev, off_t start, size_t len, void *data)
@@ -895,11 +900,15 @@ bool dev_write_bytes(struct device *dev, off_t start, size_t len, void *data)
 	}
 
 	if (dev->bcache_fd <= 0) {
-		log_error("dev_write_bytes %s with invalid bcache_fd", dev_name(dev));
+		log_error("dev_write_bytes %s with invalid fd %d", dev_name(dev), dev->bcache_fd);
 		return false;
 	}
 
-	return bcache_write_bytes(scan_bcache, dev->bcache_fd, start, len, data);
+	if (!bcache_write_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
+		label_scan_invalidate(dev);
+		return false;
+	}
+	return true;
 }
 
 bool dev_write_zeros(struct device *dev, off_t start, size_t len)
@@ -919,10 +928,14 @@ bool dev_write_zeros(struct device *dev, off_t start, size_t len)
 	}
 
 	if (dev->bcache_fd <= 0) {
-		log_error("dev_write_bytes %s with invalid bcache_fd", dev_name(dev));
+		log_error("dev_write_bytes %s with invalid fd %d", dev_name(dev), dev->bcache_fd);
 		return false;
 	}
 
-	return bcache_write_zeros(scan_bcache, dev->bcache_fd, start, len);
+	if (!bcache_write_zeros(scan_bcache, dev->bcache_fd, start, len)) {
+		label_scan_invalidate(dev);
+		return false;
+	}
+	return true;
 }
 




More information about the lvm-devel mailing list