tree:
https://git.kernel.org/pub/scm/linux/kernel/git/fdmanana/linux.git misc-next
head: e19a1a28c0327556bc78e4c5081dab9d5e557f1a
commit: 6105869e2ac5f5e4eeb3a7e2db001ce72a49df9a [3/4] btrfs: make fast fsyncs wait only
for writeback
compiler: or1k-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
cppcheck warnings: (new ones prefixed by >>)
> fs/btrfs/tree-log.c:4501:9: warning: Identical condition
'ret', second condition is always false [identicalConditionAfterEarlyExit]
return ret;
^
fs/btrfs/tree-log.c:4476:6: note: first condition
if (ret)
^
fs/btrfs/tree-log.c:4501:9: note: second condition
return ret;
^
fs/btrfs/tree-log.c:2184:6: warning: Variable 'ret' is reassigned a value
before the old one has been used. [redundantAssignment]
ret = 0;
^
fs/btrfs/tree-log.c:2162:6: note: Variable 'ret' is reassigned a value before
the old one has been used.
ret = 1;
^
fs/btrfs/tree-log.c:2184:6: note: Variable 'ret' is reassigned a value before
the old one has been used.
ret = 0;
^
fs/btrfs/tree-log.c:3547:6: warning: Variable 'log' is reassigned a value
before the old one has been used. [redundantAssignment]
log = root->log_root;
^
fs/btrfs/tree-log.c:3537:0: note: Variable 'log' is reassigned a value before
the old one has been used.
struct btrfs_root *log = root->log_root;
^
fs/btrfs/tree-log.c:3547:6: note: Variable 'log' is reassigned a value before
the old one has been used.
log = root->log_root;
^
fs/btrfs/tree-log.c:5855:8: warning: Variable 'leaf' is reassigned a value
before the old one has been used. [redundantAssignment]
leaf = path->nodes[0];
^
fs/btrfs/tree-log.c:5822:0: note: Variable 'leaf' is reassigned a value before
the old one has been used.
struct extent_buffer *leaf = path->nodes[0];
^
fs/btrfs/tree-log.c:5855:8: note: Variable 'leaf' is reassigned a value before
the old one has been used.
leaf = path->nodes[0];
^
fs/btrfs/tree-log.c:5856:8: warning: Variable 'slot' is reassigned a value
before the old one has been used. [redundantAssignment]
slot = path->slots[0];
^
fs/btrfs/tree-log.c:5823:0: note: Variable 'slot' is reassigned a value before
the old one has been used.
int slot = path->slots[0];
^
fs/btrfs/tree-log.c:5856:8: note: Variable 'slot' is reassigned a value before
the old one has been used.
slot = path->slots[0];
^
#
https://git.kernel.org/pub/scm/linux/kernel/git/fdmanana/linux.git/commit...
git remote add fdmanana
https://git.kernel.org/pub/scm/linux/kernel/git/fdmanana/linux.git
git fetch --no-tags fdmanana misc-next
git checkout 6105869e2ac5f5e4eeb3a7e2db001ce72a49df9a
vim +/ret +4501 fs/btrfs/tree-log.c
31d11b83b96faa Filipe Manana 2018-05-09 4396
5dc562c541e102 Josef Bacik 2012-08-17 4397 static int
btrfs_log_changed_extents(struct btrfs_trans_handle *trans,
5dc562c541e102 Josef Bacik 2012-08-17 4398 struct btrfs_root *root,
9d122629f1f65a Nikolay Borisov 2017-01-18 4399 struct btrfs_inode *inode,
827463c49f2911 Miao Xie 2014-01-14 4400 struct btrfs_path *path,
6105869e2ac5f5 Filipe Manana 2020-08-11 4401 struct btrfs_log_ctx *ctx)
5dc562c541e102 Josef Bacik 2012-08-17 4402 {
6105869e2ac5f5 Filipe Manana 2020-08-11 4403 struct btrfs_ordered_extent *ordered;
6105869e2ac5f5 Filipe Manana 2020-08-11 4404 struct btrfs_ordered_extent *tmp;
5dc562c541e102 Josef Bacik 2012-08-17 4405 struct extent_map *em, *n;
5dc562c541e102 Josef Bacik 2012-08-17 4406 struct list_head extents;
9d122629f1f65a Nikolay Borisov 2017-01-18 4407 struct extent_map_tree *tree =
&inode->extent_tree;
5dc562c541e102 Josef Bacik 2012-08-17 4408 u64 test_gen;
5dc562c541e102 Josef Bacik 2012-08-17 4409 int ret = 0;
2ab28f322f9896 Josef Bacik 2012-10-12 4410 int num = 0;
5dc562c541e102 Josef Bacik 2012-08-17 4411
5dc562c541e102 Josef Bacik 2012-08-17 4412 INIT_LIST_HEAD(&extents);
5dc562c541e102 Josef Bacik 2012-08-17 4413
5dc562c541e102 Josef Bacik 2012-08-17 4414 write_lock(&tree->lock);
5dc562c541e102 Josef Bacik 2012-08-17 4415 test_gen =
root->fs_info->last_trans_committed;
5dc562c541e102 Josef Bacik 2012-08-17 4416
5dc562c541e102 Josef Bacik 2012-08-17 4417 list_for_each_entry_safe(em, n,
&tree->modified_extents, list) {
5dc562c541e102 Josef Bacik 2012-08-17 4418 list_del_init(&em->list);
2ab28f322f9896 Josef Bacik 2012-10-12 4419 /*
2ab28f322f9896 Josef Bacik 2012-10-12 4420 * Just an arbitrary number, this can
be really CPU intensive
2ab28f322f9896 Josef Bacik 2012-10-12 4421 * once we start getting a lot of
extents, and really once we
2ab28f322f9896 Josef Bacik 2012-10-12 4422 * have a bunch of extents we just want
to commit since it will
2ab28f322f9896 Josef Bacik 2012-10-12 4423 * be faster.
2ab28f322f9896 Josef Bacik 2012-10-12 4424 */
2ab28f322f9896 Josef Bacik 2012-10-12 4425 if (++num > 32768) {
2ab28f322f9896 Josef Bacik 2012-10-12 4426
list_del_init(&tree->modified_extents);
2ab28f322f9896 Josef Bacik 2012-10-12 4427 ret = -EFBIG;
2ab28f322f9896 Josef Bacik 2012-10-12 4428 goto process;
2ab28f322f9896 Josef Bacik 2012-10-12 4429 }
2ab28f322f9896 Josef Bacik 2012-10-12 4430
5dc562c541e102 Josef Bacik 2012-08-17 4431 if (em->generation <= test_gen)
5dc562c541e102 Josef Bacik 2012-08-17 4432 continue;
8c6c592831a09a Josef Bacik 2017-08-29 4433
31d11b83b96faa Filipe Manana 2018-05-09 4434 /* We log prealloc extents beyond eof
later. */
31d11b83b96faa Filipe Manana 2018-05-09 4435 if (test_bit(EXTENT_FLAG_PREALLOC,
&em->flags) &&
31d11b83b96faa Filipe Manana 2018-05-09 4436 em->start >=
i_size_read(&inode->vfs_inode))
31d11b83b96faa Filipe Manana 2018-05-09 4437 continue;
31d11b83b96faa Filipe Manana 2018-05-09 4438
ff44c6e36dc9dc Josef Bacik 2012-09-14 4439 /* Need a ref to keep it from getting
evicted from cache */
490b54d6fb75f6 Elena Reshetova 2017-03-03 4440 refcount_inc(&em->refs);
ff44c6e36dc9dc Josef Bacik 2012-09-14 4441 set_bit(EXTENT_FLAG_LOGGING,
&em->flags);
5dc562c541e102 Josef Bacik 2012-08-17 4442 list_add_tail(&em->list,
&extents);
2ab28f322f9896 Josef Bacik 2012-10-12 4443 num++;
5dc562c541e102 Josef Bacik 2012-08-17 4444 }
5dc562c541e102 Josef Bacik 2012-08-17 4445
5dc562c541e102 Josef Bacik 2012-08-17 4446 list_sort(NULL, &extents,
extent_cmp);
2ab28f322f9896 Josef Bacik 2012-10-12 4447 process:
5dc562c541e102 Josef Bacik 2012-08-17 4448 while (!list_empty(&extents)) {
5dc562c541e102 Josef Bacik 2012-08-17 4449 em = list_entry(extents.next, struct
extent_map, list);
5dc562c541e102 Josef Bacik 2012-08-17 4450
5dc562c541e102 Josef Bacik 2012-08-17 4451 list_del_init(&em->list);
5dc562c541e102 Josef Bacik 2012-08-17 4452
5dc562c541e102 Josef Bacik 2012-08-17 4453 /*
5dc562c541e102 Josef Bacik 2012-08-17 4454 * If we had an error we just need to
delete everybody from our
5dc562c541e102 Josef Bacik 2012-08-17 4455 * private list.
5dc562c541e102 Josef Bacik 2012-08-17 4456 */
ff44c6e36dc9dc Josef Bacik 2012-09-14 4457 if (ret) {
201a90389424d6 Josef Bacik 2013-01-24 4458 clear_em_logging(tree, em);
ff44c6e36dc9dc Josef Bacik 2012-09-14 4459 free_extent_map(em);
5dc562c541e102 Josef Bacik 2012-08-17 4460 continue;
ff44c6e36dc9dc Josef Bacik 2012-09-14 4461 }
ff44c6e36dc9dc Josef Bacik 2012-09-14 4462
ff44c6e36dc9dc Josef Bacik 2012-09-14 4463 write_unlock(&tree->lock);
5dc562c541e102 Josef Bacik 2012-08-17 4464
a2120a473a8090 Josef Bacik 2018-05-23 4465 ret = log_one_extent(trans, inode,
root, em, path, ctx);
ff44c6e36dc9dc Josef Bacik 2012-09-14 4466 write_lock(&tree->lock);
201a90389424d6 Josef Bacik 2013-01-24 4467 clear_em_logging(tree, em);
201a90389424d6 Josef Bacik 2013-01-24 4468 free_extent_map(em);
5dc562c541e102 Josef Bacik 2012-08-17 4469 }
ff44c6e36dc9dc Josef Bacik 2012-09-14 4470 WARN_ON(!list_empty(&extents));
ff44c6e36dc9dc Josef Bacik 2012-09-14 4471 write_unlock(&tree->lock);
5dc562c541e102 Josef Bacik 2012-08-17 4472
5dc562c541e102 Josef Bacik 2012-08-17 4473 btrfs_release_path(path);
31d11b83b96faa Filipe Manana 2018-05-09 4474 if (!ret)
31d11b83b96faa Filipe Manana 2018-05-09 4475 ret = btrfs_log_prealloc_extents(trans,
inode, path);
6105869e2ac5f5 Filipe Manana 2020-08-11 4476 if (ret)
6105869e2ac5f5 Filipe Manana 2020-08-11 4477 return ret;
6105869e2ac5f5 Filipe Manana 2020-08-11 4478
6105869e2ac5f5 Filipe Manana 2020-08-11 4479 /*
6105869e2ac5f5 Filipe Manana 2020-08-11 4480 * We have logged all extents
successfully, now make sure the commit of
6105869e2ac5f5 Filipe Manana 2020-08-11 4481 * the current transaction waits for the
ordered extents to complete
6105869e2ac5f5 Filipe Manana 2020-08-11 4482 * before it commits and wipes out the
log trees, otherwise we would
6105869e2ac5f5 Filipe Manana 2020-08-11 4483 * lose data if an ordered extents
completes after the transaction
6105869e2ac5f5 Filipe Manana 2020-08-11 4484 * commits and a power failure happens
after the transaction commit.
6105869e2ac5f5 Filipe Manana 2020-08-11 4485 */
6105869e2ac5f5 Filipe Manana 2020-08-11 4486 list_for_each_entry_safe(ordered, tmp,
&ctx->ordered_extents, log_list) {
6105869e2ac5f5 Filipe Manana 2020-08-11 4487
list_del_init(&ordered->log_list);
6105869e2ac5f5 Filipe Manana 2020-08-11 4488 set_bit(BTRFS_ORDERED_LOGGED,
&ordered->flags);
6105869e2ac5f5 Filipe Manana 2020-08-11 4489
6105869e2ac5f5 Filipe Manana 2020-08-11 4490 if (!test_bit(BTRFS_ORDERED_COMPLETE,
&ordered->flags)) {
6105869e2ac5f5 Filipe Manana 2020-08-11 4491
spin_lock_irq(&inode->ordered_tree.lock);
6105869e2ac5f5 Filipe Manana 2020-08-11 4492 if (!test_bit(BTRFS_ORDERED_COMPLETE,
&ordered->flags)) {
6105869e2ac5f5 Filipe Manana 2020-08-11 4493 set_bit(BTRFS_ORDERED_PENDING,
&ordered->flags);
6105869e2ac5f5 Filipe Manana 2020-08-11 4494
atomic_inc(&trans->transaction->pending_ordered);
6105869e2ac5f5 Filipe Manana 2020-08-11 4495 }
6105869e2ac5f5 Filipe Manana 2020-08-11 4496
spin_unlock_irq(&inode->ordered_tree.lock);
6105869e2ac5f5 Filipe Manana 2020-08-11 4497 }
6105869e2ac5f5 Filipe Manana 2020-08-11 4498 btrfs_put_ordered_extent(ordered);
6105869e2ac5f5 Filipe Manana 2020-08-11 4499 }
31d11b83b96faa Filipe Manana 2018-05-09 4500
5dc562c541e102 Josef Bacik 2012-08-17 @4501 return ret;
5dc562c541e102 Josef Bacik 2012-08-17 4502 }
5dc562c541e102 Josef Bacik 2012-08-17 4503
:::::: The code at line 4501 was first introduced by commit
:::::: 5dc562c541e1026df9d43913c2f6b91156e22d32 Btrfs: turbo charge fsync
:::::: TO: Josef Bacik <jbacik(a)fusionio.com>
:::::: CC: Chris Mason <chris.mason(a)fusionio.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org