title: FUA, flush and ordering
body: <p>A <code>FUA</code> command usually means the data needs to be committed to the <code>NVM</code> before signalling completion. </p>
  
  <p>From my understanding, there is no requirement to flush the data before the <code>FUA</code> command to the <code>NVM</code>. </p>
  
  <p>1.
  If we have 
  LBA0 (<em>in Cache</em>), LBA1(<em>cache</em>), LBA0 with FUA, </p>
  
  <p>Can LBA0 with FUA complete first and then LBA0 in Cache complete? 
  Is there an ordering requirement for the two ?</p>
  
  <p>2.
  Again if we have commands:</p>
  
  <pre><code>Write LBA0 with X
  
  Write LBA1 with Y
  
  Write LBA0 with Z and FUA is set. 
  
  READ LBA0 
  </code></pre>
  
  <p>Can Read of <code>LBA0</code> return X or Z? </p>
  
  <hr>
  
  <p>3.
  <strong>Another question</strong> is about the <code>FLUSH</code> : </p>
  
  <p>If <code>flush</code> comes with a data :</p>
  
  <p>the data in write cache must be committed before the <code>BIO</code> that is flagged with Flush gets executed.</p>
  
  <p>if a <code>FS</code> issues:</p>
  
  <pre><code>WRITE LBA0 with X (1) 
  
  FLUSH
  
  WRITE LBA0 with Y (2)
  </code></pre>
  
  <p>if (2) is issued after <code>FLUSH</code> completes, the ordering is guaranteed.
  However, if (2) is issued before <code>FLUSH</code> completes , so both are in flight commands, can (2) complete before <code>FLUSH</code> ? </p>