From: Alex Elder <elder@inktank.com>
To: ceph-devel <ceph-devel@vger.kernel.org>
Subject: [PATCH 1/5] libceph: encapsulate connection backoff
Date: Tue, 19 Feb 2013 18:55:24 -0600 [thread overview]
Message-ID: <51241EFC.2080104@inktank.com> (raw)
In-Reply-To: <51241E15.80903@inktank.com>
Collect the code that tests for and implements a backoff delay for a
ceph connection into a new function, ceph_backoff().
Make the debug output messages in that part of the code report
things consistently by reporting a message in the socket closed
case, and by making the one for PREOPEN state report the connection
pointer like the rest.
Signed-off-by: Alex Elder <elder@inktank.com>
---
net/ceph/messenger.c | 37 ++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index ab702cd..686973c 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -2296,6 +2296,24 @@ static bool con_sock_closed(struct
ceph_connection *con)
return true;
}
+static bool con_backoff(struct ceph_connection *con)
+{
+ int ret;
+
+ if (!test_and_clear_bit(CON_FLAG_BACKOFF, &con->flags))
+ return false;
+
+ ret = queue_con_delay(con, round_jiffies_relative(con->delay));
+ if (ret) {
+ dout("%s %p FAILED to back off %lu\n",
+ __func__, con, con->delay);
+ BUG_ON(ret == -ENOENT);
+ set_bit(CON_FLAG_BACKOFF, &con->flags);
+ }
+
+ return true;
+}
+
/*
* Do some work on a connection. Drop a connection ref when we're done.
*/
@@ -2307,21 +2325,14 @@ static void con_work(struct work_struct *work)
mutex_lock(&con->mutex);
restart:
- if (con_sock_closed(con))
+ if (con_sock_closed(con)) {
+ dout("con_work %p SOCK_CLOSED\n", con);
goto fault;
-
- if (test_and_clear_bit(CON_FLAG_BACKOFF, &con->flags)) {
- dout("con_work %p backing off\n", con);
- ret = queue_con_delay(con, round_jiffies_relative(con->delay));
- if (ret) {
- dout("con_work %p FAILED to back off %lu\n", con,
- con->delay);
- BUG_ON(ret == -ENOENT);
- set_bit(CON_FLAG_BACKOFF, &con->flags);
- }
+ }
+ if (con_backoff(con)) {
+ dout("con_work %p BACKOFF\n", con);
goto done;
}
-
if (con->state == CON_STATE_STANDBY) {
dout("con_work %p STANDBY\n", con);
goto done;
@@ -2332,7 +2343,7 @@ restart:
goto done;
}
if (con->state == CON_STATE_PREOPEN) {
- dout("con_work OPENING\n");
+ dout("con_work %p OPENING\n", con);
BUG_ON(con->sock);
}
--
1.7.9.5
next prev parent reply other threads:[~2013-02-20 0:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-20 0:51 [PATCH 0/5] libceph clean up con_work() Alex Elder
2013-02-20 0:55 ` Alex Elder [this message]
2013-02-20 0:55 ` [PATCH 2/5] libceph: separate non-locked fault handling Alex Elder
2013-02-20 0:56 ` [PATCH 3/5] libceph: use a flag to indicate a fault has occurred Alex Elder
2013-02-20 0:56 ` [PATCH 4/5] libceph: use a do..while loop in con_work() Alex Elder
2013-02-20 0:57 ` [PATCH 5/5] libceph: indent properly Alex Elder
-- strict thread matches above, loose matches on Subject: below --
2013-02-22 17:18 Updated sparse warning message patches Alex Elder
2013-02-22 17:21 ` [PATCH 0/5, v2] libceph clean up con_work() Alex Elder
2013-02-22 17:23 ` [PATCH 1/5] libceph: encapsulate connection backoff Alex Elder
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=51241EFC.2080104@inktank.com \
--to=elder@inktank.com \
--cc=ceph-devel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.