From: kernel test robot <lkp@intel.com>
To: colyli@fnnas.com, linux-bcache@vger.kernel.org
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
Coly Li <colyli@fnnas.com>,
Zhou Jifeng <zhoujifeng@kylinos.com.cn>
Subject: Re: [PATCH] bcache: avoid redundant access RB tree in read_dirty
Date: Sat, 11 Oct 2025 00:13:49 +0800 [thread overview]
Message-ID: <202510110048.PdCCuB3b-lkp@intel.com> (raw)
In-Reply-To: <20251007090232.30386-1-colyli@fnnas.com>
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.17 next-20251010]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/colyli-fnnas-com/bcache-avoid-redundant-access-RB-tree-in-read_dirty/20251010-103843
base: linus/master
patch link: https://lore.kernel.org/r/20251007090232.30386-1-colyli%40fnnas.com
patch subject: [PATCH] bcache: avoid redundant access RB tree in read_dirty
config: x86_64-buildonly-randconfig-001-20251010 (https://download.01.org/0day-ci/archive/20251011/202510110048.PdCCuB3b-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251011/202510110048.PdCCuB3b-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/202510110048.PdCCuB3b-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/md/bcache/writeback.c:592:2: warning: label at end of compound statement is a C23 extension [-Wc23-extensions]
592 | }
| ^
1 warning generated.
vim +592 drivers/md/bcache/writeback.c
cafe563591446c Kent Overstreet 2013-03-23 474
5e6926daac267d Kent Overstreet 2013-07-24 475 static void read_dirty(struct cached_dev *dc)
cafe563591446c Kent Overstreet 2013-03-23 476 {
6f10f7d1b02b1b Coly Li 2018-08-11 477 unsigned int delay = 0;
448f60e858d871 Coly Li 2025-10-07 478 struct keybuf_key *keys[MAX_WRITEBACKS_IN_PASS], *w;
448f60e858d871 Coly Li 2025-10-07 479 struct keybuf_key **dump_keys;
539d39eb270834 Tang Junhui 2018-01-08 480 size_t size;
448f60e858d871 Coly Li 2025-10-07 481 int checked, dump_nr;
539d39eb270834 Tang Junhui 2018-01-08 482 int nk, i;
cafe563591446c Kent Overstreet 2013-03-23 483 struct dirty_io *io;
5e6926daac267d Kent Overstreet 2013-07-24 484 struct closure cl;
6e6ccc67b9c7a6 Michael Lyle 2018-01-08 485 uint16_t sequence = 0;
5e6926daac267d Kent Overstreet 2013-07-24 486
6e6ccc67b9c7a6 Michael Lyle 2018-01-08 487 BUG_ON(!llist_empty(&dc->writeback_ordering_wait.list));
6e6ccc67b9c7a6 Michael Lyle 2018-01-08 488 atomic_set(&dc->writeback_sequence_next, sequence);
5e6926daac267d Kent Overstreet 2013-07-24 489 closure_init_stack(&cl);
cafe563591446c Kent Overstreet 2013-03-23 490
cafe563591446c Kent Overstreet 2013-03-23 491 /*
cafe563591446c Kent Overstreet 2013-03-23 492 * XXX: if we error, background writeback just spins. Should use some
cafe563591446c Kent Overstreet 2013-03-23 493 * mempools.
cafe563591446c Kent Overstreet 2013-03-23 494 */
448f60e858d871 Coly Li 2025-10-07 495 dump_nr = bch_keybuf_dump(&dc->writeback_keys,
448f60e858d871 Coly Li 2025-10-07 496 dc->writeback_keys.dump_keys,
448f60e858d871 Coly Li 2025-10-07 497 ARRAY_SIZE(dc->writeback_keys.dump_keys));
448f60e858d871 Coly Li 2025-10-07 498 dump_keys = dc->writeback_keys.dump_keys;
448f60e858d871 Coly Li 2025-10-07 499 atomic_set(&dc->writeback_keys.handled, 0);
448f60e858d871 Coly Li 2025-10-07 500 checked = 0;
5e6926daac267d Kent Overstreet 2013-07-24 501
771f393e8ffc9b Coly Li 2018-03-18 502 while (!kthread_should_stop() &&
771f393e8ffc9b Coly Li 2018-03-18 503 !test_bit(CACHE_SET_IO_DISABLE, &dc->disk.c->flags) &&
448f60e858d871 Coly Li 2025-10-07 504 (checked < dump_nr)) {
539d39eb270834 Tang Junhui 2018-01-08 505 size = 0;
539d39eb270834 Tang Junhui 2018-01-08 506 nk = 0;
539d39eb270834 Tang Junhui 2018-01-08 507
539d39eb270834 Tang Junhui 2018-01-08 508 do {
448f60e858d871 Coly Li 2025-10-07 509 w = dump_keys[checked];
448f60e858d871 Coly Li 2025-10-07 510 BUG_ON(ptr_stale(dc->disk.c, &w->key, 0));
539d39eb270834 Tang Junhui 2018-01-08 511
539d39eb270834 Tang Junhui 2018-01-08 512 /*
539d39eb270834 Tang Junhui 2018-01-08 513 * Don't combine too many operations, even if they
539d39eb270834 Tang Junhui 2018-01-08 514 * are all small.
539d39eb270834 Tang Junhui 2018-01-08 515 */
539d39eb270834 Tang Junhui 2018-01-08 516 if (nk >= MAX_WRITEBACKS_IN_PASS)
cafe563591446c Kent Overstreet 2013-03-23 517 break;
cafe563591446c Kent Overstreet 2013-03-23 518
539d39eb270834 Tang Junhui 2018-01-08 519 /*
539d39eb270834 Tang Junhui 2018-01-08 520 * If the current operation is very large, don't
539d39eb270834 Tang Junhui 2018-01-08 521 * further combine operations.
539d39eb270834 Tang Junhui 2018-01-08 522 */
539d39eb270834 Tang Junhui 2018-01-08 523 if (size >= MAX_WRITESIZE_IN_PASS)
539d39eb270834 Tang Junhui 2018-01-08 524 break;
cafe563591446c Kent Overstreet 2013-03-23 525
539d39eb270834 Tang Junhui 2018-01-08 526 /*
539d39eb270834 Tang Junhui 2018-01-08 527 * Operations are only eligible to be combined
539d39eb270834 Tang Junhui 2018-01-08 528 * if they are contiguous.
539d39eb270834 Tang Junhui 2018-01-08 529 *
539d39eb270834 Tang Junhui 2018-01-08 530 * TODO: add a heuristic willing to fire a
539d39eb270834 Tang Junhui 2018-01-08 531 * certain amount of non-contiguous IO per pass,
539d39eb270834 Tang Junhui 2018-01-08 532 * so that we can benefit from backing device
539d39eb270834 Tang Junhui 2018-01-08 533 * command queueing.
539d39eb270834 Tang Junhui 2018-01-08 534 */
539d39eb270834 Tang Junhui 2018-01-08 535 if ((nk != 0) && bkey_cmp(&keys[nk-1]->key,
448f60e858d871 Coly Li 2025-10-07 536 &START_KEY(&w->key)))
539d39eb270834 Tang Junhui 2018-01-08 537 break;
cafe563591446c Kent Overstreet 2013-03-23 538
448f60e858d871 Coly Li 2025-10-07 539 size += KEY_SIZE(&w->key);
448f60e858d871 Coly Li 2025-10-07 540 keys[nk++] = w;
448f60e858d871 Coly Li 2025-10-07 541 } while (++checked < dump_nr);
cafe563591446c Kent Overstreet 2013-03-23 542
539d39eb270834 Tang Junhui 2018-01-08 543 /* Now we have gathered a set of 1..5 keys to write back. */
539d39eb270834 Tang Junhui 2018-01-08 544 for (i = 0; i < nk; i++) {
539d39eb270834 Tang Junhui 2018-01-08 545 w = keys[i];
539d39eb270834 Tang Junhui 2018-01-08 546
d86eaa0f3c56da Christoph Hellwig 2025-09-08 547 io = kzalloc(sizeof(*io) + sizeof(struct bio_vec) *
d86eaa0f3c56da Christoph Hellwig 2025-09-08 548 DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS),
cafe563591446c Kent Overstreet 2013-03-23 549 GFP_KERNEL);
cafe563591446c Kent Overstreet 2013-03-23 550 if (!io)
cafe563591446c Kent Overstreet 2013-03-23 551 goto err;
cafe563591446c Kent Overstreet 2013-03-23 552
cafe563591446c Kent Overstreet 2013-03-23 553 w->private = io;
cafe563591446c Kent Overstreet 2013-03-23 554 io->dc = dc;
6e6ccc67b9c7a6 Michael Lyle 2018-01-08 555 io->sequence = sequence++;
cafe563591446c Kent Overstreet 2013-03-23 556
cafe563591446c Kent Overstreet 2013-03-23 557 dirty_init(w);
c34b7ac6508755 Christoph Hellwig 2022-12-06 558 io->bio.bi_opf = REQ_OP_READ;
4f024f3797c43c Kent Overstreet 2013-10-11 559 io->bio.bi_iter.bi_sector = PTR_OFFSET(&w->key, 0);
11e9560e6c005b Christoph Hellwig 2021-04-11 560 bio_set_dev(&io->bio, dc->disk.c->cache->bdev);
cafe563591446c Kent Overstreet 2013-03-23 561 io->bio.bi_end_io = read_dirty_endio;
cafe563591446c Kent Overstreet 2013-03-23 562
25d8be77e19224 Ming Lei 2017-12-18 563 if (bch_bio_alloc_pages(&io->bio, GFP_KERNEL))
cafe563591446c Kent Overstreet 2013-03-23 564 goto err_free;
cafe563591446c Kent Overstreet 2013-03-23 565
c37511b863f36c Kent Overstreet 2013-04-26 566 trace_bcache_writeback(&w->key);
cafe563591446c Kent Overstreet 2013-03-23 567
c2a4f3183a1248 Kent Overstreet 2013-09-23 568 down(&dc->in_flight);
539d39eb270834 Tang Junhui 2018-01-08 569
3be11dbab67a3e Coly Li 2018-08-11 570 /*
3be11dbab67a3e Coly Li 2018-08-11 571 * We've acquired a semaphore for the maximum
539d39eb270834 Tang Junhui 2018-01-08 572 * simultaneous number of writebacks; from here
539d39eb270834 Tang Junhui 2018-01-08 573 * everything happens asynchronously.
539d39eb270834 Tang Junhui 2018-01-08 574 */
5e6926daac267d Kent Overstreet 2013-07-24 575 closure_call(&io->cl, read_dirty_submit, NULL, &cl);
539d39eb270834 Tang Junhui 2018-01-08 576 }
cafe563591446c Kent Overstreet 2013-03-23 577
539d39eb270834 Tang Junhui 2018-01-08 578 delay = writeback_delay(dc, size);
539d39eb270834 Tang Junhui 2018-01-08 579
771f393e8ffc9b Coly Li 2018-03-18 580 while (!kthread_should_stop() &&
771f393e8ffc9b Coly Li 2018-03-18 581 !test_bit(CACHE_SET_IO_DISABLE, &dc->disk.c->flags) &&
771f393e8ffc9b Coly Li 2018-03-18 582 delay) {
539d39eb270834 Tang Junhui 2018-01-08 583 schedule_timeout_interruptible(delay);
539d39eb270834 Tang Junhui 2018-01-08 584 delay = writeback_delay(dc, 0);
539d39eb270834 Tang Junhui 2018-01-08 585 }
cafe563591446c Kent Overstreet 2013-03-23 586 }
cafe563591446c Kent Overstreet 2013-03-23 587
cafe563591446c Kent Overstreet 2013-03-23 588 if (0) {
cafe563591446c Kent Overstreet 2013-03-23 589 err_free:
cafe563591446c Kent Overstreet 2013-03-23 590 kfree(w->private);
cafe563591446c Kent Overstreet 2013-03-23 591 err:
cafe563591446c Kent Overstreet 2013-03-23 @592 }
cafe563591446c Kent Overstreet 2013-03-23 593
c2a4f3183a1248 Kent Overstreet 2013-09-23 594 /*
c2a4f3183a1248 Kent Overstreet 2013-09-23 595 * Wait for outstanding writeback IOs to finish (and keybuf slots to be
c2a4f3183a1248 Kent Overstreet 2013-09-23 596 * freed) before refilling again
c2a4f3183a1248 Kent Overstreet 2013-09-23 597 */
5e6926daac267d Kent Overstreet 2013-07-24 598 closure_sync(&cl);
448f60e858d871 Coly Li 2025-10-07 599
448f60e858d871 Coly Li 2025-10-07 600 if (atomic_read(&dc->writeback_keys.handled) == dump_nr) {
448f60e858d871 Coly Li 2025-10-07 601 spin_lock(&dc->writeback_keys.lock);
448f60e858d871 Coly Li 2025-10-07 602 dc->writeback_keys.keys = RB_ROOT;
448f60e858d871 Coly Li 2025-10-07 603 array_allocator_init(&dc->writeback_keys.freelist);
448f60e858d871 Coly Li 2025-10-07 604 spin_unlock(&dc->writeback_keys.lock);
448f60e858d871 Coly Li 2025-10-07 605 } else {
448f60e858d871 Coly Li 2025-10-07 606 for (i = 0; i < dump_nr; i++) {
448f60e858d871 Coly Li 2025-10-07 607 w = dump_keys[i];
448f60e858d871 Coly Li 2025-10-07 608 if (!w->private)
448f60e858d871 Coly Li 2025-10-07 609 continue;
448f60e858d871 Coly Li 2025-10-07 610 bch_keybuf_del(&dc->writeback_keys, w);
448f60e858d871 Coly Li 2025-10-07 611 }
448f60e858d871 Coly Li 2025-10-07 612 }
448f60e858d871 Coly Li 2025-10-07 613 atomic_set(&dc->writeback_keys.handled, 0);
5e6926daac267d Kent Overstreet 2013-07-24 614 }
5e6926daac267d Kent Overstreet 2013-07-24 615
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-10-10 16:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-07 9:02 [PATCH] bcache: avoid redundant access RB tree in read_dirty colyli
2025-10-10 16:13 ` kernel test robot [this message]
2025-10-10 16:56 ` kernel test robot
2025-10-20 16:44 ` Pierre Juhen
[not found] ` <050fe436-e629-4428-8e4d-33edd8985767@orange.fr>
2025-10-21 1:18 ` Coly Li
2025-10-21 2:58 ` Discard option Pierre Juhen
2025-10-21 4:10 ` Coly Li
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=202510110048.PdCCuB3b-lkp@intel.com \
--to=lkp@intel.com \
--cc=colyli@fnnas.com \
--cc=linux-bcache@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=zhoujifeng@kylinos.com.cn \
/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 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.