diff options
author | Steve French <stfrench@microsoft.com> | 2023-06-11 19:23:32 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-06-21 17:01:01 +0300 |
commit | d7d6e830cd0ff2c71251ff6c8943a09e35cf0f6b (patch) | |
tree | 397e43c31dd9686e48d04affbd40757c21cb15e0 | |
parent | e8119d4d1611309ae545d292ba4d700f3e883040 (diff) | |
download | linux-d7d6e830cd0ff2c71251ff6c8943a09e35cf0f6b.tar.xz |
cifs: fix lease break oops in xfstest generic/098
[ Upstream commit c774e6779f38bf36f0cce65e30793704bab4b0d7 ]
umount can race with lease break so need to check if
tcon->ses->server is still valid to send the lease
break response.
Reviewed-by: Bharath SM <bharathsm@microsoft.com>
Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
Fixes: 59a556aebc43 ("SMB3: drop reference to cfile before sending oplock break")
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | fs/cifs/file.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 9a4c33ffb75f..87dcffece762 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -5146,9 +5146,13 @@ oplock_break_ack: * disconnected since oplock already released by the server */ if (!oplock_break_cancelled) { - rc = tcon->ses->server->ops->oplock_response(tcon, persistent_fid, + /* check for server null since can race with kill_sb calling tree disconnect */ + if (tcon->ses && tcon->ses->server) { + rc = tcon->ses->server->ops->oplock_response(tcon, persistent_fid, volatile_fid, net_fid, cinode); - cifs_dbg(FYI, "Oplock release rc = %d\n", rc); + cifs_dbg(FYI, "Oplock release rc = %d\n", rc); + } else + pr_warn_once("lease break not sent for unmounted share\n"); } cifs_done_oplock_break(cinode); |