1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-18 10:04:20 +03:00

Thin use helper function

Fix some minor outstading issue from thin plugin introduction -
Call dmeventd_lvm2_exit() in failpath for registration.
Add some missing '\n' in syslog messages.
This commit is contained in:
Zdenek Kabelac 2011-12-22 15:57:29 +00:00
parent 8527b92738
commit ed1289140e

View File

@ -42,14 +42,13 @@ struct dso_state {
int data_percent_check; int data_percent_check;
uint64_t known_meta_size; uint64_t known_meta_size;
uint64_t known_data_size; uint64_t known_data_size;
char *vg, *lv, *layer;
char cmd_str[1024]; char cmd_str[1024];
}; };
static int _extend(struct dso_state *state) static int _extend(struct dso_state *state)
{ {
#if THIN_DEBUG #if THIN_DEBUG
syslog(LOG_INFO, "dmeventd executes: %s.", state->cmd_str); syslog(LOG_INFO, "dmeventd executes: %s.\n", state->cmd_str);
#endif #endif
return (dmeventd_lvm2_run(state->cmd_str) == ECMD_PROCESSED); return (dmeventd_lvm2_run(state->cmd_str) == ECMD_PROCESSED);
} }
@ -159,7 +158,7 @@ void process_event(struct dm_task *dmt,
dm_get_next_target(dmt, next, &start, &length, &target_type, &params); dm_get_next_target(dmt, next, &start, &length, &target_type, &params);
if (!target_type || (strcmp(target_type, "thin-pool") != 0)) { if (!target_type || (strcmp(target_type, "thin-pool") != 0)) {
syslog(LOG_ERR, "Invalid targe type.\n"); syslog(LOG_ERR, "Invalid target type.\n");
goto out; goto out;
} }
@ -244,18 +243,19 @@ int register_device(const char *device,
struct dm_pool *statemem = NULL; struct dm_pool *statemem = NULL;
struct dso_state *state; struct dso_state *state;
if (!dmeventd_lvm2_init() || if (!dmeventd_lvm2_init())
!(statemem = dm_pool_create("thin_pool_state", 2048)) || goto bad;
if (!(statemem = dm_pool_create("thin_pool_state", 2048)) ||
!(state = dm_pool_zalloc(statemem, sizeof(*state))) || !(state = dm_pool_zalloc(statemem, sizeof(*state))) ||
!dm_split_lvm_name(statemem, device, &state->vg, &state->lv, !dmeventd_lvm2_command(statemem, state->cmd_str,
&state->layer) || sizeof(state->cmd_str),
(dm_snprintf(state->cmd_str, sizeof(state->cmd_str), "lvextend --use-policies",
"lvextend --use-policies %s/%s", state->vg, state->lv) < 0)) { device)) {
syslog(LOG_ERR, "Failed to monitor thin %s.\n", device);
if (statemem) if (statemem)
dm_pool_destroy(statemem); dm_pool_destroy(statemem);
dmeventd_lvm2_exit();
return 0; goto bad;
} }
state->mem = statemem; state->mem = statemem;
@ -266,6 +266,10 @@ int register_device(const char *device,
syslog(LOG_INFO, "Monitoring thin %s.\n", device); syslog(LOG_INFO, "Monitoring thin %s.\n", device);
return 1; return 1;
bad:
syslog(LOG_ERR, "Failed to monitor thin %s.\n", device);
return 0;
} }
int unregister_device(const char *device, int unregister_device(const char *device,
@ -276,10 +280,9 @@ int unregister_device(const char *device,
{ {
struct dso_state *state = *private; struct dso_state *state = *private;
syslog(LOG_INFO, "No longer monitoring thin %s.\n", device);
dm_pool_destroy(state->mem); dm_pool_destroy(state->mem);
dmeventd_lvm2_exit(); dmeventd_lvm2_exit();
syslog(LOG_INFO, "No longer monitoring thin %s.\n", device);
return 1; return 1;
} }