From: kernel test robot <lkp@intel.com>
To: Max Kellermann <max.kellermann@ionos.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
ceph-devel@vger.kernel.org, Alex Markuze <amarkuze@redhat.com>
Subject: [ceph-client:testing 25/27] fs/ceph/file.c:2573:7: error: use of undeclared identifier 'CEPH_MOUNT_OPT_NEARFULL_SYNC'
Date: Wed, 08 Jul 2026 03:12:53 +0200 [thread overview]
Message-ID: <202607080354.apa5Nv1u-lkp@intel.com> (raw)
tree: https://github.com/ceph/ceph-client.git testing
head: fc67edb66b3c9924c4e0bb366a92b32ea13c526a
commit: cb4ac0e6565fe667dba2760b6a012306e6f796e0 [25/27] ceph: fix hanging __ceph_get_caps() with stale `mds_wanted`
config: x86_64-rhel-9.4-rust (https://download.01.org/0day-ci/archive/20260708/202607080354.apa5Nv1u-lkp@intel.com/config)
compiler: clang version 22.1.8 (https://github.com/llvm/llvm-project ca7933e47d3a3451d81e72ac174dcb5aa28b59d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260708/202607080354.apa5Nv1u-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607080354.apa5Nv1u-lkp@intel.com/
All errors (new ones prefixed by >>):
>> fs/ceph/file.c:2573:7: error: use of undeclared identifier 'CEPH_MOUNT_OPT_NEARFULL_SYNC'
2573 | if (ceph_test_mount_opt(fsc, NEARFULL_SYNC) &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ceph/super.h:60:36: note: expanded from macro 'ceph_test_mount_opt'
60 | (!!((fsc)->mount_options->flags & CEPH_MOUNT_OPT_##opt))
| ^~~~~~~~~~~~~~~~~~~~
<scratch space>:27:1: note: expanded from here
27 | CEPH_MOUNT_OPT_NEARFULL_SYNC
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
vim +/CEPH_MOUNT_OPT_NEARFULL_SYNC +2573 fs/ceph/file.c
2395
2396 /*
2397 * Take cap references to avoid releasing caps to MDS mid-write.
2398 *
2399 * If we are synchronous, and write with an old snap context, the OSD
2400 * may return EOLDSNAPC. In that case, retry the write.. _after_
2401 * dropping our cap refs and allowing the pending snap to logically
2402 * complete _before_ this write occurs.
2403 *
2404 * If requested, nearfull writes are synced to preserve the legacy
2405 * client-side backpressure behavior.
2406 */
2407 static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
2408 {
2409 struct file *file = iocb->ki_filp;
2410 struct ceph_file_info *fi = file->private_data;
2411 struct inode *inode = file_inode(file);
2412 struct ceph_inode_info *ci = ceph_inode(inode);
2413 struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
2414 struct ceph_client *cl = fsc->client;
2415 struct ceph_osd_client *osdc = &fsc->client->osdc;
2416 struct ceph_cap_flush *prealloc_cf;
2417 ssize_t count, written = 0;
2418 int err, want = 0, got;
2419 bool direct_lock = false;
2420 u32 map_flags;
2421 u64 pool_flags;
2422 loff_t pos;
2423 loff_t limit = max(i_size_read(inode), fsc->max_file_size);
2424
2425 if (ceph_inode_is_shutdown(inode))
2426 return -ESTALE;
2427
2428 if (ceph_snap(inode) != CEPH_NOSNAP)
2429 return -EROFS;
2430
2431 prealloc_cf = ceph_alloc_cap_flush();
2432 if (!prealloc_cf)
2433 return -ENOMEM;
2434
2435 if ((iocb->ki_flags & (IOCB_DIRECT | IOCB_APPEND)) == IOCB_DIRECT)
2436 direct_lock = true;
2437
2438 retry_snap:
2439 err = direct_lock ? ceph_start_io_direct(inode) :
2440 ceph_start_io_write(inode);
2441 if (err)
2442 goto out_unlocked;
2443
2444 if (iocb->ki_flags & IOCB_APPEND) {
2445 err = ceph_do_getattr(inode, CEPH_STAT_CAP_SIZE, false);
2446 if (err < 0)
2447 goto out;
2448 }
2449
2450 err = generic_write_checks(iocb, from);
2451 if (err <= 0)
2452 goto out;
2453
2454 pos = iocb->ki_pos;
2455 if (unlikely(pos >= limit)) {
2456 err = -EFBIG;
2457 goto out;
2458 } else {
2459 iov_iter_truncate(from, limit - pos);
2460 }
2461
2462 count = iov_iter_count(from);
2463 if (ceph_quota_is_max_bytes_exceeded(inode, pos + count)) {
2464 err = -EDQUOT;
2465 goto out;
2466 }
2467
2468 down_read(&osdc->lock);
2469 map_flags = osdc->osdmap->flags;
2470 pool_flags = ceph_pg_pool_flags(osdc->osdmap, ci->i_layout.pool_id);
2471 up_read(&osdc->lock);
2472 if ((map_flags & CEPH_OSDMAP_FULL) ||
2473 (pool_flags & CEPH_POOL_FLAG_FULL)) {
2474 err = -ENOSPC;
2475 goto out;
2476 }
2477
2478 err = file_remove_privs(file);
2479 if (err)
2480 goto out;
2481
2482 doutc(cl, "%p %llx.%llx %llu~%zd getting caps. i_size %llu\n",
2483 inode, ceph_vinop(inode), pos, count,
2484 i_size_read(inode));
2485 if (!(fi->flags & CEPH_F_SYNC) && !direct_lock)
2486 want |= CEPH_CAP_FILE_BUFFER;
2487 if (fi->fmode & CEPH_FILE_MODE_LAZY)
2488 want |= CEPH_CAP_FILE_LAZYIO;
2489 got = 0;
2490 err = ceph_get_caps(file, CEPH_CAP_FILE_WR, want, pos + count, &got);
2491 if (err < 0)
2492 goto out;
2493
2494 err = file_update_time(file);
2495 if (err)
2496 goto out_caps;
2497
2498 inode_inc_iversion_raw(inode);
2499
2500 doutc(cl, "%p %llx.%llx %llu~%zd got cap refs on %s\n",
2501 inode, ceph_vinop(inode), pos, count, ceph_cap_string(got));
2502
2503 if ((got & (CEPH_CAP_FILE_BUFFER|CEPH_CAP_FILE_LAZYIO)) == 0 ||
2504 (iocb->ki_flags & IOCB_DIRECT) || (fi->flags & CEPH_F_SYNC) ||
2505 test_bit(CEPH_I_ERROR_WRITE_BIT, &ci->i_ceph_flags)) {
2506 struct ceph_snap_context *snapc;
2507 struct iov_iter data;
2508
2509 spin_lock(&ci->i_ceph_lock);
2510 if (__ceph_have_pending_cap_snap(ci)) {
2511 struct ceph_cap_snap *capsnap =
2512 list_last_entry(&ci->i_cap_snaps,
2513 struct ceph_cap_snap,
2514 ci_item);
2515 snapc = ceph_get_snap_context(capsnap->context);
2516 } else {
2517 BUG_ON(!ci->i_head_snapc);
2518 snapc = ceph_get_snap_context(ci->i_head_snapc);
2519 }
2520 spin_unlock(&ci->i_ceph_lock);
2521
2522 /* we might need to revert back to that point */
2523 data = *from;
2524 if ((iocb->ki_flags & IOCB_DIRECT) && !IS_ENCRYPTED(inode))
2525 written = ceph_direct_read_write(iocb, &data, snapc,
2526 &prealloc_cf);
2527 else
2528 written = ceph_sync_write(iocb, &data, pos, snapc);
2529 if (direct_lock)
2530 ceph_end_io_direct(inode);
2531 else
2532 ceph_end_io_write(inode);
2533 if (written > 0)
2534 iov_iter_advance(from, written);
2535 ceph_put_snap_context(snapc);
2536 } else {
2537 /*
2538 * No need to acquire the i_truncate_mutex. Because
2539 * the MDS revokes Fwb caps before sending truncate
2540 * message to us. We can't get Fwb cap while there
2541 * are pending vmtruncate. So write and vmtruncate
2542 * can not run at the same time
2543 */
2544 written = generic_perform_write(iocb, from);
2545 ceph_end_io_write(inode);
2546 }
2547
2548 if (written >= 0) {
2549 int dirty;
2550
2551 spin_lock(&ci->i_ceph_lock);
2552 dirty = __ceph_mark_dirty_caps(ci, CEPH_CAP_FILE_WR,
2553 &prealloc_cf);
2554 spin_unlock(&ci->i_ceph_lock);
2555 if (dirty)
2556 __mark_inode_dirty(inode, dirty);
2557 if (ceph_quota_is_max_bytes_approaching(inode, iocb->ki_pos))
2558 ceph_check_caps(ci, CHECK_CAPS_FLUSH);
2559 }
2560
2561 doutc(cl, "%p %llx.%llx %llu~%u dropping cap refs on %s\n",
2562 inode, ceph_vinop(inode), pos, (unsigned)count,
2563 ceph_cap_string(got));
2564 ceph_put_cap_refs(ci, got);
2565
2566 if (written == -EOLDSNAPC) {
2567 doutc(cl, "%p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n",
2568 inode, ceph_vinop(inode), pos, (unsigned)count);
2569 goto retry_snap;
2570 }
2571
2572 if (written >= 0) {
> 2573 if (ceph_test_mount_opt(fsc, NEARFULL_SYNC) &&
2574 ((map_flags & CEPH_OSDMAP_NEARFULL) ||
2575 (pool_flags & CEPH_POOL_FLAG_NEARFULL)))
2576 iocb->ki_flags |= IOCB_DSYNC;
2577 written = generic_write_sync(iocb, written);
2578 }
2579
2580 goto out_unlocked;
2581 out_caps:
2582 ceph_put_cap_refs(ci, got);
2583 out:
2584 if (direct_lock)
2585 ceph_end_io_direct(inode);
2586 else
2587 ceph_end_io_write(inode);
2588 out_unlocked:
2589 ceph_free_cap_flush(prealloc_cf);
2590 return written ? written : err;
2591 }
2592
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2026-07-08 1:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 1:12 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-07-09 11:39 [ceph-client:testing 25/27] fs/ceph/file.c:2573:7: error: use of undeclared identifier 'CEPH_MOUNT_OPT_NEARFULL_SYNC' kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202607080354.apa5Nv1u-lkp@intel.com \
--to=lkp@intel.com \
--cc=amarkuze@redhat.com \
--cc=ceph-devel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=max.kellermann@ionos.com \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox