• Dave Chinner's avatar
    xfs: silence sparse warning when checking version number · 27a7a9d9
    Dave Chinner authored
    Scrub checks the superblock version number against the known good
    feature bits that can be set in the version mask. It calculates
    the version mask to compare like so:
    
    	vernum_mask = cpu_to_be16(~XFS_SB_VERSION_OKBITS |
                                      XFS_SB_VERSION_NUMBITS |
                                      XFS_SB_VERSION_ALIGNBIT |
                                      XFS_SB_VERSION_DALIGNBIT |
                                      XFS_SB_VERSION_SHAREDBIT |
                                      XFS_SB_VERSION_LOGV2BIT |
                                      XFS_SB_VERSION_SECTORBIT |
                                      XFS_SB_VERSION_EXTFLGBIT |
                                      XFS_SB_VERSION_DIRV2BIT);
    
    This generates a sparse warning:
    
    fs/xfs/scrub/agheader.c:168:23: warning: cast truncates bits from constant value (ffff3f8f becomes 3f8f)
    
    This is because '~XFS_SB_VERSION_OKBITS' is considered a 32 bit
    constant, even though it's value is always under 16 bits.
    
    This is a kinda silly thing to do, because:
    
    /*
     * Supported feature bit list is just all bits in the versionnum field because
     * we've used them all up and understand them all. Except, of course, for the
     * shared superblock bit, which nobody knows what it does and so is unsupported.
     */
    #define XFS_SB_VERSION_OKBITS           \
            ((XFS_SB_VERSION_NUMBITS | XFS_SB_VERSION_ALLFBITS) & \
                    ~XFS_SB_VERSION_SHAREDBIT)
    
    #define XFS_SB_VERSION_NUMBITS          0x000f
    #define XFS_SB_VERSION_ALLFBITS         0xfff0
    #define XFS_SB_VERSION_SHAREDBIT        0x0200
    
    XFS_SB_VERSION_OKBITS has a value of 0xfdff, and so
    ~XFS_SB_VERSION_OKBITS == XFS_SB_VERSION_SHAREDBIT.  The calculated
    mask already sets XFS_SB_VERSION_SHAREDBIT, so starting with
    ~XFS_SB_VERSION_OKBITS is completely redundant....
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
    27a7a9d9
agheader.c 25.9 KB