diff options
author | Peter Rajnoha <prajnoha@redhat.com> | 2012-06-25 11:34:21 +0200 |
---|---|---|
committer | Peter Rajnoha <prajnoha@redhat.com> | 2012-06-25 11:55:37 +0200 |
commit | c8591b2ac7c99ea43e7f94f3dfb183019c2fed6e (patch) | |
tree | 150cac280f9e29535c1c35d07d94bcda5eeb9142 | |
parent | 6fc4c99b2fc745b0167520f9395e9e2e39c162e8 (diff) | |
download | lvm2-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_NEW | 1 | ||||
-rw-r--r-- | lib/device/dev-io.c | 2 |
2 files changed, 2 insertions, 1 deletions
@@ -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) { |