|
@@ -1372,7 +1372,6 @@ xfs_fs_remount(
|
|
|
*/
|
|
|
xfs_restore_resvblks(mp);
|
|
|
xfs_log_work_queue(mp);
|
|
|
- xfs_queue_eofblocks(mp);
|
|
|
|
|
|
/* Recover any CoW blocks that never got remapped. */
|
|
|
error = xfs_reflink_recover_cow(mp);
|
|
@@ -1382,7 +1381,7 @@ xfs_fs_remount(
|
|
|
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
|
|
|
return error;
|
|
|
}
|
|
|
- xfs_queue_cowblocks(mp);
|
|
|
+ xfs_icache_enable_reclaim(mp);
|
|
|
|
|
|
/* Create the per-AG metadata reservation pool .*/
|
|
|
error = xfs_fs_reserve_ag_blocks(mp);
|
|
@@ -1392,8 +1391,13 @@ xfs_fs_remount(
|
|
|
|
|
|
/* rw -> ro */
|
|
|
if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & SB_RDONLY)) {
|
|
|
+ /*
|
|
|
+ * Cancel background eofb scanning so it cannot race with the
|
|
|
+ * final log force+buftarg wait and deadlock the remount.
|
|
|
+ */
|
|
|
+ xfs_icache_disable_reclaim(mp);
|
|
|
+
|
|
|
/* Get rid of any leftover CoW reservations... */
|
|
|
- cancel_delayed_work_sync(&mp->m_cowblocks_work);
|
|
|
error = xfs_icache_free_cowblocks(mp, NULL);
|
|
|
if (error) {
|
|
|
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
|
|
@@ -1416,12 +1420,6 @@ xfs_fs_remount(
|
|
|
*/
|
|
|
xfs_save_resvblks(mp);
|
|
|
|
|
|
- /*
|
|
|
- * Cancel background eofb scanning so it cannot race with the
|
|
|
- * final log force+buftarg wait and deadlock the remount.
|
|
|
- */
|
|
|
- cancel_delayed_work_sync(&mp->m_eofblocks_work);
|
|
|
-
|
|
|
xfs_quiesce_attr(mp);
|
|
|
mp->m_flags |= XFS_MOUNT_RDONLY;
|
|
|
}
|
|
@@ -1441,6 +1439,7 @@ xfs_fs_freeze(
|
|
|
{
|
|
|
struct xfs_mount *mp = XFS_M(sb);
|
|
|
|
|
|
+ xfs_icache_disable_reclaim(mp);
|
|
|
xfs_save_resvblks(mp);
|
|
|
xfs_quiesce_attr(mp);
|
|
|
return xfs_sync_sb(mp, true);
|
|
@@ -1454,6 +1453,7 @@ xfs_fs_unfreeze(
|
|
|
|
|
|
xfs_restore_resvblks(mp);
|
|
|
xfs_log_work_queue(mp);
|
|
|
+ xfs_icache_enable_reclaim(mp);
|
|
|
return 0;
|
|
|
}
|
|
|
|