[Cluster-devel] [dlm:next 14/16] fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32

Rong Chen rong.a.chen at intel.com
Thu May 27 01:45:38 UTC 2021



On 5/26/21 11:20 PM, Alexander Ahring Oder Aring wrote:
> Hi,
>
> before somebody tried to fix it. Some comments, see below.
>
> On Tue, May 25, 2021 at 5:17 PM kernel test robot <lkp at intel.com> wrote:
>> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git next
>> head:   706474fbc5fedd7799b488962aad3541b235165b
>> commit: 489d8e559c6596eb08e16447d9830bc39afbe54e [14/16] fs: dlm: add reliable connection if reconnect
>> config: m68k-randconfig-s031-20210525 (attached as .config)
>> compiler: m68k-linux-gcc (GCC) 9.3.0
>> reproduce:
>>          wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>>          chmod +x ~/bin/make.cross
>>          # apt-get install sparse
>>          # sparse version: v0.6.3-341-g8af24329-dirty
>>          # https://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git/commit/?id=489d8e559c6596eb08e16447d9830bc39afbe54e
>>          git remote add dlm https://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git
>>          git fetch --no-tags dlm next
>>          git checkout 489d8e559c6596eb08e16447d9830bc39afbe54e
>>          # save the attached .config to linux build tree
>>          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=m68k
>>
>> If you fix the issue, kindly add following tag as appropriate
>> Reported-by: kernel test robot <lkp at intel.com>
>>
>>
>> sparse warnings: (new ones prefixed by >>)
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>>> fs/dlm/midcomms.c:541:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:634:19: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:634:19: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:634:19: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:634:19: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:636:16: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:636:16: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:636:16: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:636:16: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:674:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:674:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:674:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:674:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:693:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:703:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:712:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:722:42: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:722:42: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:722:42: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:722:42: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:725:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:725:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:725:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:725:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:760:23: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:794:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:794:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:794:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:794:27: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:854:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:854:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:854:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:854:26: sparse: sparse: cast to restricted __le16
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:868:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
>>     fs/dlm/midcomms.c:876:25: sparse: sparse: cast to restricted __le32
> We can ignore it for now. The dlm code does some endian transfer with
> cpu_to_leFOO() and vice versa and never uses any __leFOO define. See
> header_in()/out() functions. Sure somebody is welcome to send patches
> and make sparse happy but it requires more code changes.
>
>>>> fs/dlm/midcomms.c:969:20: sparse: sparse: context imbalance in 'dlm_midcomms_get_mhandle' - wrong count at exit
>>     fs/dlm/midcomms.c:1045:33: sparse: sparse: context imbalance in 'dlm_midcomms_commit_mhandle' - unexpected unlock
>>
> That is false positive, we always assume a successful get_mhandle()
> triggers a commit_mhandle() and we keep the srcu nodes locked so that
> a reference isn't be freed, avoiding an extra lookup. There is also no
> logic to revert an allocated buffer, the complicated part will be to
> rearrange the buffer in the page buffer then which seems to be quite
> complex, so if there is a get_mhandle() there must be a
> commit_mhandle(). That was always be the case.
>
> - Alex
>

Hi Alex,

yes, the 'context imbalance' warning is false positive in most cases,
we can't ignore it because it can find real issue occasionally, thanks 
for the
detailed explanation.

Best Regards,
Rong Chen




More information about the Cluster-devel mailing list