3.4-stable review patch.  If anyone has any objections, please let me know.

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

From: Sage Weil <s...@inktank.com>

(cherry picked from commit 00650931e52e97fe64096bec167f5a6780dfd94a)

Avoid dropping and retaking con->mutex in the ceph_con_send() case by
leaving locking up to the caller.

Signed-off-by: Sage Weil <s...@inktank.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 net/ceph/messenger.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -2441,12 +2441,10 @@ static void clear_standby(struct ceph_co
 {
        /* come back from STANDBY? */
        if (test_and_clear_bit(STANDBY, &con->state)) {
-               mutex_lock(&con->mutex);
                dout("clear_standby %p and ++connect_seq\n", con);
                con->connect_seq++;
                WARN_ON(test_bit(WRITE_PENDING, &con->flags));
                WARN_ON(test_bit(KEEPALIVE_PENDING, &con->flags));
-               mutex_unlock(&con->mutex);
        }
 }
 
@@ -2483,11 +2481,12 @@ void ceph_con_send(struct ceph_connectio
             le32_to_cpu(msg->hdr.front_len),
             le32_to_cpu(msg->hdr.middle_len),
             le32_to_cpu(msg->hdr.data_len));
+
+       clear_standby(con);
        mutex_unlock(&con->mutex);
 
        /* if there wasn't anything waiting to send before, queue
         * new work */
-       clear_standby(con);
        if (test_and_set_bit(WRITE_PENDING, &con->flags) == 0)
                queue_con(con);
 }
@@ -2574,7 +2573,9 @@ void ceph_msg_revoke_incoming(struct cep
 void ceph_con_keepalive(struct ceph_connection *con)
 {
        dout("con_keepalive %p\n", con);
+       mutex_lock(&con->mutex);
        clear_standby(con);
+       mutex_unlock(&con->mutex);
        if (test_and_set_bit(KEEPALIVE_PENDING, &con->flags) == 0 &&
            test_and_set_bit(WRITE_PENDING, &con->flags) == 0)
                queue_con(con);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to