cifs: Make add_credits_and_wake_if() clear deducted credits
authorDavid Howells <dhowells@redhat.com>
Thu, 28 Mar 2024 07:59:18 +0000 (07:59 +0000)
committerDavid Howells <dhowells@redhat.com>
Wed, 1 May 2024 17:08:21 +0000 (18:08 +0100)
Make add_credits_and_wake_if() clear the amount of credits in the
cifs_credits struct after it has returned them to the overall counter.
This allows add_credits_and_wake_if() to be called multiple times during
the error handling and cleanup without accidentally returning the credits
again and again.

Note that the wake_up() in add_credits_and_wake_if() may also be
superfluous as ->add_credits() also does a wake on the request_q.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Steve French <sfrench@samba.org>
cc: Shyam Prasad N <nspmangalore@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org

fs/smb/client/cifsglob.h

index 29c9ee2dd304d773ede42526befda100b5eee2f3..611f59c6d2c05cc53f65ad939f5d70e19f295732 100644 (file)
@@ -881,11 +881,12 @@ add_credits(struct TCP_Server_Info *server, const struct cifs_credits *credits,
 
 static inline void
 add_credits_and_wake_if(struct TCP_Server_Info *server,
-                       const struct cifs_credits *credits, const int optype)
+                       struct cifs_credits *credits, const int optype)
 {
        if (credits->value) {
                server->ops->add_credits(server, credits, optype);
                wake_up(&server->request_q);
+               credits->value = 0;
        }
 }