mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Add lvm functions for sending messages.
Functions are currently only needed for thin provissioning.
This commit is contained in:
parent
e0ea24be1f
commit
a00cb3a6b0
@ -1,5 +1,6 @@
|
||||
Version 2.02.89 -
|
||||
==================================
|
||||
Introduce lv_send_message and dev_manager_send_message.
|
||||
Introduce revert_lv for better pvmove cleanup.
|
||||
Replace incomplete pvmove activation failure recovery code with a message.
|
||||
Abort if _finish_pvmove suspend_lvs fails instead of cleaning up incompletely.
|
||||
|
@ -215,6 +215,10 @@ int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
int lv_send_message(const struct logical_volume *lv, const char *message)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int pv_uses_vg(struct physical_volume *pv,
|
||||
struct volume_group *vg)
|
||||
{
|
||||
@ -1643,6 +1647,55 @@ int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv)
|
||||
return r;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// FIXME: Remove this - example of supported messages thin pool
|
||||
"create_thin %u", dev_id
|
||||
"create_snap %u", dev_id
|
||||
"delete %u", dev_id
|
||||
"trim %u %" PRIu64, dev_id, new_size_sec
|
||||
"set_transaction_id %" PRIu64 " %" PRIu64, cur_id, new_id
|
||||
#endif
|
||||
|
||||
int lv_send_message(const struct logical_volume *lv, const char *msg_format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
struct dev_manager *dm;
|
||||
const size_t buf_size = 128;
|
||||
char *buf = NULL;
|
||||
int r = 0, pr;
|
||||
|
||||
if (!activation())
|
||||
return 0;
|
||||
|
||||
if (!(dm = dev_manager_create(lv->vg->cmd, lv->vg->name, 1)))
|
||||
return_0;
|
||||
|
||||
if (!(buf = dm_malloc(buf_size))) {
|
||||
log_error("Failed to allocate message buffer.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
va_start(ap, msg_format);
|
||||
pr = vsnprintf(buf, buf_size, msg_format, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (pr < 0 || pr >= buf_size) {
|
||||
log_error("Failed to create message in reserved buffer size "
|
||||
"%" PRIsize_t, buf_size);
|
||||
goto out;
|
||||
}
|
||||
|
||||
log_debug("Sending message '%s' to LV %s/%s", buf, lv->vg->name, lv->name);
|
||||
|
||||
if (!(r = dev_manager_send_message(dm, lv, buf)))
|
||||
stack;
|
||||
out:
|
||||
dm_free(buf);
|
||||
dev_manager_destroy(dm);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Does PV use VG somewhere in its construction?
|
||||
* Returns 1 on failure.
|
||||
|
@ -71,6 +71,8 @@ int lv_activate_with_filter(struct cmd_context *cmd, const char *lvid_s,
|
||||
int lv_deactivate(struct cmd_context *cmd, const char *lvid_s);
|
||||
|
||||
int lv_mknodes(struct cmd_context *cmd, const struct logical_volume *lv);
|
||||
__attribute__ ((format(printf, 2, 3)))
|
||||
int lv_send_message(const struct logical_volume *lv, const char *msg_format, ...);
|
||||
|
||||
/*
|
||||
* Returns 1 if info structure has been populated, else 0.
|
||||
|
@ -876,6 +876,34 @@ int dev_manager_mknodes(const struct logical_volume *lv)
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Send message
|
||||
*/
|
||||
int dev_manager_send_message(struct dev_manager *dm, const struct logical_volume *lv, const char *message)
|
||||
{
|
||||
const char *name;
|
||||
struct dm_task *dmt;
|
||||
int r = 0;
|
||||
|
||||
if (!(name = dm_build_dm_name(dm->mem, lv->vg->name, lv->name, NULL)))
|
||||
return_0;
|
||||
|
||||
if (!(dmt = _setup_task(name, NULL, NULL, DM_DEVICE_TARGET_MSG, 0, 0)))
|
||||
return_0;
|
||||
|
||||
if (!dm_task_set_message(dmt, message))
|
||||
goto_out;
|
||||
|
||||
if (!dm_task_run(dmt))
|
||||
goto_out;
|
||||
|
||||
r = 1;
|
||||
out:
|
||||
dm_task_destroy(dmt);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static uint16_t _get_udev_flags(struct dev_manager *dm, struct logical_volume *lv,
|
||||
const char *layer)
|
||||
{
|
||||
|
@ -62,6 +62,7 @@ int dev_manager_deactivate(struct dev_manager *dm, struct logical_volume *lv);
|
||||
int dev_manager_transient(struct dev_manager *dm, struct logical_volume *lv) __attribute__((nonnull(1, 2)));
|
||||
|
||||
int dev_manager_mknodes(const struct logical_volume *lv);
|
||||
int dev_manager_send_message(struct dev_manager *dm, const struct logical_volume *lv, const char *message);
|
||||
|
||||
/*
|
||||
* Put the desired changes into effect.
|
||||
|
Loading…
Reference in New Issue
Block a user