Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 359687
b: refs/heads/master
c: 9320926
h: refs/heads/master
i:
  359685: ab6fa47
  359683: 4c54a2a
  359679: ed40ea8
v: v3
  • Loading branch information
Alex Elder committed Feb 25, 2013
1 parent ac1717b commit 43dc8c5
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f20a39fd6e6356b4cf3c1650c4dc6c66c99d8bae
refs/heads/master: 93209264203987cdd2c69d34df6eaa2cd184e283
42 changes: 23 additions & 19 deletions trunk/net/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ static struct lock_class_key socket_class;

static void queue_con(struct ceph_connection *con);
static void con_work(struct work_struct *);
static void ceph_fault(struct ceph_connection *con);
static void con_fault(struct ceph_connection *con);

/*
* Nicely render a sockaddr as a string. An array of formatted
Expand Down Expand Up @@ -2363,6 +2363,23 @@ static bool con_backoff(struct ceph_connection *con)
return true;
}

/* Finish fault handling; con->mutex must *not* be held here */

static void con_fault_finish(struct ceph_connection *con)
{
/*
* in case we faulted due to authentication, invalidate our
* current tickets so that we can get new ones.
*/
if (con->auth_retry && con->ops->invalidate_authorizer) {
dout("calling invalidate_authorizer()\n");
con->ops->invalidate_authorizer(con);
}

if (con->ops->fault)
con->ops->fault(con);
}

/*
* Do some work on a connection. Drop a connection ref when we're done.
*/
Expand Down Expand Up @@ -2419,7 +2436,9 @@ static void con_work(struct work_struct *work)
return;

fault:
ceph_fault(con); /* error/fault path */
con_fault(con);
mutex_unlock(&con->mutex);
con_fault_finish(con);
goto done_unlocked;
}

Expand All @@ -2428,8 +2447,7 @@ static void con_work(struct work_struct *work)
* Generic error/fault handler. A retry mechanism is used with
* exponential backoff
*/
static void ceph_fault(struct ceph_connection *con)
__releases(con->mutex)
static void con_fault(struct ceph_connection *con)
{
pr_warning("%s%lld %s %s\n", ENTITY_NAME(con->peer_name),
ceph_pr_addr(&con->peer_addr.in_addr), con->error_msg);
Expand All @@ -2445,7 +2463,7 @@ static void ceph_fault(struct ceph_connection *con)
if (con_flag_test(con, CON_FLAG_LOSSYTX)) {
dout("fault on LOSSYTX channel, marking CLOSED\n");
con->state = CON_STATE_CLOSED;
goto out_unlock;
return;
}

if (con->in_msg) {
Expand Down Expand Up @@ -2476,20 +2494,6 @@ static void ceph_fault(struct ceph_connection *con)
con_flag_set(con, CON_FLAG_BACKOFF);
queue_con(con);
}

out_unlock:
mutex_unlock(&con->mutex);
/*
* in case we faulted due to authentication, invalidate our
* current tickets so that we can get new ones.
*/
if (con->auth_retry && con->ops->invalidate_authorizer) {
dout("calling invalidate_authorizer()\n");
con->ops->invalidate_authorizer(con);
}

if (con->ops->fault)
con->ops->fault(con);
}


Expand Down

0 comments on commit 43dc8c5

Please sign in to comment.