diff options
Diffstat (limited to 'fs/xfs/xfs_fsops.c')
| -rw-r--r-- | fs/xfs/xfs_fsops.c | 34 |
1 files changed, 2 insertions, 32 deletions
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index fdc64220fcb0..fba6532efba4 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
| @@ -488,6 +488,7 @@ xfs_growfs_data_private( | |||
| 488 | xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, nfree); | 488 | xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, nfree); |
| 489 | if (dpct) | 489 | if (dpct) |
| 490 | xfs_trans_mod_sb(tp, XFS_TRANS_SB_IMAXPCT, dpct); | 490 | xfs_trans_mod_sb(tp, XFS_TRANS_SB_IMAXPCT, dpct); |
| 491 | xfs_trans_set_sync(tp); | ||
| 491 | error = xfs_trans_commit(tp, 0); | 492 | error = xfs_trans_commit(tp, 0); |
| 492 | if (error) | 493 | if (error) |
| 493 | return error; | 494 | return error; |
| @@ -541,7 +542,7 @@ xfs_growfs_data_private( | |||
| 541 | saved_error = error; | 542 | saved_error = error; |
| 542 | continue; | 543 | continue; |
| 543 | } | 544 | } |
| 544 | xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb, XFS_SB_ALL_BITS); | 545 | xfs_sb_to_disk(XFS_BUF_TO_SBP(bp), &mp->m_sb); |
| 545 | 546 | ||
| 546 | error = xfs_bwrite(bp); | 547 | error = xfs_bwrite(bp); |
| 547 | xfs_buf_relse(bp); | 548 | xfs_buf_relse(bp); |
| @@ -756,37 +757,6 @@ out: | |||
| 756 | return 0; | 757 | return 0; |
| 757 | } | 758 | } |
| 758 | 759 | ||
| 759 | /* | ||
| 760 | * Dump a transaction into the log that contains no real change. This is needed | ||
| 761 | * to be able to make the log dirty or stamp the current tail LSN into the log | ||
| 762 | * during the covering operation. | ||
| 763 | * | ||
| 764 | * We cannot use an inode here for this - that will push dirty state back up | ||
| 765 | * into the VFS and then periodic inode flushing will prevent log covering from | ||
| 766 | * making progress. Hence we log a field in the superblock instead and use a | ||
| 767 | * synchronous transaction to ensure the superblock is immediately unpinned | ||
| 768 | * and can be written back. | ||
| 769 | */ | ||
| 770 | int | ||
| 771 | xfs_fs_log_dummy( | ||
| 772 | xfs_mount_t *mp) | ||
| 773 | { | ||
| 774 | xfs_trans_t *tp; | ||
| 775 | int error; | ||
| 776 | |||
| 777 | tp = _xfs_trans_alloc(mp, XFS_TRANS_DUMMY1, KM_SLEEP); | ||
| 778 | error = xfs_trans_reserve(tp, &M_RES(mp)->tr_sb, 0, 0); | ||
| 779 | if (error) { | ||
| 780 | xfs_trans_cancel(tp, 0); | ||
| 781 | return error; | ||
| 782 | } | ||
| 783 | |||
| 784 | /* log the UUID because it is an unchanging field */ | ||
| 785 | xfs_mod_sb(tp, XFS_SB_UUID); | ||
| 786 | xfs_trans_set_sync(tp); | ||
| 787 | return xfs_trans_commit(tp, 0); | ||
| 788 | } | ||
| 789 | |||
| 790 | int | 760 | int |
| 791 | xfs_fs_goingdown( | 761 | xfs_fs_goingdown( |
| 792 | xfs_mount_t *mp, | 762 | xfs_mount_t *mp, |
