From: Alex Elder <elder@inktank.com>
To: "ceph-devel@vger.kernel.org >> ceph-devel" <ceph-devel@vger.kernel.org>
Subject: [PATCH 4/5, v2] libceph: use a do..while loop in con_work()
Date: Fri, 22 Feb 2013 11:30:23 -0600 [thread overview]
Message-ID: <5127AB2F.7070204@inktank.com> (raw)
In-Reply-To: <5127A935.8020605@inktank.com>
This just converts a manually-implemented loop into a do..while loop
in con_work(). It also moves handling of EAGAIN inside the blocks
where it's already been determined an error code was returned.
Also update a few dout() calls near the affected code for
consistency.
NOTE:
This was done in two steps in order to facilitate review. The
This patch will be squashed into the next one before commit.
next patch simply indents the loop properly.
Signed-off-by: Alex Elder <elder@inktank.com>
---
v2: rebased
net/ceph/messenger.c | 39 ++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 18eb788..223406f 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -2387,51 +2387,53 @@ static void con_work(struct work_struct *work)
{
struct ceph_connection *con = container_of(work, struct ceph_connection,
work.work);
- bool fault = false;
- int ret;
+ bool fault;
mutex_lock(&con->mutex);
-restart:
- if (con_sock_closed(con)) {
+while (true) {
+ int ret;
+
+ if ((fault = con_sock_closed(con))) {
dout("%s: con %p SOCK_CLOSED\n", __func__, con);
- fault = true;
- goto done;
+ break;
}
if (con_backoff(con)) {
dout("%s: con %p BACKOFF\n", __func__, con);
- goto done;
+ break;
}
if (con->state == CON_STATE_STANDBY) {
- dout("con_work %p STANDBY\n", con);
- goto done;
+ dout("%s: con %p STANDBY\n", __func__, con);
+ break;
}
if (con->state == CON_STATE_CLOSED) {
- dout("con_work %p CLOSED\n", con);
+ dout("%s: con %p CLOSED\n", __func__, con);
BUG_ON(con->sock);
- goto done;
+ break;
}
if (con->state == CON_STATE_PREOPEN) {
- dout("%s: con %p OPENING\n", __func__, con);
+ dout("%s: con %p PREOPEN\n", __func__, con);
BUG_ON(con->sock);
}
ret = try_read(con);
- if (ret == -EAGAIN)
- goto restart;
if (ret < 0) {
+ if (ret == -EAGAIN)
+ continue;
con->error_msg = "socket error on read";
fault = true;
- goto done;
+ break;
}
ret = try_write(con);
- if (ret == -EAGAIN)
- goto restart;
if (ret < 0) {
+ if (ret == -EAGAIN)
+ continue;
con->error_msg = "socket error on write";
fault = true;
}
-done:
+
+ break; /* If we make it to here, we're done */
+}
if (fault)
con_fault(con);
mutex_unlock(&con->mutex);
@@ -2442,7 +2444,6 @@ done:
con->ops->put(con);
}
-
/*
* Generic error/fault handler. A retry mechanism is used with
* exponential backoff
--
1.7.9.5
next prev parent reply other threads:[~2013-02-22 17:30 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-22 17:18 Updated sparse warning message patches Alex Elder
2013-02-22 17:21 ` [PATCH, v2] rbd: eliminate sparse warnings Alex Elder
2013-02-22 17:21 ` [PATCH, v2] ceph: eliminate sparse warnings in fs code Alex Elder
2013-02-22 17:21 ` [PATCH, v2] libceph: eliminate sparse warnings 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
2013-02-22 17:23 ` [PATCH 2/5] libceph: separate non-locked fault handling Alex Elder
2013-02-22 17:26 ` Alex Elder
2013-02-22 17:32 ` Alex Elder
2013-02-22 17:26 ` [PATCH 3/5, v2] libceph: use a flag to indicate a fault has occurred Alex Elder
2013-02-22 17:30 ` Alex Elder [this message]
2013-02-22 17:30 ` [PATCH 5/5, v2] libceph: indent properly Alex Elder
2013-02-25 19:15 ` Updated sparse warning message patches Josh Durgin
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=5127AB2F.7070204@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.