On Mon, Dec 04, 2023 at 10:43:48AM -0800, Darrick J. Wong wrote: > Dave and Allison and I at some point realized that the defer ops > machinery works even if ->create_intent and ->create_done return NULL. > You'd lose the ability to restart the operation after a crash, but if > the upper layers can tolerate a half-finished operation > (e.g. ATTR_INCOMPLETE) then that should be ok. > > Obviously you wouldn't touch any such *existing* code except as part of > adapting it to be capable of using log items, and that's exactly what > Allison did. She refactor the old xattr code to track the state of the > operation explicitly, then moved all that into the ->finish_item > implementation. Now, if the setattr operation does not set the LOGGED > flag (the default), the behavior should be exactly the same as before. > If they do set LOGGED (either because the debug knob is set; or because > the caller is parent pointers) then ->create_{intent,done} actually > create log intent and done items. > > It should never create an intent item and not the done item or the other > way 'round, obviously. Either both functions return NULL, or they both > return non-NULL. It would be really good to document this, the name LARP and why it is considered a debug feature somewhere in the tree. No need to hold up this series for that of course.