All of lore.kernel.org
 help / color / mirror / Atom feed
* [hch-misc:quota-compat 4/4] fs/quota/quota.c:221:21: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2020-07-25 11:50 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-07-25 11:50 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 24818 bytes --]

tree:   git://git.infradead.org/users/hch/misc.git quota-compat
head:   7869dc95f0b4f7deb84d8d9ef6e216e48ef1d08d
commit: 7869dc95f0b4f7deb84d8d9ef6e216e48ef1d08d [4/4] quota: simplify the quotactl compat handling
config: openrisc-randconfig-s032-20200725 (attached as .config)
compiler: or1k-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.2-93-g4c6cbe55-dirty
        git checkout 7869dc95f0b4f7deb84d8d9ef6e216e48ef1d08d
        # 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__' ARCH=openrisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> fs/quota/quota.c:221:21: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned int *__pu_addr @@     got unsigned int [noderef] __user * @@
>> fs/quota/quota.c:221:21: sparse:     expected unsigned int *__pu_addr
   fs/quota/quota.c:221:21: sparse:     got unsigned int [noderef] __user *
   fs/quota/quota.c:295:21: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned int const *__gu_addr @@     got unsigned int [noderef] __user * @@
   fs/quota/quota.c:295:21: sparse:     expected unsigned int const *__gu_addr
   fs/quota/quota.c:295:21: sparse:     got unsigned int [noderef] __user *
   fs/quota/quota.c:408:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned int *__pu_addr @@     got unsigned int [noderef] __user * @@
   fs/quota/quota.c:408:13: sparse:     expected unsigned int *__pu_addr
   fs/quota/quota.c:408:13: sparse:     got unsigned int [noderef] __user *
>> fs/quota/quota.c:416:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected signed char *__pu_addr @@     got signed char [noderef] __user * @@
>> fs/quota/quota.c:416:13: sparse:     expected signed char *__pu_addr
>> fs/quota/quota.c:416:13: sparse:     got signed char [noderef] __user *
>> fs/quota/quota.c:417:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned short *__pu_addr @@     got unsigned short [noderef] __user * @@
>> fs/quota/quota.c:417:13: sparse:     expected unsigned short *__pu_addr
>> fs/quota/quota.c:417:13: sparse:     got unsigned short [noderef] __user *
   fs/quota/quota.c:418:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected signed char *__pu_addr @@     got signed char [noderef] __user * @@
   fs/quota/quota.c:418:13: sparse:     expected signed char *__pu_addr
   fs/quota/quota.c:418:13: sparse:     got signed char [noderef] __user *
   fs/quota/quota.c:421:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned int *__pu_addr @@     got unsigned int [noderef] __user * @@
   fs/quota/quota.c:421:13: sparse:     expected unsigned int *__pu_addr
   fs/quota/quota.c:421:13: sparse:     got unsigned int [noderef] __user *
>> fs/quota/quota.c:422:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected signed int *__pu_addr @@     got signed int [noderef] __user * @@
>> fs/quota/quota.c:422:13: sparse:     expected signed int *__pu_addr
>> fs/quota/quota.c:422:13: sparse:     got signed int [noderef] __user *
   fs/quota/quota.c:423:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected signed int *__pu_addr @@     got signed int [noderef] __user * @@
   fs/quota/quota.c:423:13: sparse:     expected signed int *__pu_addr
   fs/quota/quota.c:423:13: sparse:     got signed int [noderef] __user *
   fs/quota/quota.c:424:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected signed int *__pu_addr @@     got signed int [noderef] __user * @@
   fs/quota/quota.c:424:13: sparse:     expected signed int *__pu_addr
   fs/quota/quota.c:424:13: sparse:     got signed int [noderef] __user *
   fs/quota/quota.c:425:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned short *__pu_addr @@     got unsigned short [noderef] __user * @@
   fs/quota/quota.c:425:13: sparse:     expected unsigned short *__pu_addr
   fs/quota/quota.c:425:13: sparse:     got unsigned short [noderef] __user *
   fs/quota/quota.c:426:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected unsigned short *__pu_addr @@     got unsigned short [noderef] __user * @@
   fs/quota/quota.c:426:13: sparse:     expected unsigned short *__pu_addr
   fs/quota/quota.c:426:13: sparse:     got unsigned short [noderef] __user *
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from
   fs/quota/quota.c: note: in included file (through include/linux/sched/task.h, include/linux/sched/signal.h, include/linux/rcuwait.h, ...):
   include/linux/uaccess.h:131:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *to @@     got void [noderef] __user *to @@
   include/linux/uaccess.h:131:38: sparse:     expected void *to
   include/linux/uaccess.h:131:38: sparse:     got void [noderef] __user *to
   include/linux/uaccess.h:131:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got void const *from @@
   include/linux/uaccess.h:131:42: sparse:     expected void const [noderef] __user *from
   include/linux/uaccess.h:131:42: sparse:     got void const *from
   fs/quota/quota.c: note: in included file (through include/linux/uaccess.h, include/linux/sched/task.h, include/linux/sched/signal.h, ...):
   arch/openrisc/include/asm/uaccess.h:246:55: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const *from @@     got void const [noderef] __user *from @@
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     expected void const *from
   arch/openrisc/include/asm/uaccess.h:246:55: sparse:     got void const [noderef] __user *from

