• D
    xfs: avoid unnecessary runtime sibling pointer endian conversions · 5672225e
    Dave Chinner 提交于
    Commit dc04db2a has caused a small aim7 regression, showing a
    small increase in CPU usage in __xfs_btree_check_sblock() as a
    result of the extra checking.
    
    This is likely due to the endian conversion of the sibling poitners
    being unconditional instead of relying on the compiler to endian
    convert the NULL pointer at compile time and avoiding the runtime
    conversion for this common case.
    
    Rework the checks so that endian conversion of the sibling pointers
    is only done if they are not null as the original code did.
    
    .... and these need to be "inline" because the compiler completely
    fails to inline them automatically like it should be doing.
    
    $ size fs/xfs/libxfs/xfs_btree.o*
       text	   data	    bss	    dec	    hex	filename
      51874	    240	      0	  52114	   cb92 fs/xfs/libxfs/xfs_btree.o.orig
      51562	    240	      0	  51802	   ca5a fs/xfs/libxfs/xfs_btree.o.inline
    
    Just when you think the tools have advanced sufficiently we don't
    have to care about stuff like this anymore, along comes a reminder
    that *our tools still suck*.
    
    Fixes: dc04db2a ("xfs: detect self referencing btree sibling pointers")
    Reported-by: Nkernel test robot <oliver.sang@intel.com>
    Signed-off-by: NDave Chinner <dchinner@redhat.com>
    Reviewed-by: NDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NDave Chinner <david@fromorbit.com>
    5672225e
xfs_btree.c 131.0 KB