DM_DEVICE_CREATE loads a new table, so there cannot be any I/O pending. Hence we should be setting the 'no flush' and 'skip lockfs' flag to avoid delays during creation. Signed-off-by: Hannes Reinecke <hare@xxxxxxx> --- libmultipath/devmapper.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c index fb202e8..2ac62a5 100644 --- a/libmultipath/devmapper.c +++ b/libmultipath/devmapper.c @@ -285,16 +285,23 @@ dm_addmap (int task, const char *target, struct multipath *mpp, if (ro) dm_task_set_ro(dmt); - if ((task == DM_DEVICE_CREATE) && strlen(mpp->wwid) > 0){ - prefixed_uuid = MALLOC(UUID_PREFIX_LEN + strlen(mpp->wwid) + 1); - if (!prefixed_uuid) { - condlog(0, "cannot create prefixed uuid : %s", - strerror(errno)); - goto addout; + if (task == DM_DEVICE_CREATE) { + if (strlen(mpp->wwid) > 0) { + prefixed_uuid = MALLOC(UUID_PREFIX_LEN + + strlen(mpp->wwid) + 1); + if (!prefixed_uuid) { + condlog(0, "cannot create prefixed uuid : %s", + strerror(errno)); + goto addout; + } + sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid); + if (!dm_task_set_uuid(dmt, prefixed_uuid)) + goto freeout; } - sprintf(prefixed_uuid, UUID_PREFIX "%s", mpp->wwid); - if (!dm_task_set_uuid(dmt, prefixed_uuid)) - goto freeout; + dm_task_skip_lockfs(dmt); +#ifdef LIBDM_API_FLUSH + dm_task_no_flush(dmt); +#endif } if (mpp->attribute_flags & (1 << ATTR_MODE) && -- 2.6.6 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel