On Thu, Aug 24, 2023 at 04:21:20PM -0700, Darrick J. Wong wrote: > @@ -554,6 +560,7 @@ xlog_cil_insert_items( > int iovhdr_res = 0, split_res = 0, ctx_res = 0; > int space_used; > int order; > + unsigned int cpu_nr; > struct xlog_cil_pcp *cilpcp; > > ASSERT(tp); > @@ -577,7 +584,12 @@ xlog_cil_insert_items( > * can't be scheduled away between split sample/update operations that > * are done without outside locking to serialise them. > */ > - cilpcp = get_cpu_ptr(cil->xc_pcp); > + cpu_nr = get_cpu(); > + cilpcp = this_cpu_ptr(cil->xc_pcp); > + > + /* Tell the future push that there was work added by this CPU. */ > + if (!cpumask_test_cpu(cpu_nr, &ctx->cil_pcpmask)) > + cpumask_test_and_set_cpu(cpu_nr, &ctx->cil_pcpmask); > > /* > * We need to take the CIL checkpoint unit reservation on the first This code also needs the put_cpu_ptr(cil->xc_pcp) converted to put_cpu(), even though they end up doing exactly the same thing. Other than that, it looks good. I'll pull this into my test trees and give it a run... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx