lkml.org 
[lkml]   [2012]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 129/270] libceph: move ceph_con_send() closed check under the con mutex
    Date
    3.5.7u1 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sage Weil <sage@inktank.com>

    commit a59b55a602b6c741052d79c1e3643f8440cddd27 upstream.

    Take the con mutex before checking whether the connection is closed to
    avoid racing with someone else closing it.

    Signed-off-by: Sage Weil <sage@inktank.com>
    Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
    ---
    net/ceph/messenger.c | 16 +++++++---------
    1 file changed, 7 insertions(+), 9 deletions(-)

    diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
    index 1a3cb4a..20e60a8 100644
    --- a/net/ceph/messenger.c
    +++ b/net/ceph/messenger.c
    @@ -2453,22 +2453,20 @@ static void clear_standby(struct ceph_connection *con)
    */
    void ceph_con_send(struct ceph_connection *con, struct ceph_msg *msg)
    {
    - if (test_bit(CLOSED, &con->state)) {
    - dout("con_send %p closed, dropping %p\n", con, msg);
    - ceph_msg_put(msg);
    - return;
    - }
    -
    /* set src+dst */
    msg->hdr.src = con->msgr->inst.name;
    -
    BUG_ON(msg->front.iov_len != le32_to_cpu(msg->hdr.front_len));
    -
    msg->needs_out_seq = true;

    - /* queue */
    mutex_lock(&con->mutex);

    + if (test_bit(CLOSED, &con->state)) {
    + dout("con_send %p closed, dropping %p\n", con, msg);
    + ceph_msg_put(msg);
    + mutex_unlock(&con->mutex);
    + return;
    + }
    +
    BUG_ON(msg->con != NULL);
    msg->con = con->ops->get(con);
    BUG_ON(msg->con == NULL);
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-11-26 20:01    [W:5.061 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site