xfs: don't wake zone space waiters without m_zone_info

xfs_zoned_wake_all checks SB_ACTIVE to make sure it does the right thing
when a shutdown happens during unmount, but it fails to account for the
log recovery special case that sets SB_ACTIVE temporarily.  Add a NULL
check to cover both cases.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
[hch: added a commit log and comment]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Hans Holmberg <hans.holmberg@wdc.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
Darrick J. Wong 2025-03-17 06:44:54 +01:00 committed by Carlos Maiolino
parent 9ec3f7977a
commit f56f73ebf8

View File

@ -853,13 +853,22 @@ xfs_zone_alloc_and_submit(
bio_io_error(&ioend->io_bio);
}
/*
* Wake up all threads waiting for a zoned space allocation when the file system
* is shut down.
*/
void
xfs_zoned_wake_all(
struct xfs_mount *mp)
{
if (!(mp->m_super->s_flags & SB_ACTIVE))
return; /* can happen during log recovery */
wake_up_all(&mp->m_zone_info->zi_zone_wait);
/*
* Don't wake up if there is no m_zone_info. This is complicated by the
* fact that unmount can't atomically clear m_zone_info and thus we need
* to check SB_ACTIVE for that, but mount temporarily enables SB_ACTIVE
* during log recovery so we can't entirely rely on that either.
*/
if ((mp->m_super->s_flags & SB_ACTIVE) && mp->m_zone_info)
wake_up_all(&mp->m_zone_info->zi_zone_wait);
}
/*