From patchwork Fri Aug 30 00:57:08 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Durgin X-Patchwork-Id: 2851703 Return-Path: X-Original-To: patchwork-ceph-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id DB7FB9F2F4 for ; Fri, 30 Aug 2013 01:09:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 15CF120278 for ; Fri, 30 Aug 2013 01:09:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0FF76202C6 for ; Fri, 30 Aug 2013 01:09:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753511Ab3H3BJm (ORCPT ); Thu, 29 Aug 2013 21:09:42 -0400 Received: from mail.hq.newdream.net ([66.33.206.127]:39835 "EHLO mail.hq.newdream.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753395Ab3H3BJl (ORCPT ); Thu, 29 Aug 2013 21:09:41 -0400 Received: from mail.hq.newdream.net (localhost [127.0.0.1]) by mail.hq.newdream.net (Postfix) with ESMTP id A9A2626391 for ; Thu, 29 Aug 2013 18:13:35 -0700 (PDT) Received: from vit.ops.newdream.net (unknown [38.122.20.226]) by mail.hq.newdream.net (Postfix) with ESMTPSA id A2A1226389 for ; Thu, 29 Aug 2013 18:13:35 -0700 (PDT) From: Josh Durgin To: ceph-devel@vger.kernel.org Subject: [PATCH v2 3/3] rbd: make rbd_obj_notify_ack() synchronous Date: Thu, 29 Aug 2013 17:57:08 -0700 Message-Id: <1377824228-14632-3-git-send-email-josh.durgin@inktank.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1377824228-14632-1-git-send-email-josh.durgin@inktank.com> References: <1377824228-14632-1-git-send-email-josh.durgin@inktank.com> In-Reply-To: <1377757447-23515-4-git-send-email-josh.durgin@inktank.com> References: <1377757447-23515-4-git-send-email-josh.durgin@inktank.com> Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The only user is rbd_watch_cb(). If this is asynchronous, there is no tracking of when it completes, so it may still be in progress when the osd_client is shut down. This results in a BUG() since the osd client assumes no requests are in flight when it stops. Since all notifies are flushed now, waiting for the notify ack to complete before returning from the watch callback ensures there are no notify acks in flight during shutdown. Signed-off-by: Josh Durgin --- drivers/block/rbd.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 2223617..0e83a10 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -2826,13 +2826,15 @@ static int rbd_obj_notify_ack(struct rbd_device *rbd_dev, u64 notify_id) obj_request->osd_req = rbd_osd_req_create(rbd_dev, false, obj_request); if (!obj_request->osd_req) goto out; - obj_request->callback = rbd_obj_request_put; osd_req_op_watch_init(obj_request->osd_req, 0, CEPH_OSD_OP_NOTIFY_ACK, notify_id, 0, 0); rbd_osd_req_format_read(obj_request); ret = rbd_obj_request_submit(osdc, obj_request); + if (ret) + goto out; + ret = rbd_obj_request_wait(obj_request); out: if (ret) rbd_obj_request_put(obj_request);