From patchwork Wed Apr 13 11:43:11 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 703581 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3DBhLfC012946 for ; Wed, 13 Apr 2011 11:43:24 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758540Ab1DMLnY (ORCPT ); Wed, 13 Apr 2011 07:43:24 -0400 Received: from mail-gw0-f46.google.com ([74.125.83.46]:49956 "EHLO mail-gw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758504Ab1DMLnX (ORCPT ); Wed, 13 Apr 2011 07:43:23 -0400 Received: by mail-gw0-f46.google.com with SMTP id a18so201654gwa.19 for ; Wed, 13 Apr 2011 04:43:23 -0700 (PDT) Received: by 10.91.9.19 with SMTP id m19mr444255agi.68.1302695003337; Wed, 13 Apr 2011 04:43:23 -0700 (PDT) Received: from salusa.poochiereds.net (cpe-075-177-180-210.nc.res.rr.com [75.177.180.210]) by mx.google.com with ESMTPS id x37sm523485ana.34.2011.04.13.04.43.22 (version=SSLv3 cipher=OTHER); Wed, 13 Apr 2011 04:43:22 -0700 (PDT) From: Jeff Layton To: linux-cifs@vger.kernel.org Subject: [PATCH 4/7] cifs: add ignore_pend flag to cifs_call_async Date: Wed, 13 Apr 2011 07:43:11 -0400 Message-Id: <1302694994-8303-5-git-send-email-jlayton@redhat.com> X-Mailer: git-send-email 1.7.4.2 In-Reply-To: <1302694994-8303-1-git-send-email-jlayton@redhat.com> References: <1302694994-8303-1-git-send-email-jlayton@redhat.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 13 Apr 2011 11:43:24 +0000 (UTC) The current code always ignores the max_pending limit. Have it instead only optionally ignore the pending limit. For CIFSSMBEcho, we need to ignore it to make sure they always can go out. For async reads, writes and potentially other calls, we need to respect it. Signed-off-by: Jeff Layton --- fs/cifs/cifsproto.h | 2 +- fs/cifs/cifssmb.c | 2 +- fs/cifs/transport.c | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h index e255a2b..c621b45 100644 --- a/fs/cifs/cifsproto.h +++ b/fs/cifs/cifsproto.h @@ -67,7 +67,7 @@ extern void DeleteMidQEntry(struct mid_q_entry *midEntry); extern int wait_for_free_request(struct TCP_Server_Info *sv, const int long_op); extern int cifs_call_async(struct TCP_Server_Info *server, struct kvec *iov, unsigned int nvec, mid_callback_t *callback, - void *cbdata); + void *cbdata, bool ignore_pend); extern int SendReceive(const unsigned int /* xid */ , struct cifs_ses *, struct smb_hdr * /* input */ , struct smb_hdr * /* out */ , diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 79e4881..33adc15 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c @@ -743,7 +743,7 @@ CIFSSMBEcho(struct TCP_Server_Info *server) iov.iov_base = smb; iov.iov_len = be32_to_cpu(smb->hdr.smb_buf_length) + 4; - rc = cifs_call_async(server, &iov, 1, cifs_echo_callback, server); + rc = cifs_call_async(server, &iov, 1, cifs_echo_callback, server, true); if (rc) cFYI(1, "Echo request failed: %d", rc); diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index a31c279..ad32b70 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c @@ -350,13 +350,14 @@ wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *midQ) */ int cifs_call_async(struct TCP_Server_Info *server, struct kvec *iov, - unsigned int nvec, mid_callback_t *callback, void *cbdata) + unsigned int nvec, mid_callback_t *callback, void *cbdata, + bool ignore_pend) { int rc; struct mid_q_entry *mid; struct smb_hdr *hdr = (struct smb_hdr *)iov[0].iov_base; - rc = wait_for_free_request(server, CIFS_ASYNC_OP); + rc = wait_for_free_request(server, ignore_pend ? CIFS_ASYNC_OP : 0); if (rc) return rc;