<div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>As I know, there is no way to guarantee ordering between block writes inside a bio.</div><div><br></div><div>That is the reason why bio for journal commit block write and for other log block writes are separated in JBD2 module.</div><div><br></div><div>And, I think your idea can be optimized more efficiently.</div><div><br></div><div>If you write checksum for some data, ordering between checksum and data is not needed.</div><div><br></div><div>When the crash occurs, we just recalculate checksum with data and compare the recalculated one with a written one.</div><div><br></div><div>Even though checksum is written first, the recalculated checksum will be different with the written checksum because data is not written.</div><div><br></div><div>So, i think if you use checksum, ordering guaranteeing is not needed.</div><div><br></div><div>This is first time that i send mail to kernelnewbies mailing list.</div><div><br></div><div>If i did wrong thing on this mail, very sorry about that.</div><div><br></div><div>Thank you.</div><div><br></div><div>Joontaek Oh.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2020년 1월 28일 (화) 오전 3:23, Lukas Straub <<a href="mailto:lukasstraub2@web.de">lukasstraub2@web.de</a>>님이 작성:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Mon, 27 Jan 2020 12:27:58 -0500<br>
"Valdis Klētnieks" <<a href="mailto:valdis.kletnieks@vt.edu" target="_blank">valdis.kletnieks@vt.edu</a>> wrote:<br>
<br>
> On Sun, 26 Jan 2020 13:07:38 +0100, Lukas Straub said:<br>
> <br>
> > I am planing to write a new device-mapper target and I'm wondering if there<br>
> > is a ordering guarantee for the operation inside a single bio? For example if I<br>
> > issue a write bio to sector 0 of length 4, is it guaranteed that sector 0 is<br>
> > written first and sector 3 is written last?  <br>
> <br>
> I'll bite.  What are you doing where the order of writing out a single bio matters?<br>
<br>
I plan to improve the performance of dm-integrity on HDDs by removing the requirement for bitmap or journal (which causes head seeks even for sequential writes). I also want to avoid cache flushes and FUA. The problem with dm-integrity is that the data and checksum update needs to be atomic.<br>
So I came up with the following Idea:<br>
<br>
The on-disk layout will look like this:<br>
|csum_next-01|data-chunk-01|csum_prev-01|csum_next-02|data-chunk-02|csum_prev-02|...<br>
<br>
Under normal conditions, csum_next-01 (a single sector) contains the checksums for data-chunk-01 and csum_prev-01 is a duplicate of csum_next-01.<br>
<br>
Updating data will first update csum_next (with FUA), then update the data (FUA) and finally update csum_prev (FUA).<br>
But if there is a ordering guarantee we have a fast path: If a full chunk of data is written, we simply issue a single big write with csum_next, data and csum_prev, all without FUA (except if the incoming request asks for that).<br>
So that's why I'm asking.<br>
<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">Kernelnewbies@kernelnewbies.org</a><br>
<a href="https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" rel="noreferrer" target="_blank">https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div></div>