Re: [PATCH] SMB3: Do not send lease break acknowledgment if all file handles have been closed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tentatively merged into cifs-2.6.git for-next pending more testing

On Sun, Jun 18, 2023 at 10:57 PM Bharath SM <bharathsm.hsk@xxxxxxxxx> wrote:
>
> In case if all existing file handles are deferred handles and if all of
> them gets closed due to handle lease break then we dont need to send
> lease break acknowledgment to server, because last handle close will be
> considered as lease break ack.
> After closing deferred handels, we check for openfile list of inode,
> if its empty then we skip sending lease break ack.
>
> Fixes: 59a556aebc43 ("SMB3: drop reference to cfile before sending oplock break")
> Signed-off-by: Bharath SM <bharathsm@xxxxxxxxxxxxx>
> ---
>  fs/smb/client/file.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/fs/smb/client/file.c b/fs/smb/client/file.c
> index 051283386e22..b8a3d60e7ac4 100644
> --- a/fs/smb/client/file.c
> +++ b/fs/smb/client/file.c
> @@ -4941,7 +4941,9 @@ void cifs_oplock_break(struct work_struct *work)
>          * not bother sending an oplock release if session to server still is
>          * disconnected since oplock already released by the server
>          */
> -       if (!oplock_break_cancelled) {
> +       spin_lock(&cinode->open_file_lock);
> +       if (!oplock_break_cancelled && !list_empty(&cinode->openFileList)) {
> +               spin_unlock(&cinode->open_file_lock);
>                 /* 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,
> @@ -4949,7 +4951,8 @@ void cifs_oplock_break(struct work_struct *work)
>                         cifs_dbg(FYI, "Oplock release rc = %d\n", rc);
>                 } else
>                         pr_warn_once("lease break not sent for unmounted share\n");
> -       }
> +       } else
> +               spin_unlock(&cinode->open_file_lock);
>
>         cifs_done_oplock_break(cinode);
>  }
> --
> 2.34.1
>


-- 
Thanks,

Steve




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux