diff options
author | J. Bruce Fields <bfields@redhat.com> | 2010-10-25 12:50:15 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2010-11-19 18:35:11 -0500 |
commit | 62bac4af3d778f6d06d351c0442008967c512588 (patch) | |
tree | b1e0b336d0f23f11896d81e48f2e8f66c2d8f75d /net | |
parent | 43b0178eda1e7e5d1e205bbfd076ab5d6ecacc02 (diff) |
svcrpc: don't set then immediately clear XPT_DEFERRED
There's no harm to doing this, since the only caller will immediately
call svc_enqueue() afterwards, ensuring we don't miss the remaining
deferred requests just because XPT_DEFERRED was briefly cleared.
But why not just do this the simple way?
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/svc_xprt.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index c82fe739fbdc..a74cb67f15bf 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c | |||
@@ -1059,14 +1059,13 @@ static struct svc_deferred_req *svc_deferred_dequeue(struct svc_xprt *xprt) | |||
1059 | if (!test_bit(XPT_DEFERRED, &xprt->xpt_flags)) | 1059 | if (!test_bit(XPT_DEFERRED, &xprt->xpt_flags)) |
1060 | return NULL; | 1060 | return NULL; |
1061 | spin_lock(&xprt->xpt_lock); | 1061 | spin_lock(&xprt->xpt_lock); |
1062 | clear_bit(XPT_DEFERRED, &xprt->xpt_flags); | ||
1063 | if (!list_empty(&xprt->xpt_deferred)) { | 1062 | if (!list_empty(&xprt->xpt_deferred)) { |
1064 | dr = list_entry(xprt->xpt_deferred.next, | 1063 | dr = list_entry(xprt->xpt_deferred.next, |
1065 | struct svc_deferred_req, | 1064 | struct svc_deferred_req, |
1066 | handle.recent); | 1065 | handle.recent); |
1067 | list_del_init(&dr->handle.recent); | 1066 | list_del_init(&dr->handle.recent); |
1068 | set_bit(XPT_DEFERRED, &xprt->xpt_flags); | 1067 | } else |
1069 | } | 1068 | clear_bit(XPT_DEFERRED, &xprt->xpt_flags); |
1070 | spin_unlock(&xprt->xpt_lock); | 1069 | spin_unlock(&xprt->xpt_lock); |
1071 | return dr; | 1070 | return dr; |
1072 | } | 1071 | } |