On Wed, Aug 10, 2022 at 08:05:11AM +1000, Dave Chinner wrote: > On Tue, Aug 09, 2022 at 06:56:15PM +0200, Uros Bizjak wrote: > > Use `!atomic64_try_cmpxchg(ptr, &old, new)` instead of > > `atomic64_cmpxchg(ptr, old, new) != old` in xlog_grant_{add,sub}_space. > > This has two benefits: > > > > - The x86 cmpxchg instruction returns success in the ZF flag, so this > > change saves a compare after cmpxchg, as well as a related move > > instruction in the front of cmpxchg. > > > > - atomic64_try_cmpxchg implicitly assigns the *ptr value to &old when > > cmpxchg fails, enabling further code simplifications. > > Do the two cmpxchg operations have the same memory ordering > semantics on failure? > > > This patch has no functional change. > > The patch looks ok, but .... > > ... I'm about 2 hours away from posting a patchset that completely > removes the cmpxchg and the new grant head accounting has > significantly lower fast path overhead. It also opens the door for > tracking more than 2GB of log space in the grant heads. FYI, the original RFC for this was posted a bit over a month ago: https://lore.kernel.org/linux-xfs/20220708015558.1134330-1-david@xxxxxxxxxxxxx/ Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx