diff mbox series

[SMB3,client] fix open files on server counter going negative

Message ID CAH2r5mvF5JPaiT0S7DYRh-PiH+fKzsM4vij5Miffn-kxS3-zHg@mail.gmail.com (mailing list archive)
State New, archived
Headers show
Series [SMB3,client] fix open files on server counter going negative | expand

Commit Message

Steve French April 7, 2024, 4:29 a.m. UTC
(resending with corrected email text)

The /proc/fs/cifs/Stats files open on the server counter
      Open files: 0 total (local), 0 open on server
was going negative because in smb2_close_cached_fid  we were
decrementing the count of remote (on server) open files twice (e.g.
for the case where we were closing cached directories so this was more
of an issue with mount to servers like Windows that support directory
leases).

    Fixes: 8e843bf38f7b ("cifs: return a single-use cfid if we did not
get a lease")

Fix attached
diff mbox series

Patch

From 4def7b92de293b9d3c5784bb9257490427833bce Mon Sep 17 00:00:00 2001
From: Steve French <stfrench@microsoft.com>
Date: Sat, 6 Apr 2024 23:16:08 -0500
Subject: [PATCH] smb3: fix Open files on server counter going negative

We were decrementing the count of open files on server twice
for the case where we were closing cached directories.

Fixes: 8e843bf38f7b ("cifs: return a single-use cfid if we did not get a lease")
Cc: stable@vger.kernel.org
Signed-off-by: Steve French <stfrench@microsoft.com>
---
 fs/smb/client/cached_dir.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/smb/client/cached_dir.c b/fs/smb/client/cached_dir.c
index 13a9d7acf8f8..0ff2491c311d 100644
--- a/fs/smb/client/cached_dir.c
+++ b/fs/smb/client/cached_dir.c
@@ -433,8 +433,8 @@  smb2_close_cached_fid(struct kref *ref)
 	if (cfid->is_open) {
 		rc = SMB2_close(0, cfid->tcon, cfid->fid.persistent_fid,
 			   cfid->fid.volatile_fid);
-		if (rc != -EBUSY && rc != -EAGAIN)
-			atomic_dec(&cfid->tcon->num_remote_opens);
+		if (rc) /* should we retry on -EBUSY or -EAGAIN? */
+			cifs_dbg(VFS, "close cached dir rc %d\n", rc);
 	}
 
 	free_cached_dir(cfid);
-- 
2.40.1