On Wed, Feb 21, 2024 at 08:56:15AM -0800, Darrick J. Wong wrote: > Hmm. For rt reflink (whenever I get back to that, ha) I've been > starting to think that yes, we actually /do/ want to have a log item > that tracks the progress of remap and cow operations. That would solve > the problem of someone wanting to reflink a semi-written rtx. > > That said, it might complicate the reflink code quite a bit since right > now it writes zeroes to the unwritten parts of an rt file's rtx so that > there's only one mapping record for the whole rtx, and then it remaps > them. That's most of why I haven't bothered to implement that solution. I'm still not sure that supporting reflinks for rtextsize > 1 is a good idea.. > > I'm not planning to make you do it, because such a log item would > > generally be pretty useful for always COW mode. > > One other thing -- while I was refactoring the swapext code into > exch{range,maps}, it occurred to me that doing an exchange between the > cow and data forks isn't possible because log recovery won't be able to > do anything. There's no ondisk metadata to map a cow staging extent > back to the file it came from, which means we can't generally resume an > exchange operation. Yeah. > > Also if a file system supports logging data (which I have an > > XFS early prototype for that I plan to finish), we can even do > > the small double writes more efficiently than the application, > > all through the same interface. > > Heh. Ted's been trying to kill data=journal. Now we've found a use for > it after all. :) Well.. unconditional logging of data just seems like a really bad idea. Using it as an optimization for very small and/or synchronous writes is a pretty common technique.