]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Hannes Reinecke <hare@suse.de> |
2 | Subject: Emulate BLKRRPART on device-mapper | |
3 | ||
4 | Partitions on device-mapper devices are managed by kpartx (if at | |
5 | all). So if we were just to send out a 'change' event if someone | |
6 | called BLKRRPART on these devices, kpartx will be triggered via udev | |
7 | and can manage the partitions accordingly. | |
8 | ||
9 | Signed-off-by: Hannes Reinecke <hare@suse.de> | |
10 | ||
11 | --- | |
12 | drivers/md/dm.c | 22 ++++++++++++++-------- | |
13 | 1 file changed, 14 insertions(+), 8 deletions(-) | |
14 | ||
15 | --- a/drivers/md/dm.c | |
16 | +++ b/drivers/md/dm.c | |
17 | @@ -333,19 +333,25 @@ static int dm_blk_ioctl(struct inode *in | |
18 | if (!map || !dm_table_get_size(map)) | |
19 | goto out; | |
20 | ||
21 | - /* We only support devices that have a single target */ | |
22 | - if (dm_table_get_num_targets(map) != 1) | |
23 | - goto out; | |
24 | - | |
25 | - tgt = dm_table_get_target(map, 0); | |
26 | - | |
27 | if (dm_suspended(md)) { | |
28 | r = -EAGAIN; | |
29 | goto out; | |
30 | } | |
31 | ||
32 | - if (tgt->type->ioctl) | |
33 | - r = tgt->type->ioctl(tgt, inode, file, cmd, arg); | |
34 | + if (cmd == BLKRRPART) { | |
35 | + /* Emulate Re-read partitions table */ | |
36 | + kobject_uevent(&md->disk->dev.kobj, KOBJ_CHANGE); | |
37 | + r = 0; | |
38 | + } else { | |
39 | + /* We only support devices that have a single target */ | |
40 | + if (dm_table_get_num_targets(map) != 1) | |
41 | + goto out; | |
42 | + | |
43 | + tgt = dm_table_get_target(map, 0); | |
44 | + | |
45 | + if (tgt->type->ioctl) | |
46 | + r = tgt->type->ioctl(tgt, inode, file, cmd, arg); | |
47 | + } | |
48 | ||
49 | out: | |
50 | dm_table_put(map); |