afs: Fix server->active leak in afs_put_server
authorMarc Dionne <marc.dionne@auristor.com>
Wed, 30 Nov 2022 17:55:51 +0000 (17:55 +0000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 30 Nov 2022 18:02:37 +0000 (10:02 -0800)
The atomic_read was accidentally replaced with atomic_inc_return,
which prevents the server from getting cleaned up and causes rmmod
to hang with a warning:

    Can't purge s=00000001

Fixes: 2757a4dc1849 ("afs: Fix access after dec in put functions")
Signed-off-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20221130174053.2665818-1-marc.dionne@auristor.com/
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/afs/server.c

index 4981baf..b523720 100644 (file)
@@ -406,7 +406,7 @@ void afs_put_server(struct afs_net *net, struct afs_server *server,
        if (!server)
                return;
 
-       a = atomic_inc_return(&server->active);
+       a = atomic_read(&server->active);
        zero = __refcount_dec_and_test(&server->ref, &r);
        trace_afs_server(debug_id, r - 1, a, reason);
        if (unlikely(zero))