diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_super.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index dab5d3802374..003e5f29d684 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -659,9 +659,17 @@ xfs_fs_sync_super( | |||
659 | int error; | 659 | int error; |
660 | int flags; | 660 | int flags; |
661 | 661 | ||
662 | if (unlikely(sb->s_frozen == SB_FREEZE_WRITE)) | 662 | if (unlikely(sb->s_frozen == SB_FREEZE_WRITE)) { |
663 | flags = SYNC_QUIESCE; | 663 | /* |
664 | else | 664 | * First stage of freeze - no more writers will make progress |
665 | * now we are here, so we flush delwri and delalloc buffers | ||
666 | * here, then wait for all I/O to complete. Data is frozen at | ||
667 | * that point. Metadata is not frozen, transactions can still | ||
668 | * occur here so don't bother flushing the buftarg (i.e | ||
669 | * SYNC_QUIESCE) because it'll just get dirty again. | ||
670 | */ | ||
671 | flags = SYNC_FSDATA | SYNC_DELWRI | SYNC_WAIT | SYNC_DIO_WAIT; | ||
672 | } else | ||
665 | flags = SYNC_FSDATA | (wait ? SYNC_WAIT : 0); | 673 | flags = SYNC_FSDATA | (wait ? SYNC_WAIT : 0); |
666 | 674 | ||
667 | error = bhv_vfs_sync(vfsp, flags, NULL); | 675 | error = bhv_vfs_sync(vfsp, flags, NULL); |