diff options
author | Pavel Shilovsky <piastry@etersoft.ru> | 2012-02-06 15:59:18 +0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2012-03-21 11:35:03 -0500 |
commit | 2d86dbc97094ea4cfc2204fdefd7d07685496189 (patch) | |
tree | 9aee614e155fd837c78ded2cd083dead1a9d4a3f /fs/cifs/misc.c | |
parent | fc40f9cf828908e91d9af820e9300a9d42fbbd72 (diff) |
CIFS: Introduce credit-based flow control
and send no more than credits value requests at once. For SMB/CIFS
it's trivial: increment this value by receiving any message and
decrement by sending one.
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs/misc.c')
-rw-r--r-- | fs/cifs/misc.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c index 703ef5c6fdb..c273c12de98 100644 --- a/fs/cifs/misc.c +++ b/fs/cifs/misc.c @@ -690,3 +690,22 @@ backup_cred(struct cifs_sb_info *cifs_sb) return false; } + +void +cifs_add_credits(struct TCP_Server_Info *server, const unsigned int add) +{ + spin_lock(&server->req_lock); + server->credits += add; + server->in_flight--; + spin_unlock(&server->req_lock); + wake_up(&server->request_q); +} + +void +cifs_set_credits(struct TCP_Server_Info *server, const int val) +{ + spin_lock(&server->req_lock); + server->credits = val; + server->oplocks = val > 1 ? enable_oplocks : false; + spin_unlock(&server->req_lock); +} |