On 02/02/2022 11:14, Warner Losh wrote:
On Wed, Feb 2, 2022 at 2:05 AM Andriy Gapon <a...@freebsd.org <mailto:a...@freebsd.org>> wrote:
    Hmm... it looks like both the old and new (Open)ZFS use BIO_FLUSH command
    without BIO_ORDERED flag.  Not sure if it happens to do the right thing 
anyway
    or not.


It's an unordered flush then. The flush will happen whenever. I have a vague
memory that ZFS will only issue this command in cases where there's no other I/O
pending.

I think that there is still a potential problem that an earlier write request might get re-ordered after the flush.
I think that we should add BIO_ORDERED for correctness.

It will be the only way for it to be reliable with nvme, since the BIO_FLUSH
command isn't ordered w/o BIO_ORDERED flag. So ggate needn't do anything
special for BIO_FLUSH, just BIO_ORDERED. Otherwise, it's free to reorder as it
sees fit.

The CAM I/O scheduler takes a little bit of liberty here, btw. It interprets BIO_ORDERED
as being only wrt BIO_WRITE and BIO_FLUSH because if you schedule both a read
and write, the results are undefined. nvd takes a stricter approach and honors the ordering
more strictly.

Warner



--
Andriy Gapon

Reply via email to