All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Teigland <teigland@sourceware.org>
To: lvm-devel@redhat.com
Subject: main - scan: wipe filters when dropping scanned data
Date: Wed, 10 Feb 2021 21:43:30 +0000 (GMT)	[thread overview]
Message-ID: <20210210214330.E2C3D39C077A@sourceware.org> (raw)

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=c94d78f068653293e42f0fe815ddeef98406c666
Commit:        c94d78f068653293e42f0fe815ddeef98406c666
Parent:        f49bedc0295d4b038004adfda64fafcfa8b1d2c7
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Wed Feb 10 14:06:58 2021 -0600
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Wed Feb 10 15:34:45 2021 -0600

scan: wipe filters when dropping scanned data

Fix clearing persistent filter state when clearing all
the state from a label_scan.

label_scan reads devs and saves info in bcache, lvmcache,
and in the persistent filter.  In some uncommon cases, an
lvm command wants to clear all info from a prior label_scan,
and repeat label_scan from scratch.  In these cases, info
in lvmcache, bcache and the persistent filter all need to
be cleared before repeating label_scan.

By missing the persistent filter wiping, outdated persistent
filter info, from a prior label_scan, could cause lvm to
incorrectly filter devices that change between polling intervals.
(i.e. if the device changes in such a way that the filtering
results change.)

A case where lvm wants to do multiple label_scans is a
polling command (like lvconvert --merge), when lvmpolld
has been disabled, so that the command itself needs to
to do repeated polling checks.
---
 lib/label/label.c | 14 +-------------
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/lib/label/label.c b/lib/label/label.c
index 030d2c578..0fc832c08 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -707,19 +707,6 @@ static int _scan_list(struct cmd_context *cmd, struct dev_filter *f,
 		if (!rem_prefetches)
 			break;
 
-		/* FIXME: figure better solution to avoid opening DM we shouldn't open */
-		if (dm_is_dm_major(MAJOR(devl->dev->dev)) &&
-		    !device_is_usable(devl->dev, (struct dev_usable_check_params) {
-					.check_blocked = 1,
-					.check_suspended = ignore_suspended_devices(),
-					.check_reserved = 1,
-					.check_error_target = 1,
-				      })) {
-			log_debug_devs("Scan skips unusuable DM device %s.", dev_name(devl->dev));
-			dm_list_del(&devl->list);
-			continue;
-		}
-
 		if (!_in_bcache(devl->dev)) {
 			if (!_scan_dev_open(devl->dev)) {
 				log_debug_devs("Scan failed to open %s.", dev_name(devl->dev));
@@ -1432,6 +1419,7 @@ void label_scan_drop(struct cmd_context *cmd)
 		return;
 
 	while ((dev = dev_iter_get(cmd, iter))) {
+		cmd->filter->wipe(cmd, cmd->filter, dev, NULL);
 		if (_in_bcache(dev))
 			_scan_dev_close(dev);
 	}



                 reply	other threads:[~2021-02-10 21:43 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210210214330.E2C3D39C077A@sourceware.org \
    --to=teigland@sourceware.org \
    --cc=lvm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.