Message ID | 20230518042323.663189-14-hch@lst.de (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | [01/13] block: factor out a bd_end_claim helper from blkdev_put | expand |
On Thu, May 18, 2023 at 06:23:22AM +0200, Christoph Hellwig wrote: > Implement a set of holder_ops that shut down the file system when the > block device used as log or RT device is removed undeneath the file > system. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > Reviewed-by: Darrick J. Wong <djwong@kernel.org> > --- > fs/xfs/xfs_super.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index eb469b8f9a0497..75d37bbc5415fc 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -377,6 +377,17 @@ xfs_setup_dax_always( > return 0; > } > > +static void > +xfs_hop_mark_dead( > + struct block_device *bdev) I'd prefer these ops to be named "xfs_bdev_...." to indicate the are fs bdev methods similar to how the super ops use "xfs_fs_...." to indicate they are fs superblock methods.... Other that this this is fine. Cheers, Dave.
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index eb469b8f9a0497..75d37bbc5415fc 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -377,6 +377,17 @@ xfs_setup_dax_always( return 0; } +static void +xfs_hop_mark_dead( + struct block_device *bdev) +{ + xfs_force_shutdown(bdev->bd_holder, SHUTDOWN_DEVICE_REMOVED); +} + +static const struct blk_holder_ops xfs_holder_ops = { + .mark_dead = xfs_hop_mark_dead, +}; + STATIC int xfs_blkdev_get( xfs_mount_t *mp, @@ -386,7 +397,7 @@ xfs_blkdev_get( int error = 0; *bdevp = blkdev_get_by_path(name, FMODE_READ|FMODE_WRITE|FMODE_EXCL, - mp, NULL); + mp, &xfs_holder_ops); if (IS_ERR(*bdevp)) { error = PTR_ERR(*bdevp); xfs_warn(mp, "Invalid device [%s], error=%d", name, error);