Commit 23d70c5e authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Mike Snitzer

dm ioctl: report event number in DM_LIST_DEVICES

Report the event numbers for all the devices, so that the user doesn't
have to ask them one by one.  The event number is reported after the
name field in the dm_name_list structure.

The location of the next record is specified in the dm_name_list->next
field, that means that we can put the new data after the end of name and
it is backward compatible with the old code.  The old code just skips
the event number without interpreting it.
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarAndy Grover <agrover@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent fc1841e1
...@@ -506,6 +506,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ ...@@ -506,6 +506,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_
size_t len, needed = 0; size_t len, needed = 0;
struct gendisk *disk; struct gendisk *disk;
struct dm_name_list *nl, *old_nl = NULL; struct dm_name_list *nl, *old_nl = NULL;
uint32_t *event_nr;
down_write(&_hash_lock); down_write(&_hash_lock);
...@@ -518,6 +519,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ ...@@ -518,6 +519,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_
needed += sizeof(struct dm_name_list); needed += sizeof(struct dm_name_list);
needed += strlen(hc->name) + 1; needed += strlen(hc->name) + 1;
needed += ALIGN_MASK; needed += ALIGN_MASK;
needed += (sizeof(uint32_t) + ALIGN_MASK) & ~ALIGN_MASK;
} }
} }
...@@ -547,7 +549,9 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_ ...@@ -547,7 +549,9 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_
strcpy(nl->name, hc->name); strcpy(nl->name, hc->name);
old_nl = nl; old_nl = nl;
nl = align_ptr(((void *) ++nl) + strlen(hc->name) + 1); event_nr = align_ptr(((void *) (nl + 1)) + strlen(hc->name) + 1);
*event_nr = dm_get_event_nr(hc->md);
nl = align_ptr(event_nr + 1);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment