lkml.org 
[lkml]   [2013]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 151/171] libceph: fix protocol feature mismatch failure path
    Date
    3.4-stable review patch.  If anyone has any objections, please let me know.

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


    From: Sage Weil <sage@inktank.com>

    We should not set con->state to CLOSED here; that happens in
    ceph_fault() in the caller, where it first asserts that the state
    is not yet CLOSED. Avoids a BUG when the features don't match.

    Since the fail_protocol() has become a trivial wrapper, replace
    calls to it with direct calls to reset_connection().

    Signed-off-by: Sage Weil <sage@inktank.com>
    Reviewed-by: Alex Elder <elder@inktank.com>
    (cherry picked from commit 0fa6ebc600bc8e830551aee47a0e929e818a1868)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ceph/messenger.c | 14 ++++----------
    1 file changed, 4 insertions(+), 10 deletions(-)

    --- a/net/ceph/messenger.c
    +++ b/net/ceph/messenger.c
    @@ -506,6 +506,7 @@ static void reset_connection(struct ceph
    {
    /* reset connection, out_queue, msg_ and connect_seq */
    /* discard existing out_queue and msg_seq */
    + dout("reset_connection %p\n", con);
    ceph_msg_remove_list(&con->out_queue);
    ceph_msg_remove_list(&con->out_sent);

    @@ -1502,13 +1503,6 @@ static int process_banner(struct ceph_co
    return 0;
    }

    -static void fail_protocol(struct ceph_connection *con)
    -{
    - reset_connection(con);
    - WARN_ON(con->state != CON_STATE_NEGOTIATING);
    - con->state = CON_STATE_CLOSED;
    -}
    -
    static int process_connect(struct ceph_connection *con)
    {
    u64 sup_feat = con->msgr->supported_features;
    @@ -1526,7 +1520,7 @@ static int process_connect(struct ceph_c
    ceph_pr_addr(&con->peer_addr.in_addr),
    sup_feat, server_feat, server_feat & ~sup_feat);
    con->error_msg = "missing required protocol features";
    - fail_protocol(con);
    + reset_connection(con);
    return -1;

    case CEPH_MSGR_TAG_BADPROTOVER:
    @@ -1537,7 +1531,7 @@ static int process_connect(struct ceph_c
    le32_to_cpu(con->out_connect.protocol_version),
    le32_to_cpu(con->in_reply.protocol_version));
    con->error_msg = "protocol version mismatch";
    - fail_protocol(con);
    + reset_connection(con);
    return -1;

    case CEPH_MSGR_TAG_BADAUTHORIZER:
    @@ -1627,7 +1621,7 @@ static int process_connect(struct ceph_c
    ceph_pr_addr(&con->peer_addr.in_addr),
    req_feat, server_feat, req_feat & ~server_feat);
    con->error_msg = "missing required protocol features";
    - fail_protocol(con);
    + reset_connection(con);
    return -1;
    }




    \
     
     \ /
      Last update: 2013-01-16 01:41    [W:4.068 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site