summaryrefslogtreecommitdiffstats
path: root/lib
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 /lib
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/device/dev-io.c2
1 files changed, 1 insertions, 1 deletions
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) {