diff options
-rw-r--r-- | fs/xfs/xfs_super.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_sync.c | 29 |
2 files changed, 18 insertions, 13 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 9805cac81fc9..20fa955d80d1 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c | |||
@@ -1200,6 +1200,7 @@ xfs_fs_remount( | |||
1200 | * value if it is non-zero, otherwise go with the default. | 1200 | * value if it is non-zero, otherwise go with the default. |
1201 | */ | 1201 | */ |
1202 | xfs_restore_resvblks(mp); | 1202 | xfs_restore_resvblks(mp); |
1203 | xfs_syncd_queue_sync(mp); | ||
1203 | } | 1204 | } |
1204 | 1205 | ||
1205 | /* rw -> ro */ | 1206 | /* rw -> ro */ |
@@ -1245,6 +1246,7 @@ xfs_fs_unfreeze( | |||
1245 | struct xfs_mount *mp = XFS_M(sb); | 1246 | struct xfs_mount *mp = XFS_M(sb); |
1246 | 1247 | ||
1247 | xfs_restore_resvblks(mp); | 1248 | xfs_restore_resvblks(mp); |
1249 | xfs_syncd_queue_sync(mp); | ||
1248 | return 0; | 1250 | return 0; |
1249 | } | 1251 | } |
1250 | 1252 | ||
diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c index a68761696ab5..e898d1807044 100644 --- a/fs/xfs/xfs_sync.c +++ b/fs/xfs/xfs_sync.c | |||
@@ -323,6 +323,9 @@ xfs_quiesce_data( | |||
323 | * Second stage of a quiesce. The data is already synced, now we have to take | 323 | * Second stage of a quiesce. The data is already synced, now we have to take |
324 | * care of the metadata. New transactions are already blocked, so we need to | 324 | * care of the metadata. New transactions are already blocked, so we need to |
325 | * wait for any remaining transactions to drain out before proceeding. | 325 | * wait for any remaining transactions to drain out before proceeding. |
326 | * | ||
327 | * Note: this stops background sync work - the callers must ensure it is started | ||
328 | * again when appropriate. | ||
326 | */ | 329 | */ |
327 | void | 330 | void |
328 | xfs_quiesce_attr( | 331 | xfs_quiesce_attr( |
@@ -341,6 +344,9 @@ xfs_quiesce_attr( | |||
341 | /* flush all pending changes from the AIL */ | 344 | /* flush all pending changes from the AIL */ |
342 | xfs_ail_push_all_sync(mp->m_ail); | 345 | xfs_ail_push_all_sync(mp->m_ail); |
343 | 346 | ||
347 | /* stop background sync work */ | ||
348 | cancel_delayed_work_sync(&mp->m_sync_work); | ||
349 | |||
344 | /* | 350 | /* |
345 | * Just warn here till VFS can correctly support | 351 | * Just warn here till VFS can correctly support |
346 | * read-only remount without racing. | 352 | * read-only remount without racing. |
@@ -379,9 +385,8 @@ xfs_syncd_queue_sync( | |||
379 | } | 385 | } |
380 | 386 | ||
381 | /* | 387 | /* |
382 | * Every sync period we need to unpin all items in the AIL and push them to | 388 | * Every sync period we need to push dirty metadata and try to cover the log |
383 | * disk. If there is nothing dirty, then we might need to cover the log to | 389 | * to indicate the filesystem is idle and not frozen. |
384 | * indicate that the filesystem is idle and not frozen. | ||
385 | */ | 390 | */ |
386 | void | 391 | void |
387 | xfs_sync_worker( | 392 | xfs_sync_worker( |
@@ -391,17 +396,15 @@ xfs_sync_worker( | |||
391 | struct xfs_mount, m_sync_work); | 396 | struct xfs_mount, m_sync_work); |
392 | int error; | 397 | int error; |
393 | 398 | ||
394 | if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { | 399 | /* dgc: errors ignored here */ |
395 | /* dgc: errors ignored here */ | 400 | if (mp->m_super->s_writers.frozen == SB_UNFROZEN && |
396 | if (mp->m_super->s_writers.frozen == SB_UNFROZEN && | 401 | xfs_log_need_covered(mp)) |
397 | xfs_log_need_covered(mp)) | 402 | error = xfs_fs_log_dummy(mp); |
398 | error = xfs_fs_log_dummy(mp); | 403 | else |
399 | else | 404 | xfs_log_force(mp, 0); |
400 | xfs_log_force(mp, 0); | ||
401 | 405 | ||
402 | /* start pushing all the metadata that is currently dirty */ | 406 | /* start pushing all the metadata that is currently dirty */ |
403 | xfs_ail_push_all(mp->m_ail); | 407 | xfs_ail_push_all(mp->m_ail); |
404 | } | ||
405 | 408 | ||
406 | /* queue us up again */ | 409 | /* queue us up again */ |
407 | xfs_syncd_queue_sync(mp); | 410 | xfs_syncd_queue_sync(mp); |