From: "J. Bruce Fields" <bfields@fieldses.org>
To: Greg Banks <gnb@sgi.com>
Cc: Thomas Talpey <Thomas.Talpey@netapp.com>,
Linux NFS Mailing List <nfs@lists.sourceforge.net>,
Peter Leckie <pleckie@melbourne.sgi.com>
Subject: Re: [RFC,PATCH 4/14] knfsd: has_wspace per transport
Date: Wed, 16 May 2007 17:10:53 -0400 [thread overview]
Message-ID: <20070516211053.GE18927@fieldses.org> (raw)
In-Reply-To: <20070516192211.GJ9626@sgi.com>
On Thu, May 17, 2007 at 05:22:11AM +1000, Greg Banks wrote:
> @@ -268,21 +252,15 @@ svc_sock_enqueue(struct svc_sock *svsk)
> BUG_ON(svsk->sk_pool != NULL);
> svsk->sk_pool = pool;
>
> - set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags);
> - if (((atomic_read(&svsk->sk_reserved) + serv->sv_max_mesg)*2
> - > svc_sock_wspace(svsk))
> + if (svsk->sk_ops->sko_has_wspace
> && !test_bit(SK_CLOSE, &svsk->sk_flags)
> && !test_bit(SK_CONN, &svsk->sk_flags)) {
> - /* Don't enqueue while not enough space for reply */
> - dprintk("svc: socket %p no space, %d*2 > %ld, not enqueued\n",
> - svsk->sk_sk, atomic_read(&svsk->sk_reserved)+serv->sv_max_mesg,
> - svc_sock_wspace(svsk));
> - svsk->sk_pool = NULL;
> - clear_bit(SK_BUSY, &svsk->sk_flags);
> - goto out_unlock;
> + if (!svsk->sk_ops->sko_has_wspace(svsk)) {
> + svsk->sk_pool = NULL;
> + clear_bit(SK_BUSY, &svsk->sk_flags);
> + goto out_unlock;
> + }
> }
> - clear_bit(SOCK_NOSPACE, &svsk->sk_sock->flags);
> -
>
> if (!list_empty(&pool->sp_threads)) {
> rqstp = list_entry(pool->sp_threads.next,
> @@ -904,13 +882,42 @@ svc_tcpip_prepare_reply(struct svc_rqst
> return 0;
> }
>
> +/**
> + * svc_sock_has_write_space - Checks if there is enough space
> + * to send the reply on the socket.
> + * @svsk: the svc_sock to write on
> + * @wspace: the number of bytes available for writing
> + */
> +static int svc_sock_has_write_space(struct svc_sock *svsk, int wspace)
> +{
> + struct svc_serv *serv = svsk->sk_server;
> + int required = atomic_read(&svsk->sk_reserved) + serv->sv_max_mesg;
> +
> + set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags);
> + if (required*2 > wspace) {
> + /* Don't enqueue while not enough space for reply */
> + dprintk("svc: socket %p no space, %d*2 > %d, not enqueued\n",
> + svsk->sk_sk, required, wspace);
> + return 0;
> + }
> + clear_bit(SOCK_NOSPACE, &svsk->sk_sock->flags);
> + return 1;
> +}
So, this is just my ignorance--why do the set and clear of SOCK_NOSPACE
need to be ordered in the way they are? (Why not just set once inside
the if clause?)
--b.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
next prev parent reply other threads:[~2007-05-16 21:11 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-16 19:22 [RFC,PATCH 4/14] knfsd: has_wspace per transport Greg Banks
2007-05-16 21:10 ` J. Bruce Fields [this message]
2007-05-17 7:12 ` Greg Banks
2007-05-17 10:30 ` Neil Brown
2007-05-17 12:39 ` Talpey, Thomas
2007-05-18 0:30 ` Neil Brown
2007-05-18 4:05 ` Greg Banks
2007-05-18 13:33 ` Tom Tucker
2007-05-18 13:39 ` Tom Tucker
2007-05-22 11:16 ` Greg Banks
2007-05-22 17:34 ` Tom Tucker
2007-05-23 2:32 ` Greg Banks
2007-05-23 5:22 ` Tom Tucker
2007-05-23 6:41 ` Greg Banks
2007-05-23 13:36 ` Chuck Lever
2007-05-23 14:39 ` Greg Banks
2007-05-23 20:11 ` Chuck Lever
2007-05-18 13:44 ` Talpey, Thomas
2007-05-18 6:21 ` Greg Banks
2007-05-18 6:38 ` Neil Brown
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=20070516211053.GE18927@fieldses.org \
--to=bfields@fieldses.org \
--cc=Thomas.Talpey@netapp.com \
--cc=gnb@sgi.com \
--cc=nfs@lists.sourceforge.net \
--cc=pleckie@melbourne.sgi.com \
/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