1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

libdm: parse more info from cache status

Parse Fail/Error/need_check/ro status info from cache.
This commit is contained in:
Zdenek Kabelac 2016-03-09 18:00:57 +01:00
parent 9918d95490
commit 29d1533a49
3 changed files with 26 additions and 1 deletions

View File

@ -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
=================================

View File

@ -363,6 +363,12 @@ struct dm_status_cache {
char *policy_name;
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,

View File

@ -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;