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

cmirrord now returns log name to kernel in CTR so it can be registered

Version 2 of the userspace log protocol accepts return information during the
DM_ULOG_CTR exchange.  The return information contains the name of the log
device that is being used (if there is one).  The kernel can then register the
device via 'dm_get_device'.  Amoung other things, this allows for userspace to
assemble a correct dependency tree of devices - critical for LVM handling of
suspend/resume calls.

Also, update dm-log-userspace.h to match the kernel header associated with
this protocol change.  (Includes a version inc.)
This commit is contained in:
Jonathan Earl Brassow 2011-10-14 14:18:49 +00:00
parent 6635332e1b
commit 3b032963d5
3 changed files with 18 additions and 6 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.89 - Version 2.02.89 -
================================== ==================================
Log dev name now returned to kernel for registering during cmirror CTR.
Fix lv_info open_count test for disabled verify_udev_operations (2.02.86). Fix lv_info open_count test for disabled verify_udev_operations (2.02.86).
Simplify code for lvm worker thread in clvmd. Simplify code for lvm worker thread in clvmd.
Use pthread_barrier to synchronize clvmd threads at startup. Use pthread_barrier to synchronize clvmd threads at startup.

View File

@ -597,7 +597,10 @@ static int clog_ctr(struct dm_ulog_request *rq)
/* We join the CPG when we resume */ /* We join the CPG when we resume */
/* No returning data */ /* No returning data */
rq->data_size = 0; if ((rq->version > 1) && !strcmp(argv[0], "clustered-disk"))
rq->data_size = sprintf(rq->data, "%s", argv[1]) + 1;
else
rq->data_size = 0;
if (r) { if (r) {
LOG_ERROR("Failed to create cluster log (%s)", rq->uuid); LOG_ERROR("Failed to create cluster log (%s)", rq->uuid);

View File

@ -52,15 +52,20 @@
* Payload-to-userspace: * Payload-to-userspace:
* A single string containing all the argv arguments separated by ' 's * A single string containing all the argv arguments separated by ' 's
* Payload-to-kernel: * Payload-to-kernel:
* None. ('data_size' in the dm_ulog_request struct should be 0.) * The name of the device that is used as the backing store for the log
* data. 'dm_get_device' will be called on this device. ('dm_put_device'
* will be called on this device automatically after calling DM_ULOG_DTR.)
* If there is no device needed for log data, 'data_size' in the
* dm_ulog_request struct should be 0.
* *
* The UUID contained in the dm_ulog_request structure is the reference that * The UUID contained in the dm_ulog_request structure is the reference that
* will be used by all request types to a specific log. The constructor must * will be used by all request types to a specific log. The constructor must
* record this assotiation with instance created. * record this assotiation with the instance created.
* *
* When the request has been processed, user-space must return the * When the request has been processed, user-space must return the
* dm_ulog_request to the kernel - setting the 'error' field and * dm_ulog_request to the kernel - setting the 'error' field, filling the
* 'data_size' appropriately. * data field with the log device if necessary, and setting 'data_size'
* appropriately.
*/ */
#define DM_ULOG_CTR 1 #define DM_ULOG_CTR 1
@ -377,8 +382,11 @@
* dm_ulog_request or a change in the way requests are * dm_ulog_request or a change in the way requests are
* issued/handled. Changes are outlined here: * issued/handled. Changes are outlined here:
* version 1: Initial implementation * version 1: Initial implementation
* version 2: DM_ULOG_CTR allowed to return a string containing a
* device name that is to be registered with DM via
* 'dm_get_device'.
*/ */
#define DM_ULOG_REQUEST_VERSION 1 #define DM_ULOG_REQUEST_VERSION 2
struct dm_ulog_request { struct dm_ulog_request {
/* /*