On Fri, Aug 23, 2024 at 08:34:43PM -0700, Christoph Hellwig wrote: > On Fri, Aug 23, 2024 at 07:04:37PM +0800, Long Li wrote: > > After pushing log items, the log item may have been freed, making it > > unsafe to access in tracepoints. This commit introduces XFS_ITEM_UNSAFE > > to indicate when an item might be freed during the item push operation. > > So instead of this magic unsafe operation I think declaring a rule that > the lip must never be accessed after the return is the much saner > choice. > > We'll then need to figure out how we can still keep useful tracing > without accessing the lip. The only information the trace points need > from the lip itself are the type, flags, and lsn and those seem small > enough to save on the stack before calling into ->iop_push. > > Hi Christoph, Thank you for pointing out the issues with the current approach. Establishing a rule to not access 'lip' after the item has been pushed would indeed make the logic clearer. However, saving the log item information that needs to be traced on the stack also looks unappealing: 1. We would need to add new log item trace code, instead of using the generic DEFINE_LOG_ITEM_EVENT macro definition. This increases code redundancy. 2. We would need to use CONFIG_TRACEPOINTS to manage whether we need to save type, flags, lsn, and other information on the stack. 3. If we need to extend tracing to other fields of the log item in the future, we would need to add new variables. If we save log item on the stack before each push, I think it would affect performance, although this impact would be minimal. I wonder what other people's opinions are? Thanks, Long Li