Re: [PATCH] add credits we receive from oplock/break PDUs

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

 



вс, 20 янв. 2019 г. в 23:43, Ronnie Sahlberg <lsahlber@xxxxxxxxxx>:
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> ---
>  fs/cifs/smb2misc.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
> index 6a9c47541c53..ec1372d2f3df 100644
> --- a/fs/cifs/smb2misc.c
> +++ b/fs/cifs/smb2misc.c
> @@ -642,12 +642,19 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
>         struct cifs_tcon *tcon;
>         struct cifsInodeInfo *cinode;
>         struct cifsFileInfo *cfile;
> +       struct cifs_credits credits;
>
>         cifs_dbg(FYI, "Checking for oplock break\n");
>
>         if (rsp->sync_hdr.Command != SMB2_OPLOCK_BREAK)
>                 return false;
>
> +       if (rsp->sync_hdr.CreditRequest) {
> +               credits.value = le16_to_cpu(rsp->sync_hdr.CreditRequest);
> +               credits.instance = server->reconnect_instance;
> +               add_credits(server, &credits, 0);

add_credits() modifies server->in_flight field. Let's do something
like the following instead:

diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
index 6a9c475..7b8b58f 100644
--- a/fs/cifs/smb2misc.c
+++ b/fs/cifs/smb2misc.c
@@ -648,6 +648,13 @@ smb2_is_valid_oplock_break(char *buffer, struct
TCP_Server_Info *server)
        if (rsp->sync_hdr.Command != SMB2_OPLOCK_BREAK)
                return false;

+       if (rsp->sync_hdr.CreditRequest) {
+               spin_lock(&server->req_lock);
+               server->credits += le16_to_cpu(rsp->sync_hdr.CreditRequest);
+               spin_unlock(&server->req_lock);
+               wake_up(&server->request_q);
+       }
+

It look like it should apply to stable kernels without problems.

--
Best regards,
Pavel Shilovsky




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

  Powered by Linux