--- current/lib/activate/devmapper.c.orig 2007-11-13 13:51:11.000000000 +0100 +++ current/lib/activate/devmapper.c 2007-11-16 12:42:14.000000000 +0100 @@ -151,13 +151,16 @@ /* Build a UUID for a dmraid device * Return 1 for sucess; 0 for failure*/ -static int dmraid_uuid(char *uuid, struct lib_context *lc, - struct raid_set *rs, uint uuid_len) { +static int dmraid_uuid(struct lib_context *lc, struct raid_set *rs, + char *uuid, uint uuid_len) { + int r; + /* Clear garbage data from uuid string */ memset(uuid, 0, uuid_len); - - /* Insert volume name into string */ - return !!memcpy(uuid, rs->name, strlen(rs->name)); + + /* Create UUID string from subsystem prefix and RAID set name. */ + r = snprintf(uuid, uuid_len, "DMRAID-%s", rs->name) < uuid_len; + return r < 0 ? 0 : (r < uuid_len); } /* Create a task, set its name and run it. */ @@ -178,12 +181,11 @@ if (ret && table) ret = parse_table(lc, dmt, table); - if (ret) { - if (DM_DEVICE_CREATE == type && - dmraid_uuid(uuid, lc, rs, DM_UUID_LEN)) - dm_task_set_uuid(dmt, uuid); - ret = dm_task_run(dmt); - } + if (ret && + DM_DEVICE_CREATE == type) + ret = dmraid_uuid(lc, rs, uuid, DM_UUID_LEN) && + dm_task_set_uuid(dmt, uuid) && + dm_task_run(dmt); _exit_dm(dmt); return ret;