Re: [PATCH v5 02/11] block: Block Device Filtering Mechanism
From: Yu Kuai <hidden>
Date: 2023-07-18 12:32:12
Also in:
linux-doc, linux-fsdevel, lkml
Hi, 在 2023/07/18 19:25, Sergei Shtepa 写道:
Hi. On 7/18/23 03:37, Yu Kuai wrote:quoted
Subject: Re: [PATCH v5 02/11] block: Block Device Filtering Mechanism From: Yu Kuai [off-list ref] Date: 7/18/23, 03:37 To: Sergei Shtepa [off-list ref], Yu Kuai [off-list ref], 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 [off-list ref], "yukuai (C)" [off-list ref] Hi, 在 2023/07/17 22:39, Sergei Shtepa 写道:quoted
On 7/11/23 04:02, Yu Kuai wrote:quoted
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. Thanks, Kuai
Therefore, I will refrain from making changes for now.quoted
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.quoted
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.