vim +221 fs/quota/quota.c

   197	
   198	static int quota_getquota(struct super_block *sb, int type, qid_t id,
   199				  void __user *addr)
   200	{
   201		struct kqid qid;
   202		struct qc_dqblk fdq;
   203		struct if_dqblk idq;
   204		int ret;
   205	
   206		if (!sb->s_qcop->get_dqblk)
   207			return -ENOSYS;
   208		qid = make_kqid(current_user_ns(), type, id);
   209		if (!qid_has_mapping(sb->s_user_ns, qid))
   210			return -EINVAL;
   211		ret = sb->s_qcop->get_dqblk(sb, qid, &fdq);
   212		if (ret)
   213			return ret;
   214		copy_to_if_dqblk(&idq, &fdq);
   215	
   216		if (compat_need_64bit_alignment_fixup()) {
   217			struct compat_if_dqblk __user *compat_dqblk = addr;
   218	
   219			if (copy_to_user(compat_dqblk, &idq, sizeof(*compat_dqblk)))
   220				return -EFAULT;
 > 221			if (put_user(idq.dqb_valid, &compat_dqblk->dqb_valid))
   222				return -EFAULT;
   223		} else {
   224			if (copy_to_user(addr, &idq, sizeof(idq)))
   225				return -EFAULT;
   226		}
   227		return 0;
   228	}
   229	
   230	/*
   231	 * Return quota for next active quota >= this id, if any exists,
   232	 * otherwise return -ENOENT via ->get_nextdqblk
   233	 */
   234	static int quota_getnextquota(struct super_block *sb, int type, qid_t id,
   235				  void __user *addr)
   236	{
   237		struct kqid qid;
   238		struct qc_dqblk fdq;
   239		struct if_nextdqblk idq;
   240		int ret;
   241	
   242		if (!sb->s_qcop->get_nextdqblk)
   243			return -ENOSYS;
   244		qid = make_kqid(current_user_ns(), type, id);
   245		if (!qid_has_mapping(sb->s_user_ns, qid))
   246			return -EINVAL;
   247		ret = sb->s_qcop->get_nextdqblk(sb, &qid, &fdq);
   248		if (ret)
   249			return ret;
   250		/* struct if_nextdqblk is a superset of struct if_dqblk */
   251		copy_to_if_dqblk((struct if_dqblk *)&idq, &fdq);
   252		idq.dqb_id = from_kqid(current_user_ns(), qid);
   253		if (copy_to_user(addr, &idq, sizeof(idq)))
   254			return -EFAULT;
   255		return 0;
   256	}
   257	
   258	static void copy_from_if_dqblk(struct qc_dqblk *dst, struct if_dqblk *src)
   259	{
   260		dst->d_spc_hardlimit = qbtos(src->dqb_bhardlimit);
   261		dst->d_spc_softlimit = qbtos(src->dqb_bsoftlimit);
   262		dst->d_space = src->dqb_curspace;
   263		dst->d_ino_hardlimit = src->dqb_ihardlimit;
   264		dst->d_ino_softlimit = src->dqb_isoftlimit;
   265		dst->d_ino_count = src->dqb_curinodes;
   266		dst->d_spc_timer = src->dqb_btime;
   267		dst->d_ino_timer = src->dqb_itime;
   268	
   269		dst->d_fieldmask = 0;
   270		if (src->dqb_valid & QIF_BLIMITS)
   271			dst->d_fieldmask |= QC_SPC_SOFT | QC_SPC_HARD;
   272		if (src->dqb_valid & QIF_SPACE)
   273			dst->d_fieldmask |= QC_SPACE;
   274		if (src->dqb_valid & QIF_ILIMITS)
   275			dst->d_fieldmask |= QC_INO_SOFT | QC_INO_HARD;
   276		if (src->dqb_valid & QIF_INODES)
   277			dst->d_fieldmask |= QC_INO_COUNT;
   278		if (src->dqb_valid & QIF_BTIME)
   279			dst->d_fieldmask |= QC_SPC_TIMER;
   280		if (src->dqb_valid & QIF_ITIME)
   281			dst->d_fieldmask |= QC_INO_TIMER;
   282	}
   283	
   284	static int quota_setquota(struct super_block *sb, int type, qid_t id,
   285				  void __user *addr)
   286	{
   287		struct qc_dqblk fdq;
   288		struct if_dqblk idq;
   289		struct kqid qid;
   290	
   291		if (compat_need_64bit_alignment_fixup()) {
   292			struct compat_if_dqblk __user *compat_dqblk = addr;
   293	
   294			if (copy_from_user(&idq, compat_dqblk, sizeof(*compat_dqblk)) ||
   295			    get_user(idq.dqb_valid, &compat_dqblk->dqb_valid))
   296				return -EFAULT;
   297		} else {
   298			if (copy_from_user(&idq, addr, sizeof(idq)))
   299				return -EFAULT;
   300		}
   301		if (!sb->s_qcop->set_dqblk)
   302			return -ENOSYS;
   303		qid = make_kqid(current_user_ns(), type, id);
   304		if (!qid_has_mapping(sb->s_user_ns, qid))
   305			return -EINVAL;
   306		copy_from_if_dqblk(&fdq, &idq);
   307		return sb->s_qcop->set_dqblk(sb, qid, &fdq);
   308	}
   309	
   310	static int quota_enable(struct super_block *sb, void __user *addr)
   311	{
   312		__u32 flags;
   313	
   314		if (copy_from_user(&flags, addr, sizeof(flags)))
   315			return -EFAULT;
   316		if (!sb->s_qcop->quota_enable)
   317			return -ENOSYS;
   318		return sb->s_qcop->quota_enable(sb, flags);
   319	}
   320	
   321	static int quota_disable(struct super_block *sb, void __user *addr)
   322	{
   323		__u32 flags;
   324	
   325		if (copy_from_user(&flags, addr, sizeof(flags)))
   326			return -EFAULT;
   327		if (!sb->s_qcop->quota_disable)
   328			return -ENOSYS;
   329		return sb->s_qcop->quota_disable(sb, flags);
   330	}
   331	
   332	static int quota_state_to_flags(struct qc_state *state)
   333	{
   334		int flags = 0;
   335	
   336		if (state->s_state[USRQUOTA].flags & QCI_ACCT_ENABLED)
   337			flags |= FS_QUOTA_UDQ_ACCT;
   338		if (state->s_state[USRQUOTA].flags & QCI_LIMITS_ENFORCED)
   339			flags |= FS_QUOTA_UDQ_ENFD;
   340		if (state->s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED)
   341			flags |= FS_QUOTA_GDQ_ACCT;
   342		if (state->s_state[GRPQUOTA].flags & QCI_LIMITS_ENFORCED)
   343			flags |= FS_QUOTA_GDQ_ENFD;
   344		if (state->s_state[PRJQUOTA].flags & QCI_ACCT_ENABLED)
   345			flags |= FS_QUOTA_PDQ_ACCT;
   346		if (state->s_state[PRJQUOTA].flags & QCI_LIMITS_ENFORCED)
   347			flags |= FS_QUOTA_PDQ_ENFD;
   348		return flags;
   349	}
   350	
   351	static int quota_getstate(struct super_block *sb, int type,
   352				  struct fs_quota_stat *fqs)
   353	{
   354		struct qc_state state;
   355		int ret;
   356	
   357		memset(&state, 0, sizeof (struct qc_state));
   358		ret = sb->s_qcop->get_state(sb, &state);
   359		if (ret < 0)
   360			return ret;
   361	
   362		memset(fqs, 0, sizeof(*fqs));
   363		fqs->qs_version = FS_QSTAT_VERSION;
   364		fqs->qs_flags = quota_state_to_flags(&state);
   365		/* No quota enabled? */
   366		if (!fqs->qs_flags)
   367			return -ENOSYS;
   368		fqs->qs_incoredqs = state.s_incoredqs;
   369	
   370		fqs->qs_btimelimit = state.s_state[type].spc_timelimit;
   371		fqs->qs_itimelimit = state.s_state[type].ino_timelimit;
   372		fqs->qs_rtbtimelimit = state.s_state[type].rt_spc_timelimit;
   373		fqs->qs_bwarnlimit = state.s_state[type].spc_warnlimit;
   374		fqs->qs_iwarnlimit = state.s_state[type].ino_warnlimit;
   375	
   376		/* Inodes may be allocated even if inactive; copy out if present */
   377		if (state.s_state[USRQUOTA].ino) {
   378			fqs->qs_uquota.qfs_ino = state.s_state[USRQUOTA].ino;
   379			fqs->qs_uquota.qfs_nblks = state.s_state[USRQUOTA].blocks;
   380			fqs->qs_uquota.qfs_nextents = state.s_state[USRQUOTA].nextents;
   381		}
   382		if (state.s_state[GRPQUOTA].ino) {
   383			fqs->qs_gquota.qfs_ino = state.s_state[GRPQUOTA].ino;
   384			fqs->qs_gquota.qfs_nblks = state.s_state[GRPQUOTA].blocks;
   385			fqs->qs_gquota.qfs_nextents = state.s_state[GRPQUOTA].nextents;
   386		}
   387		if (state.s_state[PRJQUOTA].ino) {
   388			/*
   389			 * Q_XGETQSTAT doesn't have room for both group and project
   390			 * quotas.  So, allow the project quota values to be copied out
   391			 * only if there is no group quota information available.
   392			 */
   393			if (!(state.s_state[GRPQUOTA].flags & QCI_ACCT_ENABLED)) {
   394				fqs->qs_gquota.qfs_ino = state.s_state[PRJQUOTA].ino;
   395				fqs->qs_gquota.qfs_nblks =
   396						state.s_state[PRJQUOTA].blocks;
   397				fqs->qs_gquota.qfs_nextents =
   398						state.s_state[PRJQUOTA].nextents;
   399			}
   400		}
   401		return 0;
   402	}
   403	
   404	static int compat_copy_fs_qfilestat(struct compat_fs_qfilestat __user *to,
   405			struct fs_qfilestat *from)
   406	{
   407		if (copy_to_user(to, from, sizeof(*to)) ||
   408		    put_user(from->qfs_nextents, &to->qfs_nextents))
   409			return -EFAULT;
   410		return 0;
   411	}
   412	
   413	static int compat_copy_fs_quota_stat(struct compat_fs_quota_stat __user *to,
   414			struct fs_quota_stat *from)
   415	{
 > 416		if (put_user(from->qs_version, &to->qs_version) ||
 > 417		    put_user(from->qs_flags, &to->qs_flags) ||
   418		    put_user(from->qs_pad, &to->qs_pad) ||
   419		    compat_copy_fs_qfilestat(&to->qs_uquota, &from->qs_uquota) ||
   420		    compat_copy_fs_qfilestat(&to->qs_gquota, &from->qs_gquota) ||
   421		    put_user(from->qs_incoredqs, &to->qs_incoredqs) ||
   422		    put_user(from->qs_btimelimit, &to->qs_btimelimit) ||
   423		    put_user(from->qs_itimelimit, &to->qs_itimelimit) ||
   424		    put_user(from->qs_rtbtimelimit, &to->qs_rtbtimelimit) ||
   425		    put_user(from->qs_bwarnlimit, &to->qs_bwarnlimit) ||
   426		    put_user(from->qs_iwarnlimit, &to->qs_iwarnlimit))
   427			return -EFAULT;
   428		return 0;
   429	}
   430	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 24970 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-07-25 11:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-25 11:50 [hch-misc:quota-compat 4/4] fs/quota/quota.c:221:21: sparse: sparse: incorrect type in initializer (different address spaces) kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.