(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 -- Thanks, Steve
From 4def7b92de293b9d3c5784bb9257490427833bce Mon Sep 17 00:00:00 2001 From: Steve French <stfrench@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx> --- 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