Re: makefs alignment issue

Eric Sandeen
2014-10-25T15:51:29Z

On 10/24/14 10:08 PM, Stan Hoeppner wrote:
> On 10/24/2014 05:27 PM, Eric Sandeen wrote:
>> On 10/24/14 5:19 PM, Eric Sandeen wrote:
>>> On 10/24/14 5:08 PM, Stan Hoeppner wrote:
>>>>
>>>> On 10/24/2014 03:14 PM, Eric Sandeen wrote:
>>>
>>> ...
>>>
>>>>>> Any ideas how to verify what's going on here and fix it?
>>>>>
>>>>> # blockdev --getiomin --getioopt /dev/s2d_a1l003
>>
>> Also, what does it show for the underlying non-multipath device(s)?
>
> # blockdev --getiomin --getioopt /dev/sdj
> 512
> 1048576
> # blockdev --getiomin --getioopt /dev/sdf
> 512
> 1048576

Ok, so dm multipath is just bubbling up what the device itself
is claiming; not dm's doing.

I forgot to ask (and you forgot to report...!) what version
of xfsprogs you're using....

Currently, blkid_get_topology() in xfsprogs does:

/*
* Blkid reports the information in terms of bytes, but we want it in
* terms of 512 bytes blocks (just to convert it to bytes later..)
*
* If the reported values are the same as the physical sector size
* do not bother to report anything. It will just cause warnings
* if people specify larger stripe units or widths manually.
*/
val = blkid_topology_get_minimum_io_size(tp);
if (val > *psectorsize)
*sunit = val >> 9;
val = blkid_topology_get_optimal_io_size(tp);
if (val > *psectorsize)
*swidth = val >> 9;

so in your case sunit probably wouldn't get set (can you confirm with
# blockdev --getpbsz that the physical sector size is also 512?)

But the optimal size is > physical sector so swidth gets set.

Bleah... can you just collect all of:

# blockdev --getpbsz --getss --getiomin --getioopt

for your underlying devices, and I'll dig into how xfsprogs is behaving for
those values. I have a hunch that we should be ignoring stripe units of 512
even if the "width" claims to be something larger.

-Eric