mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
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:
parent
9ec3f7977a
commit
f56f73ebf8
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user