Instead of generating the cookie internally we should be passing in the cookie to dm_addmap(). Signed-off-by: Hannes Reinecke <hare@xxxxxxx> --- libmultipath/devmapper.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c index 48e7d50..ab71fda 100644 --- a/libmultipath/devmapper.c +++ b/libmultipath/devmapper.c @@ -274,11 +274,10 @@ dm_device_remove (const char *name, int needsync, int deferred_remove) { static int dm_addmap (int task, const char *target, struct multipath *mpp, - char * params, int ro) { + char * params, int ro, uint32_t *cookie) { int r = 0; struct dm_task *dmt; char *prefixed_uuid = NULL; - uint32_t cookie = 0; if (!(dmt = dm_task_create (task))) return 0; @@ -319,18 +318,18 @@ dm_addmap (int task, const char *target, struct multipath *mpp, dm_task_no_open_count(dmt); if (task == DM_DEVICE_CREATE && - !dm_task_set_cookie(dmt, &cookie, + !dm_task_set_cookie(dmt, cookie, DM_UDEV_DISABLE_LIBRARY_FALLBACK)) { - dm_udev_complete(cookie); + dm_udev_complete(*cookie); goto freeout; } r = dm_task_run (dmt); if (task == DM_DEVICE_CREATE) { if (!r) - dm_udev_complete(cookie); + dm_udev_complete(*cookie); else - dm_udev_wait(cookie); + dm_udev_wait(*cookie); } freeout: if (prefixed_uuid) @@ -345,11 +344,13 @@ dm_addmap (int task, const char *target, struct multipath *mpp, extern int dm_addmap_create (struct multipath *mpp, char * params) { int ro; + uint32_t cookie = 0; for (ro = 0; ro <= 1; ro++) { int err; - if (dm_addmap(DM_DEVICE_CREATE, TGT_MPATH, mpp, params, ro)) + if (dm_addmap(DM_DEVICE_CREATE, TGT_MPATH, + mpp, params, ro, &cookie)) return 1; /* * DM_DEVICE_CREATE is actually DM_DEV_CREATE + DM_TABLE_LOAD. @@ -374,11 +375,15 @@ dm_addmap_create (struct multipath *mpp, char * params) { extern int dm_addmap_reload (struct multipath *mpp, char *params) { - if (dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, ADDMAP_RW)) + uint32_t cookie = 0; + + if (dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, + ADDMAP_RW, &cookie)) return 1; if (errno != EROFS) return 0; - return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, ADDMAP_RO); + return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, + ADDMAP_RO, &cookie); } extern int -- 2.6.6 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel