<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></head><body><div><div style="font-family:Calibri,sans-serif;font-size:11pt">BTW I have not seen filesystem implementations doing write ordering for direct IO unless a request merge is possible (different user credentials), since you have mentioned you are from filesystem background, do you know any such implimentation?<br>
<br>Rajat<br></div></div><hr><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">From: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">Rajat Sharma</span><br><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Sent: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">03-08-2013 09:25</span><br>
<span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">To: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">neha naik; Greg Freemyer</span><br><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Cc: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">kernelnewbies</span><br>
<span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Subject: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">RE: Conceptual questions about device driver</span><br><br></body></html>
<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></head><body><div><div style="font-family:Calibri,sans-serif;font-size:11pt">If filesystem has to guarantee write ordering, it has to serialize write request. So, only when &#39;A&#39; is written to the block (completion received from block driver) filesystem can dispatch &#39;B&#39; not before that. Remember that there could be failures too. So if &#39;A&#39; is failed, request for &#39;B&#39; is pending, would a filesystem fail that too? I guess not. Usually page cache absorbs such overwrites first than issues a single merged IO to block device, but what about direct IO? If applications need consistency guarantee against such failures, it should serialize writes. So to summarize, write ordering effort from each layers<br>

Block driver: none<br>Filesystem: best effort<br>Application: full<br><br>Rajat<br></div></div><hr><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">From: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">neha naik</span><br>

<span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Sent: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">03-08-2013 02:40</span><br><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">To: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">Greg Freemyer</span><br>

<span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Cc: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">Rajat Sharma; kernelnewbies</span><br><span style="font-family:Tahoma,sans-serif;font-size:10pt;font-weight:bold">Subject: </span><span style="font-family:Tahoma,sans-serif;font-size:10pt">Re: Conceptual questions about device driver</span><br>

<br></body></html>Thanks for the responses.  I have one more  question for Greg. I come from filesystem background and not device driver so i may be a bit confused <br>about the write order fidelity. I know that filesystems guarantee that. Looking from filesystem perspective, no write will be allowed on the same block until<br>


the first write finishes. So, if &#39;B&#39; is written after &#39;A&#39; you can always guarantee that you will see &#39;B&#39; at the end of the two writes.<br>  Now imagine not having a filesystem, and doing a write directly on the device. Do device drivers honour it. Should they? I imagine device driver as a kind of<br>


queue. So any writes are always queued up one after the other so that it gives write order fidelity whether it wants to or not. Am i missing something here.<br><br>Regards,<br>Neha<br> <br><br><div class="gmail_quote">On Fri, Aug 2, 2013 at 1:56 PM, Greg Freemyer <span dir="ltr">&lt;<a href="mailto:greg.freemyer@gmail.com" target="_blank">greg.freemyer@gmail.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Fri, Aug 2, 2013 at 1:32 AM, Rajat Sharma &lt;<a href="mailto:fs.rajat@gmail.com">fs.rajat@gmail.com</a>&gt; wrote:<br>



&gt; On Fri, Aug 2, 2013 at 2:25 AM, neha naik &lt;<a href="mailto:nehanaik27@gmail.com">nehanaik27@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Hi,<br>
&gt;&gt;  I have some conceptual questions about device driver :<br>
&gt;&gt;<br>
&gt;&gt; 1. Write order fidelity should be maintained when submitting requests from<br>
&gt;&gt; device driver to disk below.<br>
&gt;&gt;     However, acknowledging these requests it is okay if we don&#39;t necessarily<br>
&gt;&gt; maintain that order, right?<br>
&gt;&gt;<br>
&gt;<br>
&gt; Yes it should not matter as long as application can rely on data being<br>
&gt; written is in order of submission.<br>
<br>
</div>But it can&#39;t ..... unless the write cache is turned off and it is<br>
known the the cache is truly off.<br>
<br>
There is no guarantee of write order in the block stack.  Not between<br>
the filesystem and the driver.  Not between the driver and the drive.<br>
<br>
There are at least 2 elevators shuffling the order of writes to<br>
optimize performance.<br>
<br>
Rajat, did you get confused?  Or were you trying to say something else?<br>
<span class="HOEnZb"><font color="#888888"><br>
Greg<br>
</font></span></blockquote></div><br>