[lvm-devel] dev-prajnoha-condout - condout: make it possible to use condition using fields not reported on current output
Peter Rajnoha
prajnoha at fedoraproject.org
Fri Apr 25 15:04:44 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=934701da9747613002bd3a9c51f16a97ae59e22e
Commit: 934701da9747613002bd3a9c51f16a97ae59e22e
Parent: 862c2a73ad04b6c57b376a9582344f918e3e81c1
Author: Peter Rajnoha <prajnoha at redhat.com>
AuthorDate: Fri Apr 25 17:04:11 2014 +0200
Committer: Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Fri Apr 25 17:04:11 2014 +0200
condout: make it possible to use condition using fields not reported on current output
---
lib/report/report.c | 2 +-
libdm/libdevmapper.h | 3 ++-
libdm/libdm-report.c | 6 +++++-
tools/dmsetup.c | 3 ++-
4 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/lib/report/report.c b/lib/report/report.c
index e18994c..2d48ec6 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1266,7 +1266,7 @@ void *report_init(struct cmd_context *cmd, const char *format, const char *keys,
if (field_prefixes)
dm_report_set_output_field_name_prefix(rh, "lvm2_");
- if (condition && !dm_report_set_output_condition(rh, condition)) {
+ if (condition && !dm_report_set_output_condition(rh, report_type, condition)) {
dm_report_free(rh);
rh = NULL;
}
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 450a797..fceec47 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -1638,7 +1638,8 @@ struct dm_report *dm_report_init(uint32_t *report_types,
const char *sort_keys,
void *private_data);
int dm_report_object(struct dm_report *rh, void *object);
-int dm_report_set_output_condition(struct dm_report *rh, const char *condition);
+int dm_report_set_output_condition(struct dm_report *rh, uint32_t *report_types,
+ const char *condition);
int dm_report_output(struct dm_report *rh);
void dm_report_free(struct dm_report *rh);
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index 2d7daf2..3566c1d 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -1173,6 +1173,7 @@ static struct field_condition *_create_field_condition(struct dm_report *rh,
if (!found) {
if (!(found = _add_field(rh, field_num, FLD_HIDDEN)))
return NULL;
+ rh->report_types |= rh->fields[field_num].type;
}
/*
@@ -1490,7 +1491,8 @@ error:
return NULL;
}
-int dm_report_set_output_condition(struct dm_report *rh, const char *condition)
+int dm_report_set_output_condition(struct dm_report *rh, uint32_t *report_types,
+ const char *condition)
{
struct condition_node *root = NULL;
const char *fin, *next;
@@ -1518,6 +1520,8 @@ int dm_report_set_output_condition(struct dm_report *rh, const char *condition)
goto error;
}
+ if (report_types)
+ *report_types = rh->report_types;
rh->condition_root = root;
return 1;
error:
diff --git a/tools/dmsetup.c b/tools/dmsetup.c
index acb36db..bae6291 100644
--- a/tools/dmsetup.c
+++ b/tools/dmsetup.c
@@ -2934,7 +2934,8 @@ static int _report_init(const struct command *cmd)
dm_report_set_output_field_name_prefix(_report, "dm_");
if (_switches[CONDITION_ARG] &&
- !dm_report_set_output_condition(_report, _string_args[CONDITION_ARG])) {
+ !dm_report_set_output_condition(_report, &_report_type,
+ _string_args[CONDITION_ARG])) {
err("Failed to set report output condition.");
goto out;
}
More information about the lvm-devel
mailing list