tree:
https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git
ceph-async-dirops
head: 084686f8f56db9193e8881e8be1869d3b264dede
commit: 084686f8f56db9193e8881e8be1869d3b264dede [19/19] ceph: attempt to do async create
when possible
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 7.5.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 084686f8f56db9193e8881e8be1869d3b264dede
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=m68k
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
fs/ceph/file.c: In function 'ceph_atomic_open':
> fs/ceph/file.c:526:22: error: 'ceph_async_create_cb'
undeclared (first use in this function); did you mean 'ceph_async_iput'?
req->r_callback = ceph_async_create_cb;
^~~~~~~~~~~~~~~~~~~~
ceph_async_iput
fs/ceph/file.c:526:22: note: each undeclared identifier is reported only once for each
function it appears in
fs/ceph/file.c:529:4: warning: statement with no effect [-Wunused-value]
0:
^
> fs/ceph/file.c:529:5: error: expected ';' before
':' token
0:
^
fs/ceph/file.c:532:4: warning: statement with no effect [-Wunused-value]
-ECHILD:
^
fs/ceph/file.c:532:11: error: expected ';' before ':' token
-ECHILD:
^
> fs/ceph/file.c:535:4: error: label at end of compound statement
default:
^~~~~~~
fs/ceph/file.c:476:7: warning: unused variable 'do_async' [-Wunused-variable]
bool do_async;
^~~~~~~~
vim +526 fs/ceph/file.c
461
462 /*
463 * Do a lookup + open with a single request. If we get a non-existent
464 * file or symlink, return 1 so the VFS can retry.
465 */
466 int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
467 struct file *file, unsigned flags, umode_t mode)
468 {
469 struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);
470 struct ceph_mds_client *mdsc = fsc->mdsc;
471 struct ceph_mds_request *req;
472 struct dentry *dn;
473 struct ceph_acl_sec_ctx as_ctx = {};
474 int mask;
475 int err;
476 bool do_async;
477
478 dout("atomic_open %p dentry %p '%pd' %s flags %d mode 0%o\n",
479 dir, dentry, dentry,
480 d_unhashed(dentry) ? "unhashed" : "hashed", flags,
mode);
481
482 err = ceph_async_dirop_request_wait(dir);
483 if (err)
484 return err;
485
486 if (dentry->d_name.len > NAME_MAX)
487 return -ENAMETOOLONG;
488
489 if (flags & O_CREAT) {
490 if (ceph_quota_is_max_files_exceeded(dir))
491 return -EDQUOT;
492 err = ceph_pre_init_acls(dir, &mode, &as_ctx);
493 if (err < 0)
494 return err;
495 err = ceph_security_init_secctx(dentry, mode, &as_ctx);
496 if (err < 0)
497 goto out_ctx;
498 } else if (!d_in_lookup(dentry)) {
499 /* If it's not being looked up, it's negative */
500 return -ENOENT;
501 }
502
503 /* do the open */
504 req = prepare_open_request(dir->i_sb, flags, mode);
505 if (IS_ERR(req)) {
506 err = PTR_ERR(req);
507 goto out_ctx;
508 }
509 req->r_dentry = dget(dentry);
510 req->r_num_caps = 2;
511 mask = CEPH_STAT_CAP_INODE | CEPH_CAP_AUTH_SHARED;
512 if (ceph_security_xattr_wanted(dir))
513 mask |= CEPH_CAP_XATTR_SHARED;
514 req->r_args.open.mask = cpu_to_le32(mask);
515 req->r_parent = dir;
516
517 if (flags & O_CREAT) {
518 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL;
519 req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
520 if (as_ctx.pagelist) {
521 req->r_pagelist = as_ctx.pagelist;
522 as_ctx.pagelist = NULL;
523 }
524 if (get_caps_for_async_create(dir, dentry)) {
525 set_bit(CEPH_MDS_R_DELEG_INO, &req->r_req_flags);
526 req->r_callback = ceph_async_create_cb;
527 err
= ceph_mdsc_submit_request(mdsc, dir, req);
528 switch (err) {
529 0:
530 /* set up inode, dentry and return */
531 break;
532 -ECHILD:
533 /* do a sync create */
534 break;
535 default:
536 }
537 if (err != -ECHILD)
538 goto out_req;
539 }
540 }
541
542 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags);
543
544 err = ceph_mdsc_do_request(mdsc,
545 (flags & (O_CREAT|O_TRUNC)) ? dir : NULL,
546 req);
547 err = ceph_handle_snapdir(req, dentry, err);
548 if (err)
549 goto out_req;
550
551 if ((flags & O_CREAT) && !req->r_reply_info.head->is_dentry)
552 err = ceph_handle_notrace_create(dir, dentry);
553
554 if (d_in_lookup(dentry)) {
555 dn = ceph_finish_lookup(req, dentry, err);
556 if (IS_ERR(dn))
557 err = PTR_ERR(dn);
558 } else {
559 /* we were given a hashed negative dentry */
560 dn = NULL;
561 }
562 if (err)
563 goto out_req;
564 if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) {
565 /* make vfs retry on splice, ENOENT, or symlink */
566 dout("atomic_open finish_no_open on dn %p\n", dn);
567 err = finish_no_open(file, dn);
568 } else {
569 dout("atomic_open finish_open on dn %p\n", dn);
570 if (req->r_op == CEPH_MDS_OP_CREATE &&
req->r_reply_info.has_create_ino) {
571 ceph_init_inode_acls(d_inode(dentry), &as_ctx);
572 file->f_mode |= FMODE_CREATED;
573 }
574 err = finish_open(file, dentry, ceph_open);
575 }
576 out_req:
577 if (!req->r_err && req->r_target_inode)
578 ceph_put_fmode(ceph_inode(req->r_target_inode), req->r_fmode);
579 ceph_mdsc_put_request(req);
580 out_ctx:
581 ceph_release_acl_sec_ctx(&as_ctx);
582 dout("atomic_open result=%d\n", err);
583 return err;
584 }
585
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation