On Wed, Jan 26, 2022 at 09:10:52AM +0100, Christoph Hellwig wrote: > On Wed, Jan 26, 2022 at 03:21:04PM +0800, Ming Lei wrote: > > > I think the right way would be to just remove this branch entirely. > > > This means we only account bios with a block_device, which implies > > > they have a gendisk. > > > > That will not account userspace IO, and people may complain. > > > > We can just account passthrough request from userspace by the patch > > in my last email. > > Let's take a step back: what I/O do we want to account, and how > do we want to archive that? FS IO, and passthrough IO from userspace at least, since that is what user cares. Also the bdev/disk is guaranteed to be live when this userspace passthrough IO is inflight. > > Assuming accounting is enabled: > > - current mainline accounts all I/O one queues that have a gendisk > - your original patch accounts file system I/O and some passthrough I/O > that has a special flag set The special flag is just for recognizing userspace passthrough IO. > > Dropping the conditional to grab a bdev from the queue leaves us with > the following rule: > > - all I/O that has a bio and bdev is accounted. This requires > passthrough I/O to explicitly set the bdev in case we haven't > done so, and it requires them to have a bio at all That is basically to make bio->bi_bdev points to part0, and the problem is that you have to make sure that part0 won't be released when this request is inflight. > > I guess you are worried about the latter conditionin that we stop > accounting for no data transfer passthrough commands? No, I meant that bio->bi_bdev isn't setup yet for passthrough request, and not sure that can be done easily. Thanks, Ming