On Thu, May 18, 2023 at 06:23:21AM +0200, Christoph Hellwig wrote: > Wire up the shutdown method to shut down the file system when the > underlying block device is marked dead. Add a new message to > clearly distinguish this shutdown reason from other shutdowns. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_fsops.c | 3 +++ > fs/xfs/xfs_mount.h | 4 +++- > fs/xfs/xfs_super.c | 8 ++++++++ > 3 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c > index 13851c0d640bc8..9ebb8333a30800 100644 > --- a/fs/xfs/xfs_fsops.c > +++ b/fs/xfs/xfs_fsops.c > @@ -534,6 +534,9 @@ xfs_do_force_shutdown( > } else if (flags & SHUTDOWN_CORRUPT_ONDISK) { > tag = XFS_PTAG_SHUTDOWN_CORRUPT; > why = "Corruption of on-disk metadata"; > + } else if (flags & SHUTDOWN_DEVICE_REMOVED) { > + tag = XFS_PTAG_SHUTDOWN_IOERROR; > + why = "Block device removal"; > } else { > tag = XFS_PTAG_SHUTDOWN_IOERROR; > why = "Metadata I/O Error"; > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index aaaf5ec13492d2..429a5e12c1036e 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -457,12 +457,14 @@ void xfs_do_force_shutdown(struct xfs_mount *mp, uint32_t flags, char *fname, > #define SHUTDOWN_FORCE_UMOUNT (1u << 2) /* shutdown from a forced unmount */ > #define SHUTDOWN_CORRUPT_INCORE (1u << 3) /* corrupt in-memory structures */ > #define SHUTDOWN_CORRUPT_ONDISK (1u << 4) /* corrupt metadata on device */ > +#define SHUTDOWN_DEVICE_REMOVED (1u << 5) /* device removed underneath us */ > > #define XFS_SHUTDOWN_STRINGS \ > { SHUTDOWN_META_IO_ERROR, "metadata_io" }, \ > { SHUTDOWN_LOG_IO_ERROR, "log_io" }, \ > { SHUTDOWN_FORCE_UMOUNT, "force_umount" }, \ > - { SHUTDOWN_CORRUPT_INCORE, "corruption" } > + { SHUTDOWN_CORRUPT_INCORE, "corruption" }, \ > + { SHUTDOWN_DEVICE_REMOVED, "device_removed" } > > /* > * Flags for xfs_mountfs > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 5684c538eb76dc..eb469b8f9a0497 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -1159,6 +1159,13 @@ xfs_fs_free_cached_objects( > return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan); > } > > +static void > +xfs_fs_shutdown( > + struct super_block *sb) > +{ > + xfs_force_shutdown(XFS_M(sb), SHUTDOWN_DEVICE_REMOVED); > +} > + > static const struct super_operations xfs_super_operations = { > .alloc_inode = xfs_fs_alloc_inode, > .destroy_inode = xfs_fs_destroy_inode, > @@ -1172,6 +1179,7 @@ static const struct super_operations xfs_super_operations = { > .show_options = xfs_fs_show_options, > .nr_cached_objects = xfs_fs_nr_cached_objects, > .free_cached_objects = xfs_fs_free_cached_objects, > + .shutdown = xfs_fs_shutdown, > }; > > static int > -- > 2.39.2 >