OSDN Git Service

libceph: use a flag to indicate a fault has occurred
authorAlex Elder <elder@inktank.com>
Tue, 19 Feb 2013 18:25:57 +0000 (12:25 -0600)
committerAlex Elder <elder@inktank.com>
Mon, 25 Feb 2013 21:37:32 +0000 (15:37 -0600)
This just rearranges the logic in con_work() a little bit so that a
flag is used to indicate a fault has occurred.  This allows both the
fault and non-fault case to be handled the same way and avoids a
couple of nearly consecutive gotos.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
net/ceph/messenger.c

index c3b9060..18eb788 100644 (file)
@@ -2387,13 +2387,15 @@ 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;
 
        mutex_lock(&con->mutex);
 restart:
        if (con_sock_closed(con)) {
                dout("%s: con %p SOCK_CLOSED\n", __func__, con);
-               goto fault;
+               fault = true;
+               goto done;
        }
        if (con_backoff(con)) {
                dout("%s: con %p BACKOFF\n", __func__, con);
@@ -2418,7 +2420,8 @@ restart:
                goto restart;
        if (ret < 0) {
                con->error_msg = "socket error on read";
-               goto fault;
+               fault = true;
+               goto done;
        }
 
        ret = try_write(con);
@@ -2426,20 +2429,17 @@ restart:
                goto restart;
        if (ret < 0) {
                con->error_msg = "socket error on write";
-               goto fault;
+               fault = true;
        }
-
 done:
+       if (fault)
+               con_fault(con);
        mutex_unlock(&con->mutex);
-done_unlocked:
-       con->ops->put(con);
-       return;
 
-fault:
-       con_fault(con);
-       mutex_unlock(&con->mutex);
-       con_fault_finish(con);
-       goto done_unlocked;
+       if (fault)
+               con_fault_finish(con);
+
+       con->ops->put(con);
 }