Re: [PATCH 4/6] autofs - use struct for mount params

From: Ian Kent
Date: Wed Nov 14 2018 - 00:56:17 EST


On Wed, 2018-11-14 at 09:54 +0800, kbuild test robot wrote:
> Hi Ian,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.20-rc2]
> [cannot apply to next-20181113]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system]
>
> url:
> https://github.com/0day-ci/linux/commits/Ian-Kent/autofs-improve-ioctl-sbi-checks/20181114-021150
> config: i386-allmodconfig (attached as .config)
> compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=i386
>
> All errors (new ones prefixed by >>):
>
> fs/autofs/inode.c: In function 'autofs_fill_super':
> > > fs/autofs/inode.c:361:28: error: invalid type argument of '->' (have
> > > 'struct autofs_fs_params')
>
> root_inode->i_uid = params->uid;
> ^~
> fs/autofs/inode.c:362:28: error: invalid type argument of '->' (have
> 'struct autofs_fs_params')
> root_inode->i_gid = params->gid;
> ^~

Oh, I fixed that, I must have messed up somewhere, I'll check what I have
again.

Andrew, due to the patch order dependencies I think it would be best for
me to re-post the series so please ignore this series.

I'll put a v2 in the title of the re-posted series so they can be identified
(is that the right thing to do?).

>
> vim +361 fs/autofs/inode.c
>
> 313
> 314 int autofs_fill_super(struct super_block *s, void *data, int
> silent)
> 315 {
> 316 struct inode *root_inode;
> 317 struct dentry *root;
> 318 struct autofs_fs_params params;
> 319 struct autofs_sb_info *sbi;
> 320 struct autofs_info *ino;
> 321 int ret = -EINVAL;
> 322
> 323 sbi = autofs_alloc_sbi(s);
> 324 if (!sbi)
> 325 return -ENOMEM;
> 326
> 327 pr_debug("starting up, sbi = %p\n", sbi);
> 328
> 329 s->s_fs_info = sbi;
> 330 s->s_blocksize = 1024;
> 331 s->s_blocksize_bits = 10;
> 332 s->s_magic = AUTOFS_SUPER_MAGIC;
> 333 s->s_op = &autofs_sops;
> 334 s->s_d_op = &autofs_dentry_operations;
> 335 s->s_time_gran = 1;
> 336
> 337 /*
> 338 * Get the root inode and dentry, but defer checking for
> errors.
> 339 */
> 340 ino = autofs_new_ino(sbi);
> 341 if (!ino) {
> 342 ret = -ENOMEM;
> 343 goto fail_free;
> 344 }
> 345 root_inode = autofs_get_inode(s, S_IFDIR | 0755);
> 346 if (!root_inode) {
> 347 ret = -ENOMEM;
> 348 goto fail_ino;
> 349 }
> 350 root = d_make_root(root_inode);
> 351 if (!root)
> 352 goto fail_iput;
> 353
> 354 root->d_fsdata = ino;
> 355
> 356 memset(&params, 0, sizeof(struct autofs_fs_params));
> 357 if (autofs_parse_options(data, &params)) {
> 358 pr_err("called with bogus options\n");
> 359 goto fail_dput;
> 360 }
> > 361 root_inode->i_uid = params->uid;
> 362 root_inode->i_gid = params->gid;
> 363
> 364 ret = autofs_apply_sbi_options(sbi, &params);
> 365 if (ret)
> 366 goto fail_dput;
> 367
> 368 if (autofs_type_trigger(sbi->type))
> 369 __managed_dentry_set_managed(root);
> 370
> 371 root_inode->i_fop = &autofs_root_operations;
> 372 root_inode->i_op = &autofs_dir_inode_operations;
> 373
> 374 /*
> 375 * Success! Install the root dentry now to indicate
> completion.
> 376 */
> 377 s->s_root = root;
> 378 return 0;
> 379
> 380 /*
> 381 * Failure ... clean up.
> 382 */
> 383 fail_dput:
> 384 dput(root);
> 385 goto fail_free;
> 386 fail_iput:
> 387 iput(root_inode);
> 388 fail_ino:
> 389 autofs_free_ino(ino);
> 390 fail_free:
> 391 kfree(sbi);
> 392 s->s_fs_info = NULL;
> 393 return ret;
> 394 }
> 395
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation