From c954b73149f992c1a29c6ce5abc8ac4b7ecaf4aa Mon Sep 17 00:00:00 2001 From: Jonathan Earl Brassow Date: Fri, 14 Oct 2011 14:18:49 +0000 Subject: [PATCH] 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.) --- WHATS_NEW | 1 + daemons/cmirrord/functions.c | 5 ++++- libdm/misc/dm-log-userspace.h | 18 +++++++++++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index ec5f02380..795a5927d 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ 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). Simplify code for lvm worker thread in clvmd. Use pthread_barrier to synchronize clvmd threads at startup. diff --git a/daemons/cmirrord/functions.c b/daemons/cmirrord/functions.c index 192ab40ea..c83e2b587 100644 --- a/daemons/cmirrord/functions.c +++ b/daemons/cmirrord/functions.c @@ -597,7 +597,10 @@ static int clog_ctr(struct dm_ulog_request *rq) /* We join the CPG when we resume */ /* 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) { LOG_ERROR("Failed to create cluster log (%s)", rq->uuid); diff --git a/libdm/misc/dm-log-userspace.h b/libdm/misc/dm-log-userspace.h index b723e355d..331793867 100644 --- a/libdm/misc/dm-log-userspace.h +++ b/libdm/misc/dm-log-userspace.h @@ -52,15 +52,20 @@ * Payload-to-userspace: * A single string containing all the argv arguments separated by ' 's * 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 * 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 - * dm_ulog_request to the kernel - setting the 'error' field and - * 'data_size' appropriately. + * dm_ulog_request to the kernel - setting the 'error' field, filling the + * data field with the log device if necessary, and setting 'data_size' + * appropriately. */ #define DM_ULOG_CTR 1 @@ -377,8 +382,11 @@ * dm_ulog_request or a change in the way requests are * issued/handled. Changes are outlined here: * 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 { /* -- 2.43.5