From: Hannes Reinecke Subject: Emulate BLKRRPART on device-mapper Partitions on device-mapper devices are managed by kpartx (if at all). So if we were just to send out a 'change' event if someone called BLKRRPART on these devices, kpartx will be triggered via udev and can manage the partitions accordingly. Signed-off-by: Hannes Reinecke --- drivers/md/dm.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -333,19 +333,25 @@ static int dm_blk_ioctl(struct inode *in if (!map || !dm_table_get_size(map)) goto out; - /* We only support devices that have a single target */ - if (dm_table_get_num_targets(map) != 1) - goto out; - - tgt = dm_table_get_target(map, 0); - if (dm_suspended(md)) { r = -EAGAIN; goto out; } - if (tgt->type->ioctl) - r = tgt->type->ioctl(tgt, inode, file, cmd, arg); + if (cmd == BLKRRPART) { + /* Emulate Re-read partitions table */ + kobject_uevent(&md->disk->dev.kobj, KOBJ_CHANGE); + r = 0; + } else { + /* We only support devices that have a single target */ + if (dm_table_get_num_targets(map) != 1) + goto out; + + tgt = dm_table_get_target(map, 0); + + if (tgt->type->ioctl) + r = tgt->type->ioctl(tgt, inode, file, cmd, arg); + } out: dm_table_put(map);