mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
xfs: allow inode inactivation during a ro mount log recovery
[ Upstream commit 76e589013f ]
In the next patch, we're going to prohibit log recovery if the primary
superblock contains an unrecognized rocompat feature bit even on
readonly mounts. This requires removing all the code in the log
mounting process that temporarily disables the readonly state.
Unfortunately, inode inactivation disables itself on readonly mounts.
Clearing the iunlinked lists after log recovery needs inactivation to
run to free the unreferenced inodes, which (AFAICT) is the only reason
why log mounting plays games with the readonly state in the first place.
Therefore, change the inactivation predicates to allow inactivation
during log recovery of a readonly mount.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Leah Rumancik <leah.rumancik@gmail.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2cc027623e
commit
4db0e08ef9
@@ -1652,8 +1652,11 @@ xfs_inode_needs_inactive(
|
|||||||
if (VFS_I(ip)->i_mode == 0)
|
if (VFS_I(ip)->i_mode == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If this is a read-only mount, don't do this (would generate I/O) */
|
/*
|
||||||
if (xfs_is_readonly(mp))
|
* If this is a read-only mount, don't do this (would generate I/O)
|
||||||
|
* unless we're in log recovery and cleaning the iunlinked list.
|
||||||
|
*/
|
||||||
|
if (xfs_is_readonly(mp) && !xlog_recovery_needed(mp->m_log))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If the log isn't running, push inodes straight to reclaim. */
|
/* If the log isn't running, push inodes straight to reclaim. */
|
||||||
@@ -1713,8 +1716,11 @@ xfs_inactive(
|
|||||||
mp = ip->i_mount;
|
mp = ip->i_mount;
|
||||||
ASSERT(!xfs_iflags_test(ip, XFS_IRECOVERY));
|
ASSERT(!xfs_iflags_test(ip, XFS_IRECOVERY));
|
||||||
|
|
||||||
/* If this is a read-only mount, don't do this (would generate I/O) */
|
/*
|
||||||
if (xfs_is_readonly(mp))
|
* If this is a read-only mount, don't do this (would generate I/O)
|
||||||
|
* unless we're in log recovery and cleaning the iunlinked list.
|
||||||
|
*/
|
||||||
|
if (xfs_is_readonly(mp) && !xlog_recovery_needed(mp->m_log))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* Metadata inodes require explicit resource cleanup. */
|
/* Metadata inodes require explicit resource cleanup. */
|
||||||
|
|||||||
Reference in New Issue
Block a user