Skip to content

Commit

Permalink
ceph: invalidate_authorizer without con->mutex held
Browse files Browse the repository at this point in the history
This fixes lock ABBA inversion, as the ->invalidate_authorizer()
op may need to take a lock (or even call back into the
messenger).

Signed-off-by: Sage Weil <sage@newdream.net>
  • Loading branch information
Sage Weil committed Feb 25, 2010
1 parent 88d892a commit 161fd65
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions fs/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -1853,14 +1853,6 @@ static void ceph_fault(struct ceph_connection *con)
con->in_msg = NULL;
}

/*
* 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 there are no messages in the queue, place the connection
* in a STANDBY state (i.e., don't try to reconnect just yet). */
Expand Down Expand Up @@ -1890,6 +1882,15 @@ static void ceph_fault(struct ceph_connection *con)
out_unlock:
mutex_unlock(&con->mutex);
out:
/*
* 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 161fd65

Please sign in to comment.