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

Remove dmeventd mirror status line word limit

This commit is contained in:
Alasdair Kergon 2007-01-11 19:52:06 +00:00
parent 3b007b270d
commit 65e635b685
3 changed files with 75 additions and 74 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.18 -
====================================
Remove dmeventd mirror status line word limit.
Use CFLAGS when linking so mixed sparc builds can supply -m64.
Prevent permission changes on active mirrors.
Print warning instead of error message if lvconvert cannot zero volume.

View File

@ -54,54 +54,51 @@ static pthread_mutex_t _event_mutex = PTHREAD_MUTEX_INITIALIZER;
static int _get_mirror_event(char *params)
{
int i, r = ME_INSYNC;
#define MAX_ARGS 30 /* should support at least 8-way mirrors */
/* FIXME Remove unnecessary limit. It tells you how many devices there are - use it! */
char *args[MAX_ARGS];
char **args = NULL;
char *dev_status_str;
char *log_status_str;
char *sync_str;
char *p;
int log_argc, num_devs, num_failures=0;
/* FIXME Remove unnecessary limit - get num_devs here */
if (MAX_ARGS <= dm_split_words(params, MAX_ARGS, 0, args)) {
syslog(LOG_ERR, "Unable to split mirror parameters: Arg list too long");
return -E2BIG; /* FIXME Why? Unused */
}
int log_argc, num_devs;
/*
* Unused: 0 409600 mirror
* Used : 2 253:4 253:5 400/400 1 AA 3 cluster 253:3 A
*/
num_devs = atoi(args[0]);
*/
/* FIXME *Now* split rest of args */
/* number of devices */
if (!dm_split_words(params, 1, 0, &p))
goto out_parse;
dev_status_str = args[3 + num_devs];
log_argc = atoi(args[4 + num_devs]);
log_status_str = args[4 + num_devs + log_argc];
sync_str = args[1 + num_devs];
num_devs = atoi(p);
p += strlen(p) + 1;
/* devices names + max log parameters */
args = dm_malloc((num_devs + 8) * sizeof(char *));
if (!args || dm_split_words(p, num_devs + 8, 0, args) < num_devs)
goto out_parse;
dev_status_str = args[2 + num_devs];
log_argc = atoi(args[3 + num_devs]);
log_status_str = args[3 + num_devs + log_argc];
sync_str = args[num_devs];
/* Check for bad mirror devices */
for (i = 0; i < num_devs; i++)
if (dev_status_str[i] == 'D') {
syslog(LOG_ERR, "Mirror device, %s, has failed.\n", args[i+1]);
num_failures++;
syslog(LOG_ERR, "Mirror device, %s, has failed.\n", args[i]);
r = ME_FAILURE;
}
/* Check for bad log device */
if (log_status_str[0] == 'D') {
/* Check for bad disk log device */
if (log_argc > 1 && log_status_str[0] == 'D') {
syslog(LOG_ERR, "Log device, %s, has failed.\n",
args[3 + num_devs + log_argc]);
num_failures++;
args[2 + num_devs + log_argc]);
r = ME_FAILURE;
}
if (num_failures) {
r = ME_FAILURE;
if (r == ME_FAILURE)
goto out;
}
p = strstr(sync_str, "/");
if (p) {
@ -109,16 +106,19 @@ static int _get_mirror_event(char *params)
if (strcmp(sync_str, p+1))
r = ME_IGNORE;
p[0] = '/';
} else {
/*
* How the hell did we get this?
* Might mean all our parameters are screwed.
*/
syslog(LOG_ERR, "Unable to parse sync string.");
r = ME_IGNORE;
}
out:
} else
goto out_parse;
out:
if (args)
dm_free(args);
return r;
out_parse:
if (args)
dm_free(args);
syslog(LOG_ERR, "Unable to parse mirror status string.");
return ME_IGNORE;
}
static void _temporary_log_fn(int level, const char *file,

View File

@ -54,54 +54,51 @@ static pthread_mutex_t _event_mutex = PTHREAD_MUTEX_INITIALIZER;
static int _get_mirror_event(char *params)
{
int i, r = ME_INSYNC;
#define MAX_ARGS 30 /* should support at least 8-way mirrors */
/* FIXME Remove unnecessary limit. It tells you how many devices there are - use it! */
char *args[MAX_ARGS];
char **args = NULL;
char *dev_status_str;
char *log_status_str;
char *sync_str;
char *p;
int log_argc, num_devs, num_failures=0;
/* FIXME Remove unnecessary limit - get num_devs here */
if (MAX_ARGS <= dm_split_words(params, MAX_ARGS, 0, args)) {
syslog(LOG_ERR, "Unable to split mirror parameters: Arg list too long");
return -E2BIG; /* FIXME Why? Unused */
}
int log_argc, num_devs;
/*
* Unused: 0 409600 mirror
* Used : 2 253:4 253:5 400/400 1 AA 3 cluster 253:3 A
*/
num_devs = atoi(args[0]);
*/
/* FIXME *Now* split rest of args */
/* number of devices */
if (!dm_split_words(params, 1, 0, &p))
goto out_parse;
dev_status_str = args[3 + num_devs];
log_argc = atoi(args[4 + num_devs]);
log_status_str = args[4 + num_devs + log_argc];
sync_str = args[1 + num_devs];
num_devs = atoi(p);
p += strlen(p) + 1;
/* devices names + max log parameters */
args = dm_malloc((num_devs + 8) * sizeof(char *));
if (!args || dm_split_words(p, num_devs + 8, 0, args) < num_devs)
goto out_parse;
dev_status_str = args[2 + num_devs];
log_argc = atoi(args[3 + num_devs]);
log_status_str = args[3 + num_devs + log_argc];
sync_str = args[num_devs];
/* Check for bad mirror devices */
for (i = 0; i < num_devs; i++)
if (dev_status_str[i] == 'D') {
syslog(LOG_ERR, "Mirror device, %s, has failed.\n", args[i+1]);
num_failures++;
syslog(LOG_ERR, "Mirror device, %s, has failed.\n", args[i]);
r = ME_FAILURE;
}
/* Check for bad log device */
if (log_status_str[0] == 'D') {
/* Check for bad disk log device */
if (log_argc > 1 && log_status_str[0] == 'D') {
syslog(LOG_ERR, "Log device, %s, has failed.\n",
args[3 + num_devs + log_argc]);
num_failures++;
args[2 + num_devs + log_argc]);
r = ME_FAILURE;
}
if (num_failures) {
r = ME_FAILURE;
if (r == ME_FAILURE)
goto out;
}
p = strstr(sync_str, "/");
if (p) {
@ -109,16 +106,19 @@ static int _get_mirror_event(char *params)
if (strcmp(sync_str, p+1))
r = ME_IGNORE;
p[0] = '/';
} else {
/*
* How the hell did we get this?
* Might mean all our parameters are screwed.
*/
syslog(LOG_ERR, "Unable to parse sync string.");
r = ME_IGNORE;
}
out:
} else
goto out_parse;
out:
if (args)
dm_free(args);
return r;
out_parse:
if (args)
dm_free(args);
syslog(LOG_ERR, "Unable to parse mirror status string.");
return ME_IGNORE;
}
static void _temporary_log_fn(int level, const char *file,