Skip to content

Commit

Permalink
libceph: verify state after retaking con lock after dispatch
Browse files Browse the repository at this point in the history
We drop the con mutex when delivering a message.  When we retake the
lock, we need to verify we are still in the OPEN state before
preparing to read the next tag, or else we risk stepping on a
connection that has been closed.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Alex Elder <elder@inktank.com>
  • Loading branch information
Sage Weil committed Jul 31, 2012
1 parent 4f471e4 commit 7b862e0
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion net/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -2003,7 +2003,6 @@ static void process_message(struct ceph_connection *con)
con->ops->dispatch(con, msg);

mutex_lock(&con->mutex);
prepare_read_tag(con);
}


Expand Down Expand Up @@ -2213,6 +2212,8 @@ static int try_read(struct ceph_connection *con)
if (con->in_tag == CEPH_MSGR_TAG_READY)
goto more;
process_message(con);
if (con->state == CON_STATE_OPEN)
prepare_read_tag(con);
goto more;
}
if (con->in_tag == CEPH_MSGR_TAG_ACK) {
Expand Down

0 comments on commit 7b862e0

Please sign in to comment.