[parted-devel] FYI, preparation for 2048-byte sector sizes across the board
Jim Meyering
jim at meyering.net
Fri Jun 1 19:45:38 UTC 2007
Otavio Salvador <otavio at debian.org> wrote:
> Jim Meyering <jim at meyering.net> writes:
>
>> Otavio Salvador <otavio at debian.org> wrote:
>>
>>> Jim Meyering <jim at meyering.net> writes:
>>>
>>>> diff --git a/libparted/labels/bsd.c b/libparted/labels/bsd.c
>>>> index 747a9c5..26a8b60 100644
>>>> --- a/libparted/labels/bsd.c
>>>> +++ b/libparted/labels/bsd.c
>>>> @@ -141,30 +142,45 @@ alpha_bootblock_checksum (char *boot) {
>>> <...>
>>>> static int
>>>> bsd_probe (const PedDevice *dev)
>>>> {
>>>> - char boot[512];
>>>> - BSDRawLabel *label;
>>>> + BSDRawLabel *partition;
>>>>
>>>> PED_ASSERT (dev != NULL, return 0);
>>>>
>>>> - if (dev->sector_size != 512)
>>>> + if (dev->sector_size < 512)
>>>> return 0;
>>>
>>> Shouldn't it be:
>>> if (dev->sector_size%512 != 0)
>>> return 0;
>>
>> Thanks for looking at it, but no.
>>
>> First, your replacement would mistakenly allow a dev->sector_size value
>> of 0 through. More importantly, there is already plenty of code (e.g.,
>> in linux.c) that ensures it is a multiple of 512, so it would be redundant
>> to check for that in each label/*.c's *_probe function.
>
> Well but then we should "trust" the sector_size and continue. Maybe we
> ought to have a static method to check it and use it in all code to
> avoid mistakes?
Why?
There may be some type of partition that works fine with a 256-byte
sector size. Using the same sector-size test for all label types would
exclude one like that.
Remember: when trying to determine what type of partition we have,
potentially all of the *_probe functions are called, so we have to
be careful not to exclude legitimate use cases.
The sector_size < 512 test above is just saying that if the sector
size is that small, then this can't be a BSD partition.
More information about the parted-devel
mailing list