From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D3EAC63798 for ; Fri, 27 Nov 2020 12:45:42 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 87B6022248 for ; Fri, 27 Nov 2020 12:45:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 87B6022248 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 9DF236B006E; Fri, 27 Nov 2020 07:45:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 98D8F6B0070; Fri, 27 Nov 2020 07:45:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 858CF6B0071; Fri, 27 Nov 2020 07:45:40 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0034.hostedemail.com [216.40.44.34]) by kanga.kvack.org (Postfix) with ESMTP id 6D8EE6B006E for ; Fri, 27 Nov 2020 07:45:40 -0500 (EST) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 2D677181AEF1D for ; Fri, 27 Nov 2020 12:45:40 +0000 (UTC) X-FDA: 77530169640.09.hose55_370e1fa27388 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin09.hostedemail.com (Postfix) with ESMTP id 141E3180AD81F for ; Fri, 27 Nov 2020 12:45:40 +0000 (UTC) X-HE-Tag: hose55_370e1fa27388 X-Filterd-Recvd-Size: 3548 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by imf42.hostedemail.com (Postfix) with ESMTP for ; Fri, 27 Nov 2020 12:45:39 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 280CAABD7; Fri, 27 Nov 2020 12:45:38 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 4AC6D1E1318; Fri, 27 Nov 2020 13:45:37 +0100 (CET) Date: Fri, 27 Nov 2020 13:45:37 +0100 From: Jan Kara To: Christoph Hellwig Cc: Jan Kara , Jens Axboe , Tejun Heo , Josef Bacik , Coly Li , Mike Snitzer , Greg Kroah-Hartman , Johannes Thumshirn , dm-devel@redhat.com, Jan Kara , linux-block@vger.kernel.org, linux-bcache@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Chao Yu Subject: Re: [PATCH 37/44] block: switch partition lookup to use struct block_device Message-ID: <20201127124537.GC27162@quack2.suse.cz> References: <20201126130422.92945-1-hch@lst.de> <20201126130422.92945-38-hch@lst.de> <20201126182219.GC422@quack2.suse.cz> <20201127094842.GA15984@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201127094842.GA15984@lst.de> User-Agent: Mutt/1.10.1 (2018-07-13) X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri 27-11-20 10:48:42, Christoph Hellwig wrote: > On Thu, Nov 26, 2020 at 07:22:19PM +0100, Jan Kara wrote: > > On Thu 26-11-20 14:04:15, Christoph Hellwig wrote: > > > struct hd_struct *disk_get_part(struct gendisk *disk, int partno) > > > { > > > - struct hd_struct *part; > > > + struct block_device *part; > > > > > > rcu_read_lock(); > > > part = __disk_get_part(disk, partno); > > > - if (part) > > > - get_device(part_to_dev(part)); > > > - rcu_read_unlock(); > > > + if (!part) { > > > + rcu_read_unlock(); > > > + return NULL; > > > + } > > > > > > - return part; > > > + get_device(part_to_dev(part->bd_part)); > > > + rcu_read_unlock(); > > > + return part->bd_part; > > > } > > > > This is not directly related to this particular patch but I'm wondering: > > What prevents say del_gendisk() from racing with disk_get_part(), so that > > delete_partition() is called just after we fetched 'part' pointer and the > > last 'part' kobject ref is dropped before disk_get_part() calls > > get_device()? I don't see anything preventing that and so we'd hand out > > 'part' that is soon to be freed (after RCU grace period expires). > > At this point the hd_struct is already allocated together with the > block_device, and thus only freed after the last block_device reference > goes away plus the inode freeing RCU grace period. So the device model > ref to part is indeed gone, but that simply does not matter any more. Well, but once device model ref to part is gone, we're going to free the bdev inode ref as well. Thus there's nothing which pins the bdev containing hd_struct? But now as I'm thinking about it you later switch the device model reference to just pure inode reference and use igrab() which will reliably return NULL if the inode is on it's way to be destroyed so probably we are safe in the final state. Honza -- Jan Kara SUSE Labs, CR