|
@@ -460,7 +460,15 @@ xfs_sync_worker(
|
|
|
struct xfs_mount, m_sync_work);
|
|
|
int error;
|
|
|
|
|
|
- if (!(mp->m_flags & XFS_MOUNT_RDONLY)) {
|
|
|
+ /*
|
|
|
+ * We shouldn't write/force the log if we are in the mount/unmount
|
|
|
+ * process or on a read only filesystem. The workqueue still needs to be
|
|
|
+ * active in both cases, however, because it is used for inode reclaim
|
|
|
+ * during these times. hence use the MS_ACTIVE flag to avoid doing
|
|
|
+ * anything in these periods.
|
|
|
+ */
|
|
|
+ if (!(mp->m_super->s_flags & MS_ACTIVE) &&
|
|
|
+ !(mp->m_flags & XFS_MOUNT_RDONLY)) {
|
|
|
/* dgc: errors ignored here */
|
|
|
if (mp->m_super->s_frozen == SB_UNFROZEN &&
|
|
|
xfs_log_need_covered(mp))
|
|
@@ -488,14 +496,6 @@ xfs_syncd_queue_reclaim(
|
|
|
struct xfs_mount *mp)
|
|
|
{
|
|
|
|
|
|
- /*
|
|
|
- * We can have inodes enter reclaim after we've shut down the syncd
|
|
|
- * workqueue during unmount, so don't allow reclaim work to be queued
|
|
|
- * during unmount.
|
|
|
- */
|
|
|
- if (!(mp->m_super->s_flags & MS_ACTIVE))
|
|
|
- return;
|
|
|
-
|
|
|
rcu_read_lock();
|
|
|
if (radix_tree_tagged(&mp->m_perag_tree, XFS_ICI_RECLAIM_TAG)) {
|
|
|
queue_delayed_work(xfs_syncd_wq, &mp->m_reclaim_work,
|
|
@@ -564,7 +564,6 @@ xfs_syncd_init(
|
|
|
INIT_DELAYED_WORK(&mp->m_reclaim_work, xfs_reclaim_worker);
|
|
|
|
|
|
xfs_syncd_queue_sync(mp);
|
|
|
- xfs_syncd_queue_reclaim(mp);
|
|
|
|
|
|
return 0;
|
|
|
}
|