summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2012-06-25 11:34:21 +0200
committerPeter Rajnoha <prajnoha@redhat.com>2012-06-25 11:55:37 +0200
commitc8591b2ac7c99ea43e7f94f3dfb183019c2fed6e (patch)
tree150cac280f9e29535c1c35d07d94bcda5eeb9142
parent6fc4c99b2fc745b0167520f9395e9e2e39c162e8 (diff)
downloadlvm2-c8591b2ac7c99ea43e7f94f3dfb183019c2fed6e.tar.gz
lvm2-c8591b2ac7c99ea43e7f94f3dfb183019c2fed6e.tar.xz
lvm2-c8591b2ac7c99ea43e7f94f3dfb183019c2fed6e.zip
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.
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/device/dev-io.c2
2 files changed, 2 insertions, 1 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 90157c83..9479d6d6 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 eecc759e..3bb9d65d 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) {