All of lore.kernel.org
 help / color / mirror / Atom feed
* [bcachefs:bcachefs-testing 118/120] fs/bcachefs/btree_journal_iter.c:385:34: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2024-11-18 12:33 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-11-18 12:33 UTC (permalink / raw)
  To: Kent Overstreet; +Cc: oe-kbuild-all, Kent Overstreet

tree:   https://evilpiepirate.org/git/bcachefs.git bcachefs-testing
head:   e15820f3f2ecb8d5337781ce8e6ba02aa7615561
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/20241118/202411182013.DD1rwsIY-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 14.2.0
reproduce: (https://download.01.org/0day-ci/archive/20241118/202411182013.DD1rwsIY-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/202411182013.DD1rwsIY-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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [bcachefs:bcachefs-testing 118/120] fs/bcachefs/btree_journal_iter.c:385:34: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2024-11-30  3:10 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-11-30  3:10 UTC (permalink / raw)
  To: Kent Overstreet; +Cc: oe-kbuild-all, Kent Overstreet

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-11-30  3:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-30  3:10 [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
  -- strict thread matches above, loose matches on Subject: below --
2024-11-18 12:33 kernel test robot

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.