Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752183AbdGDL6B (ORCPT ); Tue, 4 Jul 2017 07:58:01 -0400 Received: from mail4.gandi.net ([217.70.183.210]:50510 "EHLO gandi.net" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751910AbdGDL6A (ORCPT ); Tue, 4 Jul 2017 07:58:00 -0400 X-Greylist: delayed 565 seconds by postgrey-1.27 at vger.kernel.org; Tue, 04 Jul 2017 07:58:00 EDT X-Spam-Flag: NO X-Spam-Score: -101.555 Date: Tue, 4 Jul 2017 13:48:32 +0200 From: Vincent Legout To: Boris Ostrovsky , Juergen Gross , Konrad Rzeszutek Wilk , Roger Pau =?utf-8?B?TW9ubsOp?= , xen-devel@lists.xenproject.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH] xen-blkfront: emit KOBJ_OFFLINE uevent when detaching device Message-ID: <20170704114823.pvk6323gfebioikl@bres.gandi.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: NeoMutt/20170306 (1.8.0) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2076 Lines: 52 Devices are not unmounted inside a domU after a xl block-detach. After xl block-detach, blkfront_closing() is called with state == XenbusStateConnected, it detects that the device is still in use and only switches state to XenbusStateClosing. blkfront_closing() is called a second time but returns immediately because state == XenbusStateClosing. Thus the device keeps being mounted inside the domU. To fix this, emit a KOBJ_OFFLINE uevent even if the device has users. With this patch, inside domU, udev has: KERNEL[16994.526789] offline /devices/vbd-51728/block/xvdb (block) KERNEL[16994.796197] remove /devices/virtual/bdi/202:16 (bdi) KERNEL[16994.797167] remove /devices/vbd-51728/block/xvdb (block) UDEV [16994.798035] remove /devices/virtual/bdi/202:16 (bdi) UDEV [16994.809429] offline /devices/vbd-51728/block/xvdb (block) UDEV [16994.842365] remove /devices/vbd-51728/block/xvdb (block) KERNEL[16995.461991] remove /devices/vbd-51728 (xen) UDEV [16995.462549] remove /devices/vbd-51728 (xen) While without, it had: KERNEL[30.862764] remove /devices/vbd-51728 (xen) UDEV [30.867838] remove /devices/vbd-51728 (xen) Signed-off-by: Pascal Bouchareine Signed-off-by: Fatih Acar Signed-off-by: Vincent Legout --- drivers/block/xen-blkfront.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c index 39459631667c..da0b0444ee1f 100644 --- a/drivers/block/xen-blkfront.c +++ b/drivers/block/xen-blkfront.c @@ -2185,8 +2185,10 @@ static void blkfront_closing(struct blkfront_info *info) mutex_lock(&bdev->bd_mutex); if (bdev->bd_openers) { - xenbus_dev_error(xbdev, -EBUSY, - "Device in use; refusing to close"); + dev_warn(disk_to_dev(info->gd), + "detaching %s with pending users\n", + xbdev->nodename); + kobject_uevent(&disk_to_dev(info->gd)->kobj, KOBJ_OFFLINE); xenbus_switch_state(xbdev, XenbusStateClosing); } else { xlvbd_release_gendisk(info); -- 2.13.2