* [PATCH v2 0/2] eliminate the uninitialized compilation warning
@ 2024-04-26 3:21 Hongbo Li
2024-04-26 3:21 ` [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots Hongbo Li
2024-04-26 3:21 ` [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock Hongbo Li
0 siblings, 2 replies; 6+ messages in thread
From: Hongbo Li @ 2024-04-26 3:21 UTC (permalink / raw)
To: kent.overstreet, bfoster; +Cc: linux-bcachefs, lihongbo22
Eliminating the uninitialized compilation warning in bcachefs-tools.
Hongbo Li (2):
bcachefs: eliminate the uninitialized compilation warning in
bch2_reconstruct_snapshots
bcachefs: eliminate the uninitialized compilation warning in
__do_six_trylock
fs/bcachefs/six.c | 5 ++---
fs/bcachefs/snapshot.c | 3 ++-
2 files changed, 4 insertions(+), 4 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots
2024-04-26 3:21 [PATCH v2 0/2] eliminate the uninitialized compilation warning Hongbo Li
@ 2024-04-26 3:21 ` Hongbo Li
2024-04-26 4:04 ` Kent Overstreet
2024-04-26 3:21 ` [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock Hongbo Li
1 sibling, 1 reply; 6+ messages in thread
From: Hongbo Li @ 2024-04-26 3:21 UTC (permalink / raw)
To: kent.overstreet, bfoster; +Cc: linux-bcachefs, lihongbo22
When compiling the bcachefs-tools, the following compilation warning
is reported:
libbcachefs/snapshot.c: In function ‘bch2_reconstruct_snapshots’:
libbcachefs/snapshot.c:915:19: warning: ‘tree_id’ may be used uninitialized in this function [-Wmaybe-uninitialized]
915 | snapshot->v.tree = cpu_to_le32(tree_id);
libbcachefs/snapshot.c:903:6: note: ‘tree_id’ was declared here
903 | u32 tree_id;
| ^~~~~~~
This is a false alert, because @tree_id is changed in
bch2_snapshot_tree_create after it returns 0. And if this function
returns other value, @tree_id wouldn't be used. Thus there should
be nothing wrong in logical.
Although the report itself is a false alert, we can still make it more
explicit by setting the initial value of @tree_id to 0 (an invalid
tree ID).
Fixes: a292be3b68f3 ("bcachefs: Reconstruct missing snapshot nodes")
Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
---
v2:
- Revise the code based on Kent's reviews.
v1: https://lore.kernel.org/all/20240419074851.1583392-2-lihongbo22@huawei.com/T/#u
---
---
fs/bcachefs/snapshot.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/bcachefs/snapshot.c b/fs/bcachefs/snapshot.c
index 2368218070d4..3aa4686cc71f 100644
--- a/fs/bcachefs/snapshot.c
+++ b/fs/bcachefs/snapshot.c
@@ -900,7 +900,8 @@ static int check_snapshot_exists(struct btree_trans *trans, u32 id)
if (bch2_snapshot_equiv(c, id))
return 0;
- u32 tree_id;
+ /* 0 is an invalid tree ID */
+ u32 tree_id = 0;
int ret = bch2_snapshot_tree_create(trans, id, 0, &tree_id);
if (ret)
return ret;
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock
2024-04-26 3:21 [PATCH v2 0/2] eliminate the uninitialized compilation warning Hongbo Li
2024-04-26 3:21 ` [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots Hongbo Li
@ 2024-04-26 3:21 ` Hongbo Li
2024-04-26 4:04 ` Kent Overstreet
1 sibling, 1 reply; 6+ messages in thread
From: Hongbo Li @ 2024-04-26 3:21 UTC (permalink / raw)
To: kent.overstreet, bfoster; +Cc: linux-bcachefs, lihongbo22
When compiling the bcachefs-tools, the following compilation warning
is reported:
libbcachefs/six.c: In function ‘__do_six_trylock’:
libbcachefs/six.c:90:12: warning: ‘old’ may be used uninitialized in this function [-Wmaybe-uninitialized]
90 | if (!(old & SIX_LOCK_HELD_intent)) {
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
This is also a false altert. Only when @type=SIX_LOCK_write and @try=false
are passed in __do_six_trylock, the second condition branch would enter
which does not initialize the @old variable. But six_set_owner will not
use @old if @type is not SIX_LOCK_intent. There should be nothing wrong
in logical too.
Although the report itself is a false alert, we can elimate the unitialize
compilation warning by assigning @old in front.
Fixes: 84a37cbf62e0 ("six locks: Wakeup now takes lock on behalf of waiter")
Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
---
v2:
- Fix the error about reading lock->state introduced in v1.
v1: https://lore.kernel.org/all/20240419074851.1583392-3-lihongbo22@huawei.com/T/#u
---
---
fs/bcachefs/six.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/fs/bcachefs/six.c b/fs/bcachefs/six.c
index 3a494c5d1247..8bfd22a6f771 100644
--- a/fs/bcachefs/six.c
+++ b/fs/bcachefs/six.c
@@ -118,11 +118,11 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
struct task_struct *task, bool try)
{
int ret;
- u32 old;
+ u32 old = atomic_read(&lock->state);
EBUG_ON(type == SIX_LOCK_write && lock->owner != task);
EBUG_ON(type == SIX_LOCK_write &&
- (try != !(atomic_read(&lock->state) & SIX_LOCK_HELD_write)));
+ (try != !(old & SIX_LOCK_HELD_write)));
/*
* Percpu reader mode:
@@ -182,7 +182,6 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
ret = -1 - SIX_LOCK_read;
}
} else {
- old = atomic_read(&lock->state);
do {
ret = !(old & l[type].lock_fail);
if (!ret || (type == SIX_LOCK_write && !try)) {
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock
2024-04-26 3:21 ` [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock Hongbo Li
@ 2024-04-26 4:04 ` Kent Overstreet
2024-04-26 6:09 ` Hongbo Li
0 siblings, 1 reply; 6+ messages in thread
From: Kent Overstreet @ 2024-04-26 4:04 UTC (permalink / raw)
To: Hongbo Li; +Cc: bfoster, linux-bcachefs
On Fri, Apr 26, 2024 at 11:21:36AM +0800, Hongbo Li wrote:
> When compiling the bcachefs-tools, the following compilation warning
> is reported:
> libbcachefs/six.c: In function ‘__do_six_trylock’:
> libbcachefs/six.c:90:12: warning: ‘old’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> 90 | if (!(old & SIX_LOCK_HELD_intent)) {
> | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
>
> This is also a false altert. Only when @type=SIX_LOCK_write and @try=false
> are passed in __do_six_trylock, the second condition branch would enter
> which does not initialize the @old variable. But six_set_owner will not
> use @old if @type is not SIX_LOCK_intent. There should be nothing wrong
> in logical too.
>
> Although the report itself is a false alert, we can elimate the unitialize
> compilation warning by assigning @old in front.
>
> Fixes: 84a37cbf62e0 ("six locks: Wakeup now takes lock on behalf of waiter")
> Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
let's just delete the assertion - I don't like moving around reading the
lock state for this.
> ---
> v2:
> - Fix the error about reading lock->state introduced in v1.
>
> v1: https://lore.kernel.org/all/20240419074851.1583392-3-lihongbo22@huawei.com/T/#u
> ---
> ---
> fs/bcachefs/six.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/fs/bcachefs/six.c b/fs/bcachefs/six.c
> index 3a494c5d1247..8bfd22a6f771 100644
> --- a/fs/bcachefs/six.c
> +++ b/fs/bcachefs/six.c
> @@ -118,11 +118,11 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
> struct task_struct *task, bool try)
> {
> int ret;
> - u32 old;
> + u32 old = atomic_read(&lock->state);
>
> EBUG_ON(type == SIX_LOCK_write && lock->owner != task);
> EBUG_ON(type == SIX_LOCK_write &&
> - (try != !(atomic_read(&lock->state) & SIX_LOCK_HELD_write)));
> + (try != !(old & SIX_LOCK_HELD_write)));
>
> /*
> * Percpu reader mode:
> @@ -182,7 +182,6 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
> ret = -1 - SIX_LOCK_read;
> }
> } else {
> - old = atomic_read(&lock->state);
> do {
> ret = !(old & l[type].lock_fail);
> if (!ret || (type == SIX_LOCK_write && !try)) {
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots
2024-04-26 3:21 ` [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots Hongbo Li
@ 2024-04-26 4:04 ` Kent Overstreet
0 siblings, 0 replies; 6+ messages in thread
From: Kent Overstreet @ 2024-04-26 4:04 UTC (permalink / raw)
To: Hongbo Li; +Cc: bfoster, linux-bcachefs
On Fri, Apr 26, 2024 at 11:21:35AM +0800, Hongbo Li wrote:
> When compiling the bcachefs-tools, the following compilation warning
> is reported:
> libbcachefs/snapshot.c: In function ‘bch2_reconstruct_snapshots’:
> libbcachefs/snapshot.c:915:19: warning: ‘tree_id’ may be used uninitialized in this function [-Wmaybe-uninitialized]
> 915 | snapshot->v.tree = cpu_to_le32(tree_id);
> libbcachefs/snapshot.c:903:6: note: ‘tree_id’ was declared here
> 903 | u32 tree_id;
> | ^~~~~~~
>
> This is a false alert, because @tree_id is changed in
> bch2_snapshot_tree_create after it returns 0. And if this function
> returns other value, @tree_id wouldn't be used. Thus there should
> be nothing wrong in logical.
>
> Although the report itself is a false alert, we can still make it more
> explicit by setting the initial value of @tree_id to 0 (an invalid
> tree ID).
>
> Fixes: a292be3b68f3 ("bcachefs: Reconstruct missing snapshot nodes")
> Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
this works - applied
> ---
> v2:
> - Revise the code based on Kent's reviews.
>
> v1: https://lore.kernel.org/all/20240419074851.1583392-2-lihongbo22@huawei.com/T/#u
> ---
> ---
> fs/bcachefs/snapshot.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/bcachefs/snapshot.c b/fs/bcachefs/snapshot.c
> index 2368218070d4..3aa4686cc71f 100644
> --- a/fs/bcachefs/snapshot.c
> +++ b/fs/bcachefs/snapshot.c
> @@ -900,7 +900,8 @@ static int check_snapshot_exists(struct btree_trans *trans, u32 id)
> if (bch2_snapshot_equiv(c, id))
> return 0;
>
> - u32 tree_id;
> + /* 0 is an invalid tree ID */
> + u32 tree_id = 0;
> int ret = bch2_snapshot_tree_create(trans, id, 0, &tree_id);
> if (ret)
> return ret;
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock
2024-04-26 4:04 ` Kent Overstreet
@ 2024-04-26 6:09 ` Hongbo Li
0 siblings, 0 replies; 6+ messages in thread
From: Hongbo Li @ 2024-04-26 6:09 UTC (permalink / raw)
To: Kent Overstreet; +Cc: bfoster, linux-bcachefs
On 2024/4/26 12:04, Kent Overstreet wrote:
> On Fri, Apr 26, 2024 at 11:21:36AM +0800, Hongbo Li wrote:
>> When compiling the bcachefs-tools, the following compilation warning
>> is reported:
>> libbcachefs/six.c: In function ‘__do_six_trylock’:
>> libbcachefs/six.c:90:12: warning: ‘old’ may be used uninitialized in this function [-Wmaybe-uninitialized]
>> 90 | if (!(old & SIX_LOCK_HELD_intent)) {
>> | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
>>
>> This is also a false altert. Only when @type=SIX_LOCK_write and @try=false
>> are passed in __do_six_trylock, the second condition branch would enter
>> which does not initialize the @old variable. But six_set_owner will not
>> use @old if @type is not SIX_LOCK_intent. There should be nothing wrong
>> in logical too.
>>
>> Although the report itself is a false alert, we can elimate the unitialize
>> compilation warning by assigning @old in front.
>>
>> Fixes: 84a37cbf62e0 ("six locks: Wakeup now takes lock on behalf of waiter")
>> Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
>
> let's just delete the assertion - I don't like moving around reading the
> lock state for this.
ok, thank you, and I will keep "old = atomic_read(&lock->state);" in the
following else branch for next version.
>
>> ---
>> v2:
>> - Fix the error about reading lock->state introduced in v1.
>>
>> v1: https://lore.kernel.org/all/20240419074851.1583392-3-lihongbo22@huawei.com/T/#u
>> ---
>> ---
>> fs/bcachefs/six.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/bcachefs/six.c b/fs/bcachefs/six.c
>> index 3a494c5d1247..8bfd22a6f771 100644
>> --- a/fs/bcachefs/six.c
>> +++ b/fs/bcachefs/six.c
>> @@ -118,11 +118,11 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
>> struct task_struct *task, bool try)
>> {
>> int ret;
>> - u32 old;
>> + u32 old = atomic_read(&lock->state);
>>
>> EBUG_ON(type == SIX_LOCK_write && lock->owner != task);
>> EBUG_ON(type == SIX_LOCK_write &&
>> - (try != !(atomic_read(&lock->state) & SIX_LOCK_HELD_write)));
>> + (try != !(old & SIX_LOCK_HELD_write)));
>>
>> /*
>> * Percpu reader mode:
>> @@ -182,7 +182,6 @@ static int __do_six_trylock(struct six_lock *lock, enum six_lock_type type,
>> ret = -1 - SIX_LOCK_read;
>> }
>> } else {
>> - old = atomic_read(&lock->state);
>> do {
>> ret = !(old & l[type].lock_fail);
>> if (!ret || (type == SIX_LOCK_write && !try)) {
>> --
>> 2.34.1
>>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-26 6:09 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-26 3:21 [PATCH v2 0/2] eliminate the uninitialized compilation warning Hongbo Li
2024-04-26 3:21 ` [PATCH v2 1/2] bcachefs: eliminate the uninitialized compilation warning in bch2_reconstruct_snapshots Hongbo Li
2024-04-26 4:04 ` Kent Overstreet
2024-04-26 3:21 ` [PATCH v2 2/2] bcachefs: eliminate the uninitialized compilation warning in __do_six_trylock Hongbo Li
2024-04-26 4:04 ` Kent Overstreet
2024-04-26 6:09 ` Hongbo Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).