devmapper: do not flush I/O for DM_DEVICE_CREATE
authorHannes Reinecke <hare@suse.de>
Mon, 9 May 2016 10:52:59 +0000 (12:52 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 10 May 2016 05:57:08 +0000 (07:57 +0200)
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@suse.de>
libmultipath/devmapper.c

index fb202e8..2ac62a5 100644 (file)
@@ -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) &&