Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752233Ab3FXBWa (ORCPT ); Sun, 23 Jun 2013 21:22:30 -0400 Received: from mail-pa0-f41.google.com ([209.85.220.41]:48327 "EHLO mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751060Ab3FXBW2 (ORCPT ); Sun, 23 Jun 2013 21:22:28 -0400 Date: Mon, 24 Jun 2013 09:22:19 +0800 From: majianpeng To: "Sage Weil" , davem Cc: ceph-devel , linux-kernel , davem Reply-To: majianpeng Subject: [PATCH] libceph: Call con->ops->put(con) if cancel_delayed_work(&con->work) worked. X-Priority: 3 X-GUID: 87C14C1D-6EC1-4AF6-AAD4-91965063FD35 X-Has-Attach: no X-Mailer: Foxmail 7.0.1.90[en] Mime-Version: 1.0 Message-ID: <201306240921544358210@gmail.com> Content-Type: text/plain; charset="gb2312" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id r5O1MePF017848 Content-Length: 929 Lines: 26 Because in func queue_con_delay, it will call con->ops->get(con). So if we cancel the work successfully,we must call con->ops->put(con). Otherwise some resource can't free like 'struct ceph_mds_session'. Signed-off-by: Jianpeng Ma --- net/ceph/messenger.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index eb0a46a..8207b37 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -661,7 +661,8 @@ void ceph_con_close(struct ceph_connection *con) reset_connection(con); con->peer_global_seq = 0; - cancel_delayed_work(&con->work); + if (cancel_delayed_work(&con->work)) + con->ops->put(con); con_close_socket(con); mutex_unlock(&con->mutex); } -- 1.8.1.2 ????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?