Hi Kent,
This compilation warning still exists in latest bcachefs-tools. May be this patch is useful.

Thanks,
Hongbo

On 2024/4/26 14:41, 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 <[email protected]>
---
v3:
   - Keep the lock state reading in original branch as Kent's suggestion.

v2: 
https://lore.kernel.org/linux-bcachefs/[email protected]/T/#u
   - Fix the error about reading lock->state introduced in v1.

v1: 
https://lore.kernel.org/all/[email protected]/T/#u

  fs/bcachefs/six.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/bcachefs/six.c b/fs/bcachefs/six.c
index 3a494c5d1247..086f045dbaa9 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:

Reply via email to