[lvm-devel] master - libdm: parse more info from cache status
Zdenek Kabelac
zkabelac at fedoraproject.org
Thu Mar 10 17:40:00 UTC 2016
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=29d1533a497be922dc114524b83e926cbb63c34a
Commit: 29d1533a497be922dc114524b83e926cbb63c34a
Parent: 9918d95490d46dee12768494dcc8afe784dd19c0
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Wed Mar 9 18:00:57 2016 +0100
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Mar 10 18:38:53 2016 +0100
libdm: parse more info from cache status
Parse Fail/Error/need_check/ro status info from cache.
---
WHATS_NEW_DM | 1 +
libdm/libdevmapper.h | 8 +++++++-
libdm/libdm-targets.c | 18 ++++++++++++++++++
3 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index 4cdd97c..274d1b9 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
Version 1.02.120 -
=================================
+ Improve parsing of cache status and report Fail, Error, needs_check, ro.
Version 1.02.119 - 4th March 2016
=================================
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 0b7d5ba..ac79a57 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -361,8 +361,14 @@ struct dm_status_cache {
char **core_argv;
char *policy_name;
- int policy_argc;
+ int policy_argc;
char **policy_argv;
+
+ unsigned error : 1; /* detected error (switches to fail soon) */
+ unsigned fail : 1; /* all I/O fails */
+ unsigned needs_check : 1; /* metadata needs check */
+ unsigned read_only : 1; /* metadata may not be changed */
+ uint32_t reserved : 28;
};
int dm_get_status_cache(struct dm_pool *mem, const char *params,
diff --git a/libdm/libdm-targets.c b/libdm/libdm-targets.c
index 7428eba..bd6e5e2 100644
--- a/libdm/libdm-targets.c
+++ b/libdm/libdm-targets.c
@@ -194,6 +194,17 @@ int dm_get_status_cache(struct dm_pool *mem, const char *params,
if (!(s = dm_pool_zalloc(mem, sizeof(struct dm_status_cache))))
return_0;
+ if (strstr(params, "Error")) {
+ s->error = 1;
+ s->fail = 1; /* This is also I/O fail state */
+ goto out;
+ }
+
+ if (strstr(params, "Fail")) {
+ s->fail = 1;
+ goto out;
+ }
+
/* Read in args that have definitive placement */
if (sscanf(params,
" %" PRIu32
@@ -258,6 +269,13 @@ int dm_get_status_cache(struct dm_pool *mem, const char *params,
(dm_split_words(str, s->policy_argc, 0, s->policy_argv) != s->policy_argc)))
goto bad;
+ /* TODO: improve this parser */
+ if (strstr(p, " ro"))
+ s->read_only = 1;
+
+ if (strstr(p, " needs_check"))
+ s->needs_check = 1;
+out:
*status = s;
return 1;
More information about the lvm-devel
mailing list