Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-18517

incompatible pointer types passing 'struct fs_disk_quota *'

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • Lustre 2.17.0
    • None
    • None
    • 3
    • 9223372036854775807

    Description

      While lustre is building by clang (clang-18.1.3), an error reported below.

      [    0.000000] Linux version 6.8.0-49-generic-clang-2 (ubuntu@u2404-srv1) (Ubuntu clang version 18.1.3 (1ubuntu1), Ubuntu LLD 18.1.3) #4 SMP PREEMPT_DYNAMIC Thu Dec  5 14:18:20 UTC 2024 (Ubuntu 6.8.0-49.49-generic 6.8
      .12)
      
      $ sh ./autogen.sh
      $ ./configure CC=clang 'CFLAGS=-Wno-frame-address -Wno-incompatible-function-pointer-types' --with-linux=/home/ubuntu/linux-source-6.8.0/ LLVM=1
      
      - snip - 
      
        CC [M]  /home/ubuntu/lustre-release/lustre/osd-ldiskfs/osd_quota.o
      /home/ubuntu/lustre-release/lustre/osd-ldiskfs/osd_quota.c:137:38: error: incompatible pointer types passing 'struct fs_disk_quota *' to parameter of type 'struct qc_dqblk *' [-Werror,-Wincompatible-pointer-types]
        137 |         rc = sb->s_qcop->get_dqblk(sb, qid, dqblk);
            |                                             ^~~~~
      1 error generated.
      

      Attachments

        Activity

          [LU-18517] incompatible pointer types passing 'struct fs_disk_quota *'
          pjones Peter Jones added a comment -

          Merged for 2.17

          pjones Peter Jones added a comment - Merged for 2.17

          "Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/57320/
          Subject: LU-18517 quota: fix LC_HAVE_DQUOT_QC_DQBLK check
          Project: fs/lustre-release
          Branch: master
          Current Patch Set:
          Commit: fdab3cb777ccfe38fbaff60f7eb10e3939cc9683

          gerrit Gerrit Updater added a comment - "Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/57320/ Subject: LU-18517 quota: fix LC_HAVE_DQUOT_QC_DQBLK check Project: fs/lustre-release Branch: master Current Patch Set: Commit: fdab3cb777ccfe38fbaff60f7eb10e3939cc9683

          "Sohei Koyama <skoyama@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/57320
          Subject: LU-18517 quota: fix LC_HAVE_DQUOT_QC_DQBLK check
          Project: fs/lustre-release
          Branch: master
          Current Patch Set: 1
          Commit: 0de408fbb764d1f083792d18875b954c407e112d

          gerrit Gerrit Updater added a comment - "Sohei Koyama <skoyama@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/57320 Subject: LU-18517 quota: fix LC_HAVE_DQUOT_QC_DQBLK check Project: fs/lustre-release Branch: master Current Patch Set: 1 Commit: 0de408fbb764d1f083792d18875b954c407e112d
          skoyama Sohei Koyama added a comment -

          This error occurred because `LC_HAVE_DQUOT_QC_DQBLK` in lustre-core.m4 was not checked correctly.

          #
          # LC_HAVE_DQUOT_QC_DQBLK
          #
          # 3.19 has quotactl_ops->[sg]et_dqblk that take struct kqid and qc_dqblk
          # Added in commit 14bf61ffe
          #
          AC_DEFUN([LC_SRC_HAVE_DQUOT_QC_DQBLK], [
              LB2_LINUX_TEST_SRC([qc_dqblk], [
                  #include <linux/fs.h>
                  #include <linux/quota.h>
              ],[
                  ((struct quotactl_ops *)0)->set_dqblk(NULL, *((struct kqid*)0), (struct qc_dqblk*)0);
              ],[-Werror])
          ])
          AC_DEFUN([LC_HAVE_DQUOT_QC_DQBLK], [
              LB2_MSG_LINUX_TEST_RESULT([if 'quotactl_ops.set_dqblk' takes struct qc_dqblk],
              [qc_dqblk], [
                  AC_DEFINE(HAVE_DQUOT_QC_DQBLK, 1,
                      [quotactl_ops.set_dqblk takes struct qc_dqblk])
                  AC_DEFINE(HAVE_DQUOT_KQID, 1,
                      [quotactl_ops.set_dqblk takes struct kqid])
              ])
          ]) # LC_HAVE_DQUOT_QC_DQBLK 
          $ make modules -C /home/ubuntu/linux-source-6.8.0/ M=`pwd` CC=clang
          make: Entering directory '/home/ubuntu/linux-source-6.8.0'
            CC [M]  /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.o
          /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.c:76:47: error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference]
             76 |                 ((struct quotactl_ops *)0)->set_dqblk(NULL, *((struct kqid*)0), (struct qc_dqblk*)0);
                |                                                             ^~~~~~~~~~~~~~~~~~
          /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.c:76:47: note: consider using __builtin_trap() or qualifying pointer with 'volatile'
          1 error generated.
          make[2]: *** [scripts/Makefile.build:243: /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.o] Error 1
          make[1]: *** [/home/ubuntu/linux-source-6.8.0/Makefile:1925: /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc] Error 2
          make: *** [Makefile:240: __sub-make] Error 2
          make: Leaving directory '/home/ubuntu/linux-source-6.8.0'
          
          skoyama Sohei Koyama added a comment - This error occurred because `LC_HAVE_DQUOT_QC_DQBLK` in lustre-core.m4 was not checked correctly. # # LC_HAVE_DQUOT_QC_DQBLK # # 3.19 has quotactl_ops->[sg]et_dqblk that take struct kqid and qc_dqblk # Added in commit 14bf61ffe # AC_DEFUN([LC_SRC_HAVE_DQUOT_QC_DQBLK], [     LB2_LINUX_TEST_SRC([qc_dqblk], [         #include <linux/fs.h>         #include <linux/quota.h>     ],[         ((struct quotactl_ops *)0)->set_dqblk(NULL, *((struct kqid*)0), (struct qc_dqblk*)0);     ],[-Werror]) ]) AC_DEFUN([LC_HAVE_DQUOT_QC_DQBLK], [     LB2_MSG_LINUX_TEST_RESULT([ if 'quotactl_ops.set_dqblk' takes struct qc_dqblk],     [qc_dqblk], [         AC_DEFINE(HAVE_DQUOT_QC_DQBLK, 1,             [quotactl_ops.set_dqblk takes struct qc_dqblk])         AC_DEFINE(HAVE_DQUOT_KQID, 1,             [quotactl_ops.set_dqblk takes struct kqid])     ]) ]) # LC_HAVE_DQUOT_QC_DQBLK $ make modules -C /home/ubuntu/linux-source-6.8.0/ M=`pwd` CC=clang make: Entering directory '/home/ubuntu/linux-source-6.8.0' CC [M] /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.o /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.c:76:47: error: indirection of non-volatile null pointer will be deleted, not trap [-Werror,-Wnull-dereference] 76 | ((struct quotactl_ops *)0)->set_dqblk(NULL, *((struct kqid*)0), (struct qc_dqblk*)0); | ^~~~~~~~~~~~~~~~~~ /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.c:76:47: note: consider using __builtin_trap() or qualifying pointer with 'volatile' 1 error generated. make[2]: *** [scripts/Makefile.build:243: /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc/qc_dqblk_pc.o] Error 1 make[1]: *** [/home/ubuntu/linux-source-6.8.0/Makefile:1925: /home/ubuntu/lustre-release/_lpb/qc_dqblk_pc] Error 2 make: *** [Makefile:240: __sub-make] Error 2 make: Leaving directory '/home/ubuntu/linux-source-6.8.0'

          a workable solution.

          diff --git a/lustre/osd-ldiskfs/osd_quota.c b/lustre/osd-ldiskfs/osd_quota.c
          index 31264ee8e3..46ab67f5a9 100644
          --- a/lustre/osd-ldiskfs/osd_quota.c
          +++ b/lustre/osd-ldiskfs/osd_quota.c
          @@ -134,7 +134,7 @@ static int osd_acct_index_lookup(const struct lu_env *env,
                  type = fid2type(lu_object_fid(&dtobj->do_lu));
                  memset(dqblk, 0, sizeof(*dqblk));
                  qid = make_kqid(&init_user_ns, type, id);
          -       rc = sb->s_qcop->get_dqblk(sb, qid, dqblk);
          +       rc = sb->s_qcop->get_dqblk(sb, qid, (struct qc_dqblk *)dqblk);
                  if (rc)
                          RETURN(rc);
           #if defined(HAVE_DQUOT_QC_DQBLK)
          
          sihara Shuichi Ihara added a comment - a workable solution. diff --git a/lustre/osd-ldiskfs/osd_quota.c b/lustre/osd-ldiskfs/osd_quota.c index 31264ee8e3..46ab67f5a9 100644 --- a/lustre/osd-ldiskfs/osd_quota.c +++ b/lustre/osd-ldiskfs/osd_quota.c @@ -134,7 +134,7 @@ static int osd_acct_index_lookup(const struct lu_env *env, type = fid2type(lu_object_fid(&dtobj->do_lu)); memset(dqblk, 0, sizeof(*dqblk)); qid = make_kqid(&init_user_ns, type, id); - rc = sb->s_qcop->get_dqblk(sb, qid, dqblk); + rc = sb->s_qcop->get_dqblk(sb, qid, (struct qc_dqblk *)dqblk); if (rc) RETURN(rc); #if defined(HAVE_DQUOT_QC_DQBLK)

          People

            skoyama Sohei Koyama
            sihara Shuichi Ihara
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: