On Wed, Jun 05, 2019 at 05:14:51PM +0200, Christoph Hellwig wrote: > On Wed, Jun 05, 2019 at 06:51:12AM -0400, Brian Foster wrote: > > Yep. Another thing that briefly crossed my mind is whether we could in > > theory optimize flushes out if the tail hasn't moved since the last > > flush. We'd still have to FUA the log records, but we haven't introduced > > any such integrity/ordering requirements if the tail hasn't changed, > > right? > > > > It's debatable whether that would provide any value, but it might at > > least apply to certain scenarios like if the tail happens to be pinned > > by a single object across several iclog writes, or if fsyncs or some > > other pattern result in smaller/frequent checkpoints relative to > > metadata writeback, etc. > > Well, for the fsync we require the data device to be flushed for > the fsync semantics anyway. So we'd now need to treat that special, > simiar to that old log_flushed return parameter hack. Yeah, good point. It looks like the current fsync code already relies on the flush associated with the log force if the log and data devices are the same (otherwise we explicitly flush the data dev between data writeback and the log force). Any optimization there probably wouldn't buy anything for fsync callers that have to write file data. It would just shift responsibility of the flush to the fsync and perhaps complicate that current log_flushed thing since it also kind of assumes an unconditional flush based on iclog state. Brian