* [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.