From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Pavel Shilovsky <pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v2 06/24] CIFS: Add SMB2 credits support
Date: Wed, 20 Jun 2012 19:20:38 -0700 [thread overview]
Message-ID: <20120620192038.26b486ec@corrin.poochiereds.net> (raw)
In-Reply-To: <1340202664-28696-7-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
On Wed, 20 Jun 2012 18:30:46 +0400
Pavel Shilovsky <pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org> wrote:
> For SMB2 protocol we can add more than one credit for one received
> request: it depends on CreditRequest field in SMB2 response header.
> Also we divide all requests by type: echos, oplocks and others. Each
> type uses its own slot pull.
>
> Signed-off-by: Pavel Shilovsky <pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
> ---
> fs/cifs/cifsglob.h | 5 +++
> fs/cifs/cifsproto.h | 1 +
> fs/cifs/connect.c | 2 +-
> fs/cifs/smb2ops.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 84 insertions(+), 1 deletions(-)
>
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index 3575f0f..d94d3ee 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -343,6 +343,11 @@ struct TCP_Server_Info {
> char server_GUID[16];
> __u16 sec_mode;
> bool session_estab; /* mark when very first sess is established */
> +#ifdef CONFIG_CIFS_SMB2
> + int echo_credits; /* echo reserved slots */
> + int oplock_credits; /* oplock break reserved slots */
> + bool echos:1; /* enable echos */
> +#endif
> u16 dialect; /* dialect index that server chose */
> enum securityEnum secType;
> bool oplocks:1; /* enable oplocks */
> diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
> index 80d35ee..907f43c 100644
> --- a/fs/cifs/cifsproto.h
> +++ b/fs/cifs/cifsproto.h
> @@ -91,6 +91,7 @@ extern int SendReceiveBlockingLock(const unsigned int xid,
> struct smb_hdr *in_buf ,
> struct smb_hdr *out_buf,
> int *bytes_returned);
> +extern int cifs_reconnect(struct TCP_Server_Info *server);
> extern int checkSMB(char *buf, unsigned int length);
> extern bool is_valid_oplock_break(char *, struct TCP_Server_Info *);
> extern bool backup_cred(struct cifs_sb_info *);
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index 718bbea..cced470 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -296,7 +296,7 @@ static int cifs_setup_volume_info(struct smb_vol *volume_info, char *mount_data,
> * reconnect tcp session
> * wake up waiters on reconnection? - (not needed currently)
> */
> -static int
> +int
> cifs_reconnect(struct TCP_Server_Info *server)
> {
> int rc = 0;
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 09530f4..ab2590f 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -20,6 +20,79 @@
> #include "cifsglob.h"
> #include "smb2pdu.h"
> #include "smb2proto.h"
> +#include "cifsproto.h"
> +#include "cifs_debug.h"
> +
> +static void
> +change_conf(struct TCP_Server_Info *server)
> +{
> + server->credits += server->echo_credits + server->oplock_credits;
> + server->oplock_credits = server->echo_credits = 0;
> + switch (server->credits) {
> + case 0:
> + cifs_reconnect(server);
> + return;
> + case 1:
> + server->echos = false;
minor nit if you end up respinning this. The proper
spelling in English is "echoes".
> + server->oplocks = false;
> + cERROR(1, "disabling echos and oplocks");
> + break;
> + case 2:
> + server->echos = true;
> + server->oplocks = false;
> + server->echo_credits = 1;
> + cFYI(1, "disabling oplocks");
> + break;
> + default:
> + server->echos = true;
> + server->oplocks = true;
> + server->echo_credits = 1;
> + server->oplock_credits = 1;
> + }
> + server->credits -= server->echo_credits + server->oplock_credits;
> +}
> +
> +static void
> +smb2_add_credits(struct TCP_Server_Info *server, const unsigned int add,
> + const int optype)
> +{
> + int *val;
> + spin_lock(&server->req_lock);
> + val = server->ops->get_credits_field(server, optype);
> + *val += add;
> + server->in_flight--;
> + if (server->in_flight == 0)
> + change_conf(server);
> + spin_unlock(&server->req_lock);
> + wake_up(&server->request_q);
> +}
> +
> +static void
> +smb2_set_credits(struct TCP_Server_Info *server, const int val)
> +{
> + spin_lock(&server->req_lock);
> + server->credits = val;
> + spin_unlock(&server->req_lock);
> +}
> +
> +static int *
> +smb2_get_credits_field(struct TCP_Server_Info *server, const int optype)
> +{
> + switch (optype) {
> + case CIFS_ECHO_OP:
> + return &server->echo_credits;
> + case CIFS_OBREAK_OP:
> + return &server->oplock_credits;
> + default:
> + return &server->credits;
> + }
> +}
> +
> +static unsigned int
> +smb2_get_credits(struct mid_q_entry *mid)
> +{
> + return le16_to_cpu(((struct smb2_hdr *)mid->resp_buf)->CreditRequest);
> +}
>
> static __u64
> smb2_get_next_mid(struct TCP_Server_Info *server)
> @@ -35,6 +108,10 @@ smb2_get_next_mid(struct TCP_Server_Info *server)
> struct smb_version_operations smb21_operations = {
> .setup_request = smb2_setup_request,
> .check_receive = smb2_check_receive,
> + .add_credits = smb2_add_credits,
> + .set_credits = smb2_set_credits,
> + .get_credits_field = smb2_get_credits_field,
> + .get_credits = smb2_get_credits,
> .get_next_mid = smb2_get_next_mid,
> };
>
Looks fine.
Reviewed-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
next prev parent reply other threads:[~2012-06-21 2:20 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-20 14:30 [PATCH v2 00/24] Get SMB2 mount work Pavel Shilovsky
[not found] ` <1340202664-28696-1-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-20 14:30 ` [PATCH v2 01/24] CIFS: Rename Get/FreeXid and make them work with unsigned int Pavel Shilovsky
[not found] ` <1340202664-28696-2-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 0:58 ` Jeff Layton
2012-06-20 14:30 ` [PATCH v2 02/24] CIFS: Rename 7 error codes to NT_ style Pavel Shilovsky
[not found] ` <1340202664-28696-3-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 1:00 ` Jeff Layton
[not found] ` <20120620180028.052b33ac-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-06-21 7:54 ` Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 03/24] CIFS: Add SMB2 status codes Pavel Shilovsky
[not found] ` <1340202664-28696-4-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 2:35 ` Jeff Layton
2012-06-20 14:30 ` [PATCH v2 05/24] CIFS: Make transport routines work with SMB2 Pavel Shilovsky
[not found] ` <1340202664-28696-6-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 16:41 ` Jeff Layton
2012-06-20 14:30 ` [PATCH v2 06/24] CIFS: Add SMB2 credits support Pavel Shilovsky
[not found] ` <1340202664-28696-7-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 2:20 ` Jeff Layton [this message]
[not found] ` <20120620192038.26b486ec-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-06-21 7:43 ` Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 07/24] CIFS: Make demultiplex_thread work with SMB2 code Pavel Shilovsky
[not found] ` <1340202664-28696-8-git-send-email-pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
2012-06-21 18:44 ` Jeff Layton
[not found] ` <20120621114437.72a9483d-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-06-22 14:59 ` Pavel Shilovsky
[not found] ` <CAKywueRCTr8bva4tX42JHH=j88i3t5+E0GNrVbKwhwp9hJScPg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-22 21:55 ` Steve French
[not found] ` <CAH2r5mv+_BXmc9rm59shjBoNmcfhUHidDAbmhrrPi6Na+-p6WQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-06-23 2:10 ` Jeff Layton
2012-06-20 14:30 ` [PATCH v2 08/24] CIFS: Respect SMB2 header/max header size Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 09/24] CIFS: Add capability to send SMB2 negotiate message Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 10/24] CIFS: Add session setup/logoff capability for SMB2 Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 11/24] CIFS: Add tree connect/disconnect " Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 12/24] CIFS: Process reconnects for SMB2 shares Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 13/24] CIFS: Move getting dfs referalls to ops struct Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 14/24] CIFS: Move informational tcon calls " Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 15/24] CIFS: Move is_path_accessible " Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 16/24] CIFS: Add SMB2 support for is_path_accessible Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 17/24] CIFS: Move query inode info code to ops struct Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 18/24] CIFS: Query SMB2 inode info Pavel Shilovsky
2012-06-20 14:30 ` [PATCH v2 19/24] CIFS: Move building path to root to ops struct Pavel Shilovsky
2012-06-20 14:31 ` [PATCH v2 20/24] CIFS: Add SMB2 support for build_path_to_root Pavel Shilovsky
2012-06-20 14:31 ` [PATCH v2 21/24] CIFS: Move echo code to osp struct Pavel Shilovsky
2012-06-20 14:31 ` [PATCH v2 22/24] CIFS: Add echo request support for SMB2 Pavel Shilovsky
2012-06-20 14:31 ` [PATCH v2 23/24] CIFS: Move clear/print_stats code to ops struct Pavel Shilovsky
2012-06-20 14:31 ` [PATCH v2 24/24] CIFS: Allow SMB2 statistics to be tracked Pavel Shilovsky
2012-06-20 14:37 ` [PATCH v2 00/24] Get SMB2 mount work Pavel Shilovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120620192038.26b486ec@corrin.poochiereds.net \
--to=jlayton-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=pshilovsky-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox