* [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.