From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [koverstreet-bcachefs:bcachefs-garbage 192/258] kernel/rcu/pending.c:496 __rcu_pending_enqueue() error: we previously assumed 'head' could be null (see line 449)
Date: Tue, 10 Sep 2024 06:02:53 +0800 [thread overview]
Message-ID: <202409100524.JAAMZEmA-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Kent Overstreet <kent.overstreet@linux.dev>
tree: https://github.com/koverstreet/bcachefs bcachefs-garbage
head: c88c2220b6b527cec382f06a0ba3feab2a593b37
commit: b2025b96fdff5877c7c3de511ff5e0456cc3142a [192/258] rcu: lift rcu_pending from bcachefs
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: microblaze-randconfig-r073-20240909 (https://download.01.org/0day-ci/archive/20240910/202409100524.JAAMZEmA-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 14.1.0
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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202409100524.JAAMZEmA-lkp@intel.com/
smatch warnings:
kernel/rcu/pending.c:496 __rcu_pending_enqueue() error: we previously assumed 'head' could be null (see line 449)
vim +/head +496 kernel/rcu/pending.c
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 405
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 406 struct rcu_pending_pcpu *p;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 407 struct rcu_pending_seq *objs;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 408 struct genradix_node *new_node = NULL;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 409 unsigned long seq, flags;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 410 bool start_gp = false;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 411
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 412 BUG_ON((ptr != NULL) != (pending->process == RCU_PENDING_KVFREE_FN));
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 413
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 414 local_irq_save(flags);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 415 p = this_cpu_ptr(pending->p);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 416 spin_lock(&p->lock);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 417 seq = __get_state_synchronize_rcu(pending->srcu);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 418 restart:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 419 if (may_sleep &&
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 420 unlikely(process_finished_items(pending, p, flags)))
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 421 goto check_expired;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 422
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 423 /*
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 424 * In kvfree_rcu() mode, the radix tree is only for slab pointers so
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 425 * that we can do kfree_bulk() - vmalloc pointers always use the linked
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 426 * list:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 427 */
a2a5fdffbb42082 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-17 428 if (ptr && unlikely(is_vmalloc_addr_inlined(ptr)))
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 429 goto list_add;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 430
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 431 objs = get_object_radix(p, seq);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 432 if (unlikely(!objs))
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 433 goto list_add;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 434
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 435 if (unlikely(!objs->cursor)) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 436 /*
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 437 * New radix tree nodes must be added under @p->lock because the
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 438 * tree root is in a darray that can be resized (typically,
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 439 * genradix supports concurrent unlocked allocation of new
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 440 * nodes) - hence preallocation and the retry loop:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 441 */
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 442 objs->cursor = genradix_ptr_alloc_preallocated_inlined(&objs->objs,
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 443 objs->nr, &new_node, GFP_ATOMIC|__GFP_NOWARN);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 444 if (unlikely(!objs->cursor)) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 445 if (may_sleep) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 446 spin_unlock_irqrestore(&p->lock, flags);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 447
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 448 gfp_t gfp = GFP_KERNEL;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 @449 if (!head)
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 450 gfp |= __GFP_NOFAIL;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 451
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 452 new_node = genradix_alloc_node(gfp);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 453 if (!new_node)
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 454 may_sleep = false;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 455 goto check_expired;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 456 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 457 list_add:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 458 start_gp = rcu_pending_enqueue_list(p, seq, head, ptr, &flags);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 459 goto start_gp;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 460 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 461 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 462
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 463 *objs->cursor++ = ptr ?: head;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 464 /* zero cursor if we hit the end of a radix tree node: */
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 465 if (!(((ulong) objs->cursor) & (GENRADIX_NODE_SIZE - 1)))
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 466 objs->cursor = NULL;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 467 start_gp = !objs->nr;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 468 objs->nr++;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 469 start_gp:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 470 if (unlikely(start_gp)) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 471 /*
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 472 * We only have one callback (ideally, we would have one for
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 473 * every outstanding graceperiod) - so if our callback is
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 474 * already in flight, we may still have to start a grace period
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 475 * (since we used get_state() above, not start_poll())
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 476 */
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 477 if (!p->cb_armed) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 478 p->cb_armed = true;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 479 __call_rcu(pending->srcu, &p->cb, rcu_pending_rcu_cb);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 480 } else {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 481 __start_poll_synchronize_rcu(pending->srcu);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 482 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 483 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 484 spin_unlock_irqrestore(&p->lock, flags);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 485 free_node:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 486 if (new_node)
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 487 genradix_free_node(new_node);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 488 return;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 489 check_expired:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 490 if (unlikely(__poll_state_synchronize_rcu(pending->srcu, seq))) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 491 switch ((ulong) pending->process) {
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 492 case RCU_PENDING_KVFREE:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 493 kvfree(ptr);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 494 break;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 495 case RCU_PENDING_CALL_RCU:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 @496 head->func(head);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 497 break;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 498 default:
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 499 pending->process(pending, head);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 500 break;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 501 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 502 goto free_node;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 503 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 504
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 505 local_irq_save(flags);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 506 p = this_cpu_ptr(pending->p);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 507 spin_lock(&p->lock);
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 508 goto restart;
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 509 }
b76e32ceb9c00d4 fs/bcachefs/rcu_pending.c Kent Overstreet 2024-06-10 510
:::::: The code at line 496 was first introduced by commit
:::::: b76e32ceb9c00d47574740c5db96ab34893ddb6c bcachefs: rcu_pending
:::::: TO: Kent Overstreet <kent.overstreet@linux.dev>
:::::: CC: Kent Overstreet <kent.overstreet@linux.dev>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2024-09-09 22:03 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-09 22:02 kernel test robot [this message]
2024-09-10 0:58 ` [koverstreet-bcachefs:bcachefs-garbage 192/258] kernel/rcu/pending.c:496 __rcu_pending_enqueue() error: we previously assumed 'head' could be null (see line 449) Philip 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=202409100524.JAAMZEmA-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@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 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.