1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Synchronize "remove" dm task while reverting unsuccessful "create" dm task

(with table provided).

This remove ioctl generates udev events like any other hence it needs to be
synchronized properly as well. Also, add dm task type in debug log when
setting a cookie (for better debugging).
This commit is contained in:
Peter Rajnoha 2010-05-03 21:06:53 +00:00
parent bde29bc4fa
commit e92d87cef6
2 changed files with 14 additions and 2 deletions

View File

@ -1546,6 +1546,7 @@ static int _create_and_load_v4(struct dm_task *dmt)
{
struct dm_task *task;
int r;
uint32_t cookie;
/* Use new task struct to create the device */
if (!(task = dm_task_create(DM_DEVICE_CREATE))) {
@ -1625,7 +1626,18 @@ static int _create_and_load_v4(struct dm_task *dmt)
dmt->type = DM_DEVICE_REMOVE;
dm_free(dmt->uuid);
dmt->uuid = NULL;
dmt->cookie_set = 0;
/*
* Also udev-synchronize "remove" dm task that is a part of this revert!
* But only if the original dm task was supposed to be synchronized.
*/
if (dmt->cookie_set) {
cookie = (dmt->event_nr & ~DM_UDEV_FLAGS_MASK) |
(DM_COOKIE_MAGIC << DM_UDEV_FLAGS_SHIFT);
dm_task_set_cookie(dmt, &cookie,
(dmt->event_nr & DM_UDEV_FLAGS_MASK) >>
DM_UDEV_FLAGS_SHIFT);
}
if (!dm_task_run(dmt))
log_error("Failed to revert device creation.");

View File

@ -1192,7 +1192,7 @@ int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie, uint16_t flags)
dmt->cookie_set = 1;
log_debug("Udev cookie 0x%" PRIx32 " (semid %d) assigned to dm_task "
"with flags 0x%" PRIx16, *cookie, semid, flags);
"type %d with flags 0x%" PRIx16, *cookie, semid, dmt->type, flags);
return 1;