Received: by 2002:a05:6358:7058:b0:131:369:b2a3 with SMTP id 24csp7123983rwp; Tue, 18 Jul 2023 10:19:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlEBoagdfGmjWklG6Up9m9XUqiyzPGaYwPUNcvnrPHFkxTAVqorZPANdlE9W8Ow4TBMQnxSN X-Received: by 2002:a05:6a20:3d07:b0:133:89e:bf1a with SMTP id y7-20020a056a203d0700b00133089ebf1amr14227890pzi.4.1689700798198; Tue, 18 Jul 2023 10:19:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689700798; cv=none; d=google.com; s=arc-20160816; b=nv0OjPPL3OZO6DW3bGXartEg2J56s85w9CWFJhG22JIifuUm7cJ07kQIexK2bkqYwt Fa63JkNckUi/CUgK0sDcuk4viQflaPBvDpjcs9/k7YHA2vk9XZNqwqJO+I/TKEH4KDCT 8Nw7OflIecY1dqApC5nJpIRJGTHsy7yEnDLH1vLIVXTw/x5Y80hJ2ayoeLsqFq9xn2mo 2uVdFZV0vOklcHPjf+b4+L6geJgUzCT5toisCkUMpwB4eeyZTFWvvh8SFSIowxvY3OvM DCcC6OGOK2oSQfkpOulkKr/BFJ4lJEMohH5X/vXi7FZLCG6F41p6xxhXFLjvX4eQYRf0 +2PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=HupSvzm2vncOrOzzRtgKkwQ3ecploXR1dUcOc8VjTcY=; fh=Wop/i/wLAV0FNJXQAD2gBcLbhXzdxGFCn6xWob33xCQ=; b=JfMRdR0X5pWtAPzGM9L2FThj/soNLqxGsH2TjGWEc3s1lqis496tM9frz+qRgc1m81 71Vur8oCr0k+PwBC8oMEIs4KG08AFniq+QofyBdk6KUb2jx/Z79L2Uc7XH6et60it05O 5mraEpx2za9EbRrGjY5in2exEqXNRnGmPiMsMFVWNrkeUGPaMcgHXz4UjT8GFkgsQr3/ zoXDi9i4SIlYBYH4bdVAuUZS0G2gj7yJdcgmQiP4pkHUz+28aJiFStFWN0wiS+UfhtQt tk6hLPlg9y4CuaT7jeM6UoMngWjZBzSGcMqc7BTsCEPYbvbsHE7n+RzyYmX0mR2Y6sDg GOGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@veeam.com header.s=mx2-2022 header.b=Xfr8MtO0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=veeam.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v13-20020a63f20d000000b0055b6a782669si1880748pgh.261.2023.07.18.10.19.18; Tue, 18 Jul 2023 10:19:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@veeam.com header.s=mx2-2022 header.b=Xfr8MtO0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=veeam.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233052AbjGRQeT (ORCPT + 99 others); Tue, 18 Jul 2023 12:34:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46750 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233009AbjGRQeQ (ORCPT ); Tue, 18 Jul 2023 12:34:16 -0400 Received: from mx2.veeam.com (mx2.veeam.com [64.129.123.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C3153124; Tue, 18 Jul 2023 09:34:14 -0700 (PDT) Received: from mail.veeam.com (prgmbx01.amust.local [172.24.128.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx2.veeam.com (Postfix) with ESMTPS id 4A31041087; Tue, 18 Jul 2023 12:34:12 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=veeam.com; s=mx2-2022; t=1689698052; bh=HupSvzm2vncOrOzzRtgKkwQ3ecploXR1dUcOc8VjTcY=; h=Date:Subject:To:CC:References:From:In-Reply-To:From; b=Xfr8MtO0+Zi2DaBlCSpzeAykKnjx/XsIpmvblMY3k28janKsB5HiuMje4LAIaIbw5 06gEUAijroubdt4JN02gRmhyIx7LbR32zkCEs0XSi/LXTxhl003VbRKan84J2ddFsk xt/F6ECKvcuYnhGrsvGSed2GcI3RPEd8wsztZHMcbytBGfkjsBCd9EOeZrWhiZNwtP lQ28p2prZeN+aytMKbHjh1KTyhp3tlkd2CEPc6Q2AyLOfzpw/qSw+waj/zgMc42nc5 AFzm2arV/NPfColw9+5vzXg7ckh6NMkvQTVkOOBwJDf1Dw2X3RdGlQ59D9Jjfclatj ++27WJliivqfQ== Received: from [172.24.10.107] (172.24.10.107) by prgmbx01.amust.local (172.24.128.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.16; Tue, 18 Jul 2023 18:34:05 +0200 Message-ID: Date: Tue, 18 Jul 2023 18:33:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v5 02/11] block: Block Device Filtering Mechanism Content-Language: en-US To: Yu Kuai , , , , CC: , , , , , , , , , , , , Donald Buczek , "yukuai (C)" References: <20230612135228.10702-1-sergei.shtepa@veeam.com> <20230612135228.10702-3-sergei.shtepa@veeam.com> <90f79cf3-86a2-02c0-1887-d3490f9848bb@veeam.com> <686b9999-c903-cff1-48ba-21324031da17@veeam.com> From: Sergei Shtepa In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [172.24.10.107] X-ClientProxiedBy: colmbx01.amust.local (172.31.112.31) To prgmbx01.amust.local (172.24.128.102) X-EsetResult: clean, is OK X-EsetId: 37303A292403155B677765 X-Veeam-MMEX: True X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/18/23 14:32, Yu Kuai wrote: > Subject: > Re: [PATCH v5 02/11] block: Block Device Filtering Mechanism > From: > Yu Kuai > Date: > 7/18/23, 14:32 > > To: > Sergei Shtepa , Yu Kuai , axboe@kernel.dk, hch@infradead.org, corbet@lwn.net, snitzer@kernel.org > CC: > viro@zeniv.linux.org.uk, brauner@kernel.org, dchinner@redhat.com, willy@infradead.org, dlemoal@kernel.org, linux@weissschuh.net, jack@suse.cz, ming.lei@redhat.com, linux-block@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Donald Buczek , "yukuai (C)" > > > Hi, > > 在 2023/07/18 19:25, Sergei Shtepa 写道: >> Hi. >> >> On 7/18/23 03:37, Yu Kuai wrote: >>> Subject: >>> Re: [PATCH v5 02/11] block: Block Device Filtering Mechanism >>> From: >>> Yu Kuai >>> Date: >>> 7/18/23, 03:37 >>> >>> To: >>> Sergei Shtepa , Yu Kuai , axboe@kernel.dk, hch@infradead.org, corbet@lwn.net, snitzer@kernel.org >>> CC: >>> viro@zeniv.linux.org.uk, brauner@kernel.org, dchinner@redhat.com, willy@infradead.org, dlemoal@kernel.org, linux@weissschuh.net, jack@suse.cz, ming.lei@redhat.com, linux-block@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Donald Buczek , "yukuai (C)" >>> >>> >>> Hi, >>> >>> 在 2023/07/17 22:39, Sergei Shtepa 写道: >>>> >>>> >>>> On 7/11/23 04:02, Yu Kuai wrote: >>>>> bdev_disk_changed() is not handled, where delete_partition() and >>>>> add_partition() will be called, this means blkfilter for partiton will >>>>> be removed after partition rescan. Am I missing something? >>>> >>>> Yes, when the bdev_disk_changed() is called, all disk block devices >>>> are deleted and new ones are re-created. Therefore, the information >>>> about the attached filters will be lost. This is equivalent to >>>> removing the disk and adding it back. >>>> >>>> For the blksnap module, partition rescan will mean the loss of the >>>> change trackers data. If a snapshot was created, then such >>>> a partition rescan will cause the snapshot to be corrupted. >>>> >>> >>> I haven't review blksnap code yet, but this sounds like a problem. >> >> I can't imagine a case where this could be a problem. >> Partition rescan is possible only if the file system has not been >> mounted on any of the disk partitions. Ioctl BLKRRPART will return >> -EBUSY. Therefore, during normal operation of the system, rescan is >> not performed. >> And if the file systems have not been mounted, it is possible that >> the disk partition structure has changed or the disk in the media >> device has changed. In this case, it is better to detach the >> filter, otherwise it may lead to incorrect operation of the module. >> >> We can add prechange/postchange callback functions so that the >> filter can track rescan process. But at the moment, this is not >> necessary for the blksnap module. > > So you mean that blkfilter is only used for the case that partition > is mounted? (Or you mean that partition is opened) > > Then, I think you mean that filter should only be used for the partition > that is opended? Otherwise, filter can be gone at any time since > partition rescan can be gone. > > //user > 1. attach filter >         // other context rescan partition > 2. mount fs > // user will found filter is gone. Mmm... The fact is that at the moment the user of the filter is the blksnap module. There are no other filter users yet. The blksnap module solves the problem of creating snapshots, primarily for backup purposes. Therefore, the main use case is to attach a filter for an already running system, where all partitions are marked up, file systems are mounted. If the server is being serviced, during which the disk is being re-partitioned, then disabling the filter is normal. In this case, the change tracker will be reset, and at the next backup, the filter will be attached again. But if I were still solving the problem of saving the filter when rescanning, then it is necessary to take into account the UUID and name of the partition (struct partition_meta_info). It is unacceptable that due to a change in the structure of partitions, the filter is attached to another partition by mistake. The changed() callback would also be good to add so that the filter receives a notification that the block device has been updated. But I'm not sure that this should be done, since if some code is not used in the kernel, then it should not be in the kernel. > > Thanks, > Kuai > >> >> Therefore, I will refrain from making changes for now. >> >>> >>> possible solutions I have in mind: >>> >>> 1. Store blkfilter for each partition from bdev_disk_changed() before >>> delete_partition(), and add blkfilter back after add_partition(). >>> >>> 2. Store blkfilter from gendisk as a xarray, and protect it by >>> 'open_mutex' like 'part_tbl', block_device can keep the pointer to >>> reference blkfilter so that performance from fast path is ok, and the >>> lifetime of blkfiter can be managed separately. >>> >>>> There was an idea to do filtering at the disk level, >>>> but I abandoned it. >>>> . >>>> >>> I think it's better to do filtering at the partition level as well. >>> >>> Thanks, >>> Kuai >>> >> . >> >