wo...@planix.ca ("Greg A. Woods") writes:

>At Fri, 12 Mar 2021 14:02:06 -0800, I wrote:
>Subject: problems with GPT (and maybe dkctl wedges) on LVM volumes
>>
>> # gpt -vvv show -a /dev/mapper/rvg0-nbtest.0
>> /dev/mapper/rvg0-nbtest.0: mediasize=41943040; sectorsize=512; blocks=81920
>> /dev/mapper/rvg0-nbtest.0: PMBR at sector 0
>> /dev/mapper/rvg0-nbtest.0: Pri GPT at sector 1
>> /dev/mapper/rvg0-nbtest.0: GPT partition: type=ffs, start=64, size=41942943
>> gpt: /dev/mapper/rvg0-nbtest.0: map entry doesn't fit media: new start + new 
>> size < start + size
>> (22 + 13fde < 40 + 27fff9f)

>I'm still not quite sure why gpt(8) can't show me the full partition
>table when reading from a raw LVM volume (dm) device as above in exactly
>the same way it does when reading from the raw (xbd emulated) disk in
>the domU.


gpt sees that the medium has only 41MByte and the partition exceeds that
and bails out.

That's a bug in the dm driver:

                dm_table_disksize(&dmv->table_head, &numsec, NULL);
                *valp = numsec;

It reports the number of blocks (sectors) and should report the
number of bytes.

An untested patch would be:

Index: device-mapper.c
===================================================================
RCS file: /cvsroot/src/sys/dev/dm/device-mapper.c,v
retrieving revision 1.61
diff -p -u -r1.61 device-mapper.c
--- device-mapper.c     8 Jul 2020 15:07:13 -0000       1.61
+++ device-mapper.c     19 Mar 2021 06:00:03 -0000
@@ -515,14 +515,15 @@ disk_ioctl_switch(dev_t dev, unsigned lo
        {
                off_t *valp = data;
                uint64_t numsec;
+               unsigned secsize;
 
                if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL)
                        return ENODEV;
 
                aprint_debug("DIOCGMEDIASIZE ioctl called\n");
 
-               dm_table_disksize(&dmv->table_head, &numsec, NULL);
-               *valp = numsec;
+               dm_table_disksize(&dmv->table_head, &numsec, &secsize);
+               *valp = numsec * secsize;
 
                dm_dev_unbusy(dmv);
                break;


-- 
-- 
                                Michael van Elst
Internet: mlel...@serpens.de
                                "A potential Snark may lurk in every tree."

Reply via email to