<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 18, 2015 at 10:20 AM, Dave Chinner <span dir="ltr"><<a href="mailto:david@fromorbit.com" target="_blank">david@fromorbit.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Aug 18, 2015 at 09:04:24AM +0200, Jan Tulak wrote:<br>
> I thought about it. However, with memalign from malloc marked obsolete<br>
> (and with posix_memalign having guaranteed alignment restrictions [1]), I<br>
> saw it better<br>
> to use the posix variant everywhere.<br>
<br>
</span>Putting a sane wrapper around an nasty library function is just<br>
fine. The memalign wrapper makes sense from this perspective - even<br>
gcc can't tell if variables passed to posix_memalign are correctly<br>
initialised or not, whereas no such problems exist for memalign().<br>
<span class=""><br>
> I could make a wrapper simulating the old memalign behaviour, but I don't<br>
> think it would make sense.<br>
<br>
</span>I think it makes more sense than using posix_memalign() everywhere<br>
and then ignoring the return variable that tells you it failed...<br>
<span class=""><br>
> I searched for this, but didn't find any reasonable answer:<br>
> How long can be things in standard libraries marked obsolete before<br>
> removing?<br>
<br>
</span>With a wrapper, we don't care.<br>
<br>
> [1] man memalign:<br>
> On many systems there are alignment restrictions, for example, on buf-<br>
> fers used for direct block device I/O. POSIX specifies the path-<br>
<span class="">> conf(path,_PC_REC_XFER_ALIGN) call that tells what alignment is needed.<br>
> Now one can use posix_memalign() to satisfy this requirement.<br>
><br>
> posix_memalign() verifies that alignment matches the requirements<br>
> detailed above. memalign() may not check that the alignment argument<br>
> is correct.<br>
<br>
</span>Yes, you can get it wrong with memalign. But we don't, because we<br>
follow the rules for DIO buffer alignment and set it correctly.<br>
Being able to directly control the alignment of the memory buffer is<br>
a reason for using memalign() over posix_memalign(), not the other<br>
way around.<br></blockquote><div><br></div><div>So a wrapper used on all platforms is an acceptable solution? <span style="background-color:rgba(200,200,200,0.0470588)">All right, </span></div><div><span style="background-color:rgba(200,200,200,0.0470588)">this explanation makes sense.</span><span style="background-color:rgba(200,200,200,0.0470588)"> </span>I will change it that way. The only question</div><div>I have now is whether to use posix_memalign on every platform, or whether to</div><div>make it platform_memalign and use the old memalign inside <span style="background-color:rgba(200,200,200,0.0470588)">for Linux</span>.</div><div><br></div><div>Cheers,</div><div>Jan</div><div><br></div></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Jan Tulak<br></div><a href="mailto:jtulak@redhat.com" target="_blank">jtulak@redhat.com</a><br></div></div>
</div></div>