From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20055 invoked by alias); 15 Oct 2010 01:10:31 -0000 Received: (qmail 20038 invoked by uid 9447); 15 Oct 2010 01:10:31 -0000 Date: Fri, 15 Oct 2010 01:10:00 -0000 Message-ID: <20101015011031.20036.qmail@sourceware.org> From: agk@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2 ./WHATS_NEW_DM libdm/libdevmapper.h libdm ... Mailing-List: contact lvm2-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: lvm2-cvs-owner@sourceware.org X-SW-Source: 2010-10/txt/msg00039.txt.bz2 CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2010-10-15 01:10:29 Modified files: . : WHATS_NEW_DM libdm : libdevmapper.h libdm-common.c libdm/ioctl : libdm-iface.c libdm-targets.h libdm/misc : dm-ioctl.h man : dmsetup.8.in tools : dmsetup.c Log message: Add --setuuid to dmsetup rename. Add dm_task_set_newuuid to set uuid of mapped device post-creation. (pjones) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW_DM.diff?cvsroot=lvm2&r1=1.416&r2=1.417 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.h.diff?cvsroot=lvm2&r1=1.126&r2=1.127 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-common.c.diff?cvsroot=lvm2&r1=1.100&r2=1.101 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/ioctl/libdm-iface.c.diff?cvsroot=lvm2&r1=1.81&r2=1.82 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/ioctl/libdm-targets.h.diff?cvsroot=lvm2&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/misc/dm-ioctl.h.diff?cvsroot=lvm2&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/man/dmsetup.8.in.diff?cvsroot=lvm2&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/dmsetup.c.diff?cvsroot=lvm2&r1=1.145&r2=1.146 --- LVM2/WHATS_NEW_DM 2010/09/27 19:09:34 1.416 +++ LVM2/WHATS_NEW_DM 2010/10/15 01:10:27 1.417 @@ -1,5 +1,7 @@ Version 1.02.56 - ===================================== + Add --setuuid to dmsetup rename. + Add dm_task_set_newuuid to set uuid of mapped device post-creation. Version 1.02.55 - 24th September 2010 ===================================== --- LVM2/libdm/libdevmapper.h 2010/09/30 21:06:52 1.126 +++ LVM2/libdm/libdevmapper.h 2010/10/15 01:10:28 1.127 @@ -167,6 +167,7 @@ int dm_task_set_ro(struct dm_task *dmt); int dm_task_set_newname(struct dm_task *dmt, const char *newname); +int dm_task_set_newuuid(struct dm_task *dmt, const char *newuuid); int dm_task_set_minor(struct dm_task *dmt, int minor); int dm_task_set_major(struct dm_task *dmt, int major); int dm_task_set_major_minor(struct dm_task *dmt, int major, int minor, int allow_default_major_fallback); --- LVM2/libdm/libdm-common.c 2010/09/30 21:06:52 1.100 +++ LVM2/libdm/libdm-common.c 2010/10/15 01:10:28 1.101 @@ -192,6 +192,7 @@ dmt->event_nr = 0; dmt->cookie_set = 0; dmt->query_inactive_table = 0; + dmt->new_uuid = 0; return dmt; } --- LVM2/libdm/ioctl/libdm-iface.c 2010/08/18 13:11:57 1.81 +++ LVM2/libdm/ioctl/libdm-iface.c 2010/10/15 01:10:28 1.82 @@ -826,6 +826,11 @@ if (dmt->type == DM_DEVICE_TABLE) dmi->flags |= DM_STATUS_TABLE_FLAG; + if (dmt->new_uuid) { + log_error("Changing UUID is not supported by kernel."); + goto bad; + } + log_debug("dm %s %s %s%s%s [%u]", _cmd_data_v1[dmt->type].name, dmi->name, dmi->uuid, dmt->newname ? " " : "", dmt->newname ? dmt->newname : "", @@ -1185,6 +1190,22 @@ return 1; } +int dm_task_set_newuuid(struct dm_task *dmt, const char *newuuid) +{ + if (strlen(newuuid) >= DM_UUID_LEN) { + log_error("Uuid \"%s\" too long", newuuid); + return 0; + } + + if (!(dmt->newname = dm_strdup(newuuid))) { + log_error("dm_task_set_newuuid: strdup(%s) failed", newuuid); + return 0; + } + dmt->new_uuid = 1; + + return 1; +} + int dm_task_set_newname(struct dm_task *dmt, const char *newname) { if (strchr(newname, '/')) { @@ -1201,6 +1222,7 @@ log_error("dm_task_set_newname: strdup(%s) failed", newname); return 0; } + dmt->new_uuid = 0; return 1; } @@ -1399,7 +1421,7 @@ } if (count && dmt->newname) { - log_error("targets and newname are incompatible"); + log_error("targets and rename are incompatible"); return NULL; } @@ -1409,12 +1431,12 @@ } if (dmt->newname && (dmt->sector || dmt->message)) { - log_error("message and newname are incompatible"); + log_error("message and rename are incompatible"); return NULL; } if (dmt->newname && dmt->geometry) { - log_error("geometry and newname are incompatible"); + log_error("geometry and rename are incompatible"); return NULL; } @@ -1514,6 +1536,14 @@ "by kernel. It will use live table."); dmi->flags |= DM_QUERY_INACTIVE_TABLE_FLAG; } + if (dmt->new_uuid) { + if (_dm_version_minor < 19) { + log_error("WARNING: Setting UUID unsupported by " + "kernel. Aborting operation."); + goto bad; + } + dmi->flags |= DM_NEW_UUID_FLAG; + } dmi->target_count = count; dmi->event_nr = dmt->event_nr; @@ -1910,9 +1940,10 @@ } } - log_debug("dm %s %s %s%s%s %s%.0d%s%.0d%s" + log_debug("dm %s %s%s %s%s%s %s%.0d%s%.0d%s" "%s%c%c%s%s %.0" PRIu64 " %s [%u]", _cmd_data_v4[dmt->type].name, + dmt->new_uuid ? "UUID " : "", dmi->name, dmi->uuid, dmt->newname ? " " : "", dmt->newname ? dmt->newname : "", dmt->major > 0 ? "(" : "", @@ -2044,7 +2075,7 @@ case DM_DEVICE_RENAME: /* FIXME Kernel needs to fill in dmi->name */ - if (dmt->dev_name && !udev_only) + if (!dmt->new_uuid && dmt->dev_name && !udev_only) rename_dev_node(dmt->dev_name, dmt->newname, check_udev); break; --- LVM2/libdm/ioctl/libdm-targets.h 2009/11/06 00:43:09 1.26 +++ LVM2/libdm/ioctl/libdm-targets.h 2010/10/15 01:10:28 1.27 @@ -62,6 +62,7 @@ int suppress_identical_reload; uint64_t existing_table_size; int cookie_set; + int new_uuid; char *uuid; }; --- LVM2/libdm/misc/dm-ioctl.h 2010/06/01 16:08:14 1.5 +++ LVM2/libdm/misc/dm-ioctl.h 2010/10/15 01:10:28 1.6 @@ -46,7 +46,7 @@ * Remove a device, destroy any tables. * * DM_DEV_RENAME: - * Rename a device. + * Rename a device or set its uuid if none was previously supplied. * * DM_SUSPEND: * This performs both suspend and resume, depending which flag is @@ -269,9 +269,9 @@ #define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl) #define DM_VERSION_MAJOR 4 -#define DM_VERSION_MINOR 17 +#define DM_VERSION_MINOR 19 #define DM_VERSION_PATCHLEVEL 0 -#define DM_VERSION_EXTRA "-ioctl (2010-03-05)" +#define DM_VERSION_EXTRA "-ioctl (2010-10-14)" /* Status bits */ #define DM_READONLY_FLAG (1 << 0) /* In/Out */ @@ -324,4 +324,10 @@ */ #define DM_UEVENT_GENERATED_FLAG (1 << 13) /* Out */ +/* + * If set, rename changes the uuid not the name. Only permitted + * if no uuid was previously supplied: an existing uuid cannot be changed. + */ +#define DM_NEW_UUID_FLAG (1 << 14) /* In */ + #endif /* _LINUX_DM_IOCTL_H */ --- LVM2/man/dmsetup.8.in 2010/05/27 19:00:20 1.35 +++ LVM2/man/dmsetup.8.in 2010/10/15 01:10:28 1.36 @@ -33,6 +33,9 @@ .B dmsetup rename .I device_name new_name .br +.B dmsetup rename +.I device_name --setuuid uuid +.br .B dmsetup message .I device_name sector message .br @@ -285,6 +288,11 @@ .I device_name new_name .br Renames a device. +.IP \fBrename +.I device_name --setuuid uuid +.br +Sets the uuid of a device that was created without a uuid. +After a uuid has been set it cannot be changed. .IP \fBresume .I device_name .br --- LVM2/tools/dmsetup.c 2010/09/30 21:06:53 1.145 +++ LVM2/tools/dmsetup.c 2010/10/15 01:10:29 1.146 @@ -140,6 +140,7 @@ READAHEAD_ARG, ROWS_ARG, SEPARATOR_ARG, + SETUUID_ARG, SHOWKEYS_ARG, SORT_ARG, TABLE_ARG, @@ -665,7 +666,10 @@ if (!_set_task_device(dmt, (argc == 3) ? argv[1] : NULL, 0)) goto out; - if (!dm_task_set_newname(dmt, argv[argc - 1])) + if (_switches[SETUUID_ARG]) { + if (!dm_task_set_newuuid(dmt, argv[argc - 1])) + goto out; + } else if (!dm_task_set_newname(dmt, argv[argc - 1])) goto out; if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt)) @@ -2699,7 +2703,7 @@ {"load", " []", 0, 2, _load}, {"clear", "", 0, 1, _clear}, {"reload", " []", 0, 2, _load}, - {"rename", " ", 1, 2, _rename}, + {"rename", " [--setuuid] ", 1, 2, _rename}, {"message", " ", 2, -1, _message}, {"ls", "[--target ] [--exec ] [--tree [-o options]]", 0, 0, _ls}, {"info", "[]", 0, 1, _info}, @@ -3106,6 +3110,7 @@ {"readahead", 1, &ind, READAHEAD_ARG}, {"rows", 0, &ind, ROWS_ARG}, {"separator", 1, &ind, SEPARATOR_ARG}, + {"setuuid", 0, &ind, SETUUID_ARG}, {"showkeys", 0, &ind, SHOWKEYS_ARG}, {"sort", 1, &ind, SORT_ARG}, {"table", 1, &ind, TABLE_ARG}, @@ -3278,6 +3283,8 @@ } if ((ind == ROWS_ARG)) _switches[ROWS_ARG]++; + if ((ind == SETUUID_ARG)) + _switches[SETUUID_ARG]++; if ((ind == SHOWKEYS_ARG)) _switches[SHOWKEYS_ARG]++; if ((ind == TABLE_ARG)) {