From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751241AbdJNGE1 (ORCPT ); Sat, 14 Oct 2017 02:04:27 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:53752 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750749AbdJNGEZ (ORCPT ); Sat, 14 Oct 2017 02:04:25 -0400 X-Google-Smtp-Source: AOwi7QDDzJZFDUg02x3yRjEjfoPCJZnfXFegzWsclKoacijGYWDwnf/2K5JC/7VHKaUXCMXowLWNGg== Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (1.0) Subject: Re: [GIT PULL 02/58] lightnvm: prevent bd removal if busy From: =?utf-8?Q?Javier_Gonz=C3=A1lez?= X-Mailer: iPhone Mail (15A421) In-Reply-To: Date: Sat, 14 Oct 2017 08:04:21 +0200 Cc: Christoph Hellwig , =?utf-8?Q?Matias_Bj=C3=B8rling?= , axboe@fb.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: References: <20171013124647.32668-1-m@bjorling.me> <20171013124647.32668-3-m@bjorling.me> <20171013145809.GA16745@infradead.org> <20171013153513.GA3755@hercules.tuxera.com> To: Rakesh Pandit 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 quoted-printable to 8bit by nfs id v9E64Xmn003941 > On 13 Oct 2017, at 17.58, Javier González wrote: > > >>> On 13 Oct 2017, at 17.35, Rakesh Pandit wrote: >>> >>>> On Fri, Oct 13, 2017 at 07:58:09AM -0700, Christoph Hellwig wrote: >>>> On Fri, Oct 13, 2017 at 02:45:51PM +0200, Matias Bjørling wrote: >>>> From: Rakesh Pandit >>>> >>>> When a virtual block device is formatted and mounted after creating >>>> with "nvme lnvm create... -t pblk", a removal from "nvm lnvm remove" >>>> would result in this: >>>> >>>> 446416.309757] bdi-block not registered >>>> [446416.309773] ------------[ cut here ]------------ >>>> [446416.309780] WARNING: CPU: 3 PID: 4319 at fs/fs-writeback.c:2159 >>>> __mark_inode_dirty+0x268/0x340 >>>> >>>> Ideally removal should return -EBUSY as block device is mounted after >>>> formatting. This patch tries to address this checking if whole device >>>> or any partition of it already mounted or not before removal. >>> >>> How is this different from any other block device that can be >>> removed even if a file system is mounted? >> >> One can create many virtual block devices on top of physical using: >> nvme lnvm create ... -t pblk >> >> And remove them using: >> nvme lnvm remove >> >> Because the block devices are virtual in nature created by a program I was >> expecting removal to tell me they are busy instead of bdi-block not registered >> following by a WARNING (above). My use case was writing automatic test case >> but I assumed this is useful in general. >> >>> >>>> >>>> Whole device is checked using "bd_super" member of block device. This >>>> member is always set once block device has been mounted using a >>>> filesystem. Another member "bd_part_count" takes care of checking any >>>> if any partitions are under use. "bd_part_count" is only updated >>>> under locks when partitions are opened or closed (first open and last >>>> release). This at least does take care sending -EBUSY if removal is >>>> being attempted while whole block device or any partition is mounted. >>>> >>> >>> That's a massive layering violation, and a driver has no business >>> looking at these fields. >> >> Okay, I didn't consider this earlier. I would suggest a revert for this. > > The use case is still valid, since a block device typically does not disappear under a file system - at least not because of a script suddenly removing it by mistake. > > Any suggestion on how we can do this better? > Thinking about it, it does not seem like we have any checks now when removing a fabrics block device? Would it make sense to have a common way to let drivers know if they are in use, at least to give a warning? Javier