From c8591b2ac7c99ea43e7f94f3dfb183019c2fed6e Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Mon, 25 Jun 2012 11:34:21 +0200 Subject: [PATCH] dev-io: open device read-only to obtain readahead value There's no need to have the device open RW while obtaining the readahead value. The RW open used before caused the CHANGE udev event to be generated if the WATCH udev rule was set for the underlying device (and that is normally the case both for non-dm and dm devices by default). This did not cause any problems before since we were not interested in *underlying* devices. However, with upcoming changes (autoactivation), we're watching for events on underlying devices marked as PVs and such a spurious event could cause the autoactivation code to be triggered. So when trying to deactivate the volume, we could end up with immediate activation just after that because of the CHANGE event originated in the WATCH udev rule since the underlying device was open RW during the deactivation process. Though maybe a better solution would be to completely filter such spurious events out of the autoactivation process somehow, it's still useful if there are as least spurious events generated as possible in the system itself. --- WHATS_NEW | 1 + lib/device/dev-io.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW b/WHATS_NEW index 90157c83f..9479d6d6e 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.97 - =============================== + Open device read-only to obtain readahead value. Fix lvconvert error path NULL pointer dereference. Check for create_instance() fail in pvscan_lvmetad_single(). Use 64bit math for reserved memory and stack. diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c index eecc759e2..3bb9d65d8 100644 --- a/lib/device/dev-io.c +++ b/lib/device/dev-io.c @@ -282,7 +282,7 @@ static int _dev_read_ahead_dev(struct device *dev, uint32_t *read_ahead) return 1; } - if (!dev_open(dev)) + if (!dev_open_readonly(dev)) return_0; if (ioctl(dev->fd, BLKRAGET, &read_ahead_long) < 0) { -- 2.43.5