All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Kent Overstreet <kent.overstreet@linux.dev>
Cc: oe-kbuild-all@lists.linux.dev,
	Kent Overstreet <kent.overstreet@linux.dev>
Subject: [bcachefs:bcachefs-testing 118/120] fs/bcachefs/btree_journal_iter.c:385:34: sparse: sparse: incorrect type in initializer (different address spaces)
Date: Sat, 30 Nov 2024 11:10:32 +0800	[thread overview]
Message-ID: <202411301111.0WNF8OOc-lkp@intel.com> (raw)

tree:   https://evilpiepirate.org/git/bcachefs.git bcachefs-testing
head:   9409825501d87ecf84b2f59aed749647d86b72f2
commit: c22bd3413784c8b22dd7388fdca7af62364678ca [118/120] bcachefs: fix O(n^2) issue with whiteouts in journal keys
config: nios2-randconfig-r111-20241118 (https://download.01.org/0day-ci/archive/20241130/202411301111.0WNF8OOc-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 14.2.0
reproduce: (https://download.01.org/0day-ci/archive/20241130/202411301111.0WNF8OOc-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/202411301111.0WNF8OOc-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   fs/bcachefs/btree_journal_iter.c: note: in included file:
   fs/bcachefs/bcachefs.h:992:9: sparse: sparse: array of flexible structures
>> fs/bcachefs/btree_journal_iter.c:385:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct journal_key_range_overwritten *prev_range @@     got struct journal_key_range_overwritten [noderef] __rcu * @@
   fs/bcachefs/btree_journal_iter.c:385:34: sparse:     expected struct journal_key_range_overwritten *prev_range
   fs/bcachefs/btree_journal_iter.c:385:34: sparse:     got struct journal_key_range_overwritten [noderef] __rcu *
>> fs/bcachefs/btree_journal_iter.c:387:34: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct journal_key_range_overwritten *next_range @@     got struct journal_key_range_overwritten [noderef] __rcu * @@
   fs/bcachefs/btree_journal_iter.c:387:34: sparse:     expected struct journal_key_range_overwritten *next_range
   fs/bcachefs/btree_journal_iter.c:387:34: sparse:     got struct journal_key_range_overwritten [noderef] __rcu *
>> fs/bcachefs/btree_journal_iter.c:395:51: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct journal_key_range_overwritten [noderef] __rcu *overwritten_range @@     got struct journal_key_range_overwritten *prev_range @@
   fs/bcachefs/btree_journal_iter.c:395:51: sparse:     expected struct journal_key_range_overwritten [noderef] __rcu *overwritten_range
   fs/bcachefs/btree_journal_iter.c:395:51: sparse:     got struct journal_key_range_overwritten *prev_range
>> fs/bcachefs/btree_journal_iter.c:398:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   fs/bcachefs/btree_journal_iter.c:398:25: sparse:    struct journal_key_range_overwritten [noderef] __rcu *
   fs/bcachefs/btree_journal_iter.c:398:25: sparse:    struct journal_key_range_overwritten *
>> fs/bcachefs/btree_journal_iter.c:659:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *objp @@     got struct journal_key_range_overwritten [noderef] __rcu *overwritten_range @@
   fs/bcachefs/btree_journal_iter.c: note: in included file (through fs/bcachefs/bcachefs.h):
   fs/bcachefs/bcachefs_format.h:1265:38: sparse: sparse: array of flexible structures
   fs/bcachefs/btree_journal_iter.c:141:9: sparse: sparse: context imbalance in 'bch2_journal_keys_peek_prev_min' - different lock contexts for basic block
   fs/bcachefs/btree_journal_iter.c: note: in included file (through include/linux/backing-dev-defs.h, fs/bcachefs/bcachefs.h):
   include/linux/list.h:83:21: sparse: sparse: self-comparison always evaluates to true
   fs/bcachefs/btree_journal_iter.c:653:9: sparse: sparse: self-comparison always evaluates to false
   fs/bcachefs/btree_journal_iter.c:756:9: sparse: sparse: self-comparison always evaluates to false
   fs/bcachefs/btree_journal_iter.c:775:9: sparse: sparse: self-comparison always evaluates to false

vim +385 fs/bcachefs/btree_journal_iter.c

   370	
   371	static void __bch2_journal_key_overwritten(struct journal_keys *keys, size_t pos)
   372	{
   373		struct journal_key *k = keys->data + pos;
   374		size_t idx = pos_to_idx(keys, pos);
   375	
   376		k->overwritten = true;
   377	
   378		struct journal_key *prev = idx > 0 ? keys->data + idx_to_pos(keys, idx - 1) : NULL;
   379		struct journal_key *next = idx + 1 < keys->nr ? keys->data + idx_to_pos(keys, idx + 1) : NULL;
   380	
   381		bool prev_overwritten = prev && prev->overwritten;
   382		bool next_overwritten = next && next->overwritten;
   383	
   384		struct journal_key_range_overwritten *prev_range =
 > 385			prev_overwritten ? prev->overwritten_range : NULL;
   386		struct journal_key_range_overwritten *next_range =
 > 387			next_overwritten ? next->overwritten_range : NULL;
   388	
   389		BUG_ON(prev_range && prev_range->end != idx);
   390		BUG_ON(next_range && next_range->start != idx + 1);
   391	
   392		if (prev_range && next_range) {
   393			prev_range->end = next_range->end;
   394	
 > 395			keys->data[pos].overwritten_range = prev_range;
   396			for (size_t i = next_range->start; i < next_range->end; i++) {
   397				struct journal_key *ip = keys->data + idx_to_pos(keys, i);
 > 398				BUG_ON(ip->overwritten_range != next_range);
   399				ip->overwritten_range = prev_range;
   400			}
   401	
   402			kfree_rcu_mightsleep(next_range);
   403		} else if (prev_range) {
   404			prev_range->end++;
   405			k->overwritten_range = prev_range;
   406			if (next_overwritten) {
   407				prev_range->end++;
   408				next->overwritten_range = prev_range;
   409			}
   410		} else if (next_range) {
   411			next_range->start--;
   412			k->overwritten_range = next_range;
   413			if (prev_overwritten) {
   414				next_range->start--;
   415				prev->overwritten_range = next_range;
   416			}
   417		} else if (prev_overwritten || next_overwritten) {
   418			struct journal_key_range_overwritten *r = kmalloc(sizeof(*r), GFP_KERNEL);
   419			if (!r)
   420				return;
   421	
   422			r->start = idx - (size_t) prev_overwritten;
   423			r->end = idx + 1 + (size_t) next_overwritten;
   424	
   425			rcu_assign_pointer(k->overwritten_range, r);
   426			if (prev_overwritten)
   427				prev->overwritten_range = r;
   428			if (next_overwritten)
   429				next->overwritten_range = r;
   430		}
   431	}
   432	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2024-11-30  3:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-30  3:10 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-18 12:33 [bcachefs:bcachefs-testing 118/120] fs/bcachefs/btree_journal_iter.c:385:34: sparse: sparse: incorrect type in initializer (different address spaces) 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=202411301111.0WNF8OOc-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kent.overstreet@linux.dev \
    --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 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.