Message ID | 20231205123728.1866699-3-yukuai1@huaweicloud.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: don't access bd_inode directly from other modules | expand |
On Tue, Dec 05, 2023 at 08:37:16PM +0800, Yu Kuai wrote: > diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c > index e34219ea2b05..e645afa4af57 100644 > --- a/drivers/block/xen-blkback/xenbus.c > +++ b/drivers/block/xen-blkback/xenbus.c > @@ -104,8 +104,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif) > xenbus_dev_error(blkif->be->dev, err, "block flush"); > return; > } > - invalidate_inode_pages2( > - blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping); > + invalidate_bdev(blkif->vbd.bdev_handle->bdev); blkbak is a bdev exported. I don't think it should ever call invalidate_inode_pages2, through a wrapper or not.
Hi, 在 2023/12/06 13:55, Christoph Hellwig 写道: > On Tue, Dec 05, 2023 at 08:37:16PM +0800, Yu Kuai wrote: >> diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c >> index e34219ea2b05..e645afa4af57 100644 >> --- a/drivers/block/xen-blkback/xenbus.c >> +++ b/drivers/block/xen-blkback/xenbus.c >> @@ -104,8 +104,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif) >> xenbus_dev_error(blkif->be->dev, err, "block flush"); >> return; >> } >> - invalidate_inode_pages2( >> - blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping); >> + invalidate_bdev(blkif->vbd.bdev_handle->bdev); > > blkbak is a bdev exported. I don't think it should ever call > invalidate_inode_pages2, through a wrapper or not. I'm not sure about this. I'm not familiar with xen/blkback, but I saw that xen-blkback will open a bdev from xen_vbd_create(), hence this looks like a dm/md for me, hence it sounds reasonable to sync + invalidate the opened bdev while initialization. Please kindly correct me if I'm wrong. Thanks, Kuai > > . >
On Wed, Dec 06, 2023 at 02:56:05PM +0800, Yu Kuai wrote: > > > - invalidate_inode_pages2( > > > - blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping); > > > + invalidate_bdev(blkif->vbd.bdev_handle->bdev); > > > > blkbak is a bdev exported. I don't think it should ever call > > invalidate_inode_pages2, through a wrapper or not. > > I'm not sure about this. I'm not familiar with xen/blkback, but I saw > that xen-blkback will open a bdev from xen_vbd_create(), hence this > looks like a dm/md for me, hence it sounds reasonable to sync + > invalidate the opened bdev while initialization. Please kindly correct > me if I'm wrong. I guess we have enough precedence for this, so the switchover here isn't wrong. But all this invalidating of the bdev cache seems to be asking for trouble.
diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index e34219ea2b05..e645afa4af57 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -104,8 +104,7 @@ static void xen_update_blkif_status(struct xen_blkif *blkif) xenbus_dev_error(blkif->be->dev, err, "block flush"); return; } - invalidate_inode_pages2( - blkif->vbd.bdev_handle->bdev->bd_inode->i_mapping); + invalidate_bdev(blkif->vbd.bdev_handle->bdev); for (i = 0; i < blkif->nr_rings; i++) { ring = &blkif->rings[i];