All of lore.kernel.org
 help / color / mirror / Atom feed
* master - lvmetad: more fixes related to bcache
@ 2018-04-23 13:52 David Teigland
  0 siblings, 0 replies; 2+ messages in thread
From: David Teigland @ 2018-04-23 13:52 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a9b0aa5c178a6d8bb708ed35f833c648f7437ae3
Commit:        a9b0aa5c178a6d8bb708ed35f833c648f7437ae3
Parent:        e351f8bc66d49fecaa0ab78f8413d50a4674604a
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Mar 9 11:39:12 2018 -0600
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Apr 20 11:22:48 2018 -0500

lvmetad: more fixes related to bcache

Need to open devs prior to bcache io.
---
 lib/label/label.c       |   25 +++++++++++++++++--------
 lib/metadata/metadata.c |   12 ++++++++++++
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/lib/label/label.c b/lib/label/label.c
index 9401067..14a7e90 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -515,7 +515,7 @@ static int _scan_list(struct dm_list *devs, int *failed)
 		bb = NULL;
 
 		if (!bcache_get(scan_bcache, devl->dev->bcache_fd, 0, 0, &bb)) {
-			log_error("Scan failed to read %s.", dev_name(devl->dev));
+			log_debug_devs("Scan failed to read %s.", dev_name(devl->dev));
 			scan_failed_count++;
 			scan_failed = 1;
 			lvmcache_del_dev(devl->dev);
@@ -525,7 +525,7 @@ static int _scan_list(struct dm_list *devs, int *failed)
 			ret = _process_block(devl->dev, bb, &is_lvm_device);
 
 			if (!ret && is_lvm_device) {
-				log_error("Scan failed to process %s", dev_name(devl->dev));
+				log_debug_devs("Scan failed to process %s", dev_name(devl->dev));
 				scan_failed_count++;
 				scan_failed = 1;
 				lvmcache_del_dev(devl->dev);
@@ -893,8 +893,11 @@ 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 fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_read_bytes %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_read_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
@@ -924,8 +927,11 @@ 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 fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_write_bytes %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_write_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
@@ -954,8 +960,11 @@ bool dev_write_zeros(struct device *dev, off_t start, size_t len)
 	}
 
 	if (dev->bcache_fd <= 0) {
-		log_error("dev_write_zeros %s with invalid fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_write_zeros %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_write_zeros(scan_bcache, dev->bcache_fd, start, len)) {
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 462c391..8cb06be 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -3809,6 +3809,18 @@ static struct volume_group *_vg_read(struct cmd_context *cmd,
 				release_vg(correct_vg);
 				return_NULL;
 			}
+
+			/*
+		 	 * When a command reads the vg from lvmetad, and then
+			 * writes the vg, the write path does some disk reads
+		 	 * of the devs.
+		 	 * FIXME: when a command is going to write the vg,
+		 	 * we should just read the vg from disk entirely
+		 	 * and skip reading it from lvmetad.
+		 	 */
+			dm_list_iterate_items(pvl, &correct_vg->pvs)
+				label_scan_open(pvl->pv->dev);
+
 		}
 
 		return correct_vg;



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* master - lvmetad: more fixes related to bcache
@ 2018-04-23 13:55 David Teigland
  0 siblings, 0 replies; 2+ messages in thread
From: David Teigland @ 2018-04-23 13:55 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a9b0aa5c178a6d8bb708ed35f833c648f7437ae3
Commit:        a9b0aa5c178a6d8bb708ed35f833c648f7437ae3
Parent:        e351f8bc66d49fecaa0ab78f8413d50a4674604a
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Mar 9 11:39:12 2018 -0600
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Apr 20 11:22:48 2018 -0500

lvmetad: more fixes related to bcache

Need to open devs prior to bcache io.
---
 lib/label/label.c       |   25 +++++++++++++++++--------
 lib/metadata/metadata.c |   12 ++++++++++++
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/lib/label/label.c b/lib/label/label.c
index 9401067..14a7e90 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -515,7 +515,7 @@ static int _scan_list(struct dm_list *devs, int *failed)
 		bb = NULL;
 
 		if (!bcache_get(scan_bcache, devl->dev->bcache_fd, 0, 0, &bb)) {
-			log_error("Scan failed to read %s.", dev_name(devl->dev));
+			log_debug_devs("Scan failed to read %s.", dev_name(devl->dev));
 			scan_failed_count++;
 			scan_failed = 1;
 			lvmcache_del_dev(devl->dev);
@@ -525,7 +525,7 @@ static int _scan_list(struct dm_list *devs, int *failed)
 			ret = _process_block(devl->dev, bb, &is_lvm_device);
 
 			if (!ret && is_lvm_device) {
-				log_error("Scan failed to process %s", dev_name(devl->dev));
+				log_debug_devs("Scan failed to process %s", dev_name(devl->dev));
 				scan_failed_count++;
 				scan_failed = 1;
 				lvmcache_del_dev(devl->dev);
@@ -893,8 +893,11 @@ 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 fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_read_bytes %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_read_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
@@ -924,8 +927,11 @@ 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 fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_write_bytes %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_write_bytes(scan_bcache, dev->bcache_fd, start, len, data)) {
@@ -954,8 +960,11 @@ bool dev_write_zeros(struct device *dev, off_t start, size_t len)
 	}
 
 	if (dev->bcache_fd <= 0) {
-		log_error("dev_write_zeros %s with invalid fd %d", dev_name(dev), dev->bcache_fd);
-		return false;
+		/* This is not often needed, perhaps only with lvmetad. */
+		if (!label_scan_open(dev)) {
+			log_error("dev_write_zeros %s cannot open dev", dev_name(dev));
+			return false;
+		}
 	}
 
 	if (!bcache_write_zeros(scan_bcache, dev->bcache_fd, start, len)) {
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 462c391..8cb06be 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -3809,6 +3809,18 @@ static struct volume_group *_vg_read(struct cmd_context *cmd,
 				release_vg(correct_vg);
 				return_NULL;
 			}
+
+			/*
+		 	 * When a command reads the vg from lvmetad, and then
+			 * writes the vg, the write path does some disk reads
+		 	 * of the devs.
+		 	 * FIXME: when a command is going to write the vg,
+		 	 * we should just read the vg from disk entirely
+		 	 * and skip reading it from lvmetad.
+		 	 */
+			dm_list_iterate_items(pvl, &correct_vg->pvs)
+				label_scan_open(pvl->pv->dev);
+
 		}
 
 		return correct_vg;



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-04-23 13:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-23 13:52 master - lvmetad: more fixes related to bcache David Teigland
2018-04-23 13:55 David Teigland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.