From 0b70507434b6532f7a6679403d17e9fe5c080b37 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 24 May 2011 13:36:57 +0000 Subject: [PATCH] Add and use dev_open_readonly and variations. --- WHATS_NEW | 1 + lib/config/config.c | 2 +- lib/device/dev-io.c | 15 +++++++++++++++ lib/device/device.h | 3 +++ lib/filters/filter.c | 2 +- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index af15c9d1d..735902660 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.86 - ================================= + Add and use dev_open_readonly and variations. Do not log a superfluous stack message when the lv is properly processed. Do not issue an error message when unable to remove .cache on read-only fs. Avoid memlock size mismatch by preallocating stdio line buffers. diff --git a/lib/config/config.c b/lib/config/config.c index 9fb2bf61d..1003073a1 100644 --- a/lib/config/config.c +++ b/lib/config/config.c @@ -295,7 +295,7 @@ int read_config_file(struct config_tree *cft) if (!(c->dev = dev_create_file(c->filename, NULL, NULL, 1))) return_0; - if (!dev_open_flags(c->dev, O_RDONLY, 0, 0)) { + if (!dev_open_readonly_buffered(c->dev)) { c->dev = 0; return_0; } diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c index 154b2cceb..16aad38c4 100644 --- a/lib/device/dev-io.c +++ b/lib/device/dev-io.c @@ -556,6 +556,21 @@ int dev_open(struct device *dev) return dev_open_flags(dev, flags, 1, 0); } +int dev_open_readonly(struct device *dev) +{ + return dev_open_flags(dev, O_RDONLY, 1, 0); +} + +int dev_open_readonly_buffered(struct device *dev) +{ + return dev_open_flags(dev, O_RDONLY, 0, 0); +} + +int dev_open_readonly_quiet(struct device *dev) +{ + return dev_open_flags(dev, O_RDONLY, 1, 1); +} + int dev_test_excl(struct device *dev) { int flags; diff --git a/lib/device/device.h b/lib/device/device.h index dc4d50ab3..8c32a03b4 100644 --- a/lib/device/device.h +++ b/lib/device/device.h @@ -74,6 +74,9 @@ int dev_discard_blocks(struct device *dev, uint64_t offset_bytes, uint64_t size_ int dev_open(struct device *dev); int dev_open_quiet(struct device *dev); int dev_open_flags(struct device *dev, int flags, int direct, int quiet); +int dev_open_readonly(struct device *dev); +int dev_open_readonly_buffered(struct device *dev); +int dev_open_readonly_quiet(struct device *dev); int dev_close(struct device *dev); int dev_close_immediate(struct device *dev); void dev_close_all(void); diff --git a/lib/filters/filter.c b/lib/filters/filter.c index 1c043fcdf..a9b99a538 100644 --- a/lib/filters/filter.c +++ b/lib/filters/filter.c @@ -147,7 +147,7 @@ static int _passes_lvm_type_device_filter(struct dev_filter *f __attribute__((un } /* Check it's accessible */ - if (!dev_open_flags(dev, O_RDONLY, 1, 1)) { + if (!dev_open_readonly_quiet(dev)) { log_debug("%s: Skipping: open failed", name); return 0; } -- 2.43.5