On Fri, Jul 30, 2010 at 05:44:08PM +0400, Vladislav Bolkhovitin wrote: > Yes, but why not to make step further and allow to completely eliminate > the waiting/draining using ORDERED requests? Current advanced storage > hardware allows that. There is a few caes where we could do that - the fsync without metadata changes above would be the prime example. But there's a lot lower hanging fruit until we get to the point where it's worth trying. But in most cases we don't just drain an imaginary queue but actually need to modify software state before finishing one class of I/O and submitting the next. Again, take the example of fsync, but this time we have actually extended the file and need to log an inode size update, as well as a modification to to the btree blocks. Now the fsync in XFS looks like this: 1) write out all the data blocks using WRITE 2) wait for these to finish 3) propagate any I/O error to the inode so we can pick them up 4) update the inode size in the shadow in-memory structure 5) start a transaction to log the inode size 6) flush the write cache to make sure the data really is on disk 7) write out a log buffer containing the inode and btree updates 8) if the FUA bit is not support flush the cache again and yes, the flush in 6) is important so that we don't happen to log the inode size update before all data has made it to disk in case the cache flush in 8) is interrupted -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html