diff options
| -rw-r--r-- | fs/ufs/super.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 6560dda7b18c..5faed7954d0a 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c | |||
| @@ -1125,7 +1125,7 @@ failed_nomem: | |||
| 1125 | return -ENOMEM; | 1125 | return -ENOMEM; |
| 1126 | } | 1126 | } |
| 1127 | 1127 | ||
| 1128 | static void ufs_write_super(struct super_block *sb) | 1128 | static int ufs_sync_fs(struct super_block *sb, int wait) |
| 1129 | { | 1129 | { |
| 1130 | struct ufs_sb_private_info * uspi; | 1130 | struct ufs_sb_private_info * uspi; |
| 1131 | struct ufs_super_block_first * usb1; | 1131 | struct ufs_super_block_first * usb1; |
| @@ -1134,25 +1134,36 @@ static void ufs_write_super(struct super_block *sb) | |||
| 1134 | 1134 | ||
| 1135 | lock_super(sb); | 1135 | lock_super(sb); |
| 1136 | lock_kernel(); | 1136 | lock_kernel(); |
| 1137 | |||
| 1137 | UFSD("ENTER\n"); | 1138 | UFSD("ENTER\n"); |
| 1139 | |||
| 1138 | flags = UFS_SB(sb)->s_flags; | 1140 | flags = UFS_SB(sb)->s_flags; |
| 1139 | uspi = UFS_SB(sb)->s_uspi; | 1141 | uspi = UFS_SB(sb)->s_uspi; |
| 1140 | usb1 = ubh_get_usb_first(uspi); | 1142 | usb1 = ubh_get_usb_first(uspi); |
| 1141 | usb3 = ubh_get_usb_third(uspi); | 1143 | usb3 = ubh_get_usb_third(uspi); |
| 1142 | 1144 | ||
| 1143 | if (!(sb->s_flags & MS_RDONLY)) { | 1145 | usb1->fs_time = cpu_to_fs32(sb, get_seconds()); |
| 1144 | usb1->fs_time = cpu_to_fs32(sb, get_seconds()); | 1146 | if ((flags & UFS_ST_MASK) == UFS_ST_SUN || |
| 1145 | if ((flags & UFS_ST_MASK) == UFS_ST_SUN | 1147 | (flags & UFS_ST_MASK) == UFS_ST_SUNOS || |
| 1146 | || (flags & UFS_ST_MASK) == UFS_ST_SUNOS | 1148 | (flags & UFS_ST_MASK) == UFS_ST_SUNx86) |
| 1147 | || (flags & UFS_ST_MASK) == UFS_ST_SUNx86) | 1149 | ufs_set_fs_state(sb, usb1, usb3, |
| 1148 | ufs_set_fs_state(sb, usb1, usb3, | 1150 | UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time)); |
| 1149 | UFS_FSOK - fs32_to_cpu(sb, usb1->fs_time)); | 1151 | ufs_put_cstotal(sb); |
| 1150 | ufs_put_cstotal(sb); | ||
| 1151 | } | ||
| 1152 | sb->s_dirt = 0; | 1152 | sb->s_dirt = 0; |
| 1153 | |||
| 1153 | UFSD("EXIT\n"); | 1154 | UFSD("EXIT\n"); |
| 1154 | unlock_kernel(); | 1155 | unlock_kernel(); |
| 1155 | unlock_super(sb); | 1156 | unlock_super(sb); |
| 1157 | |||
| 1158 | return 0; | ||
| 1159 | } | ||
| 1160 | |||
| 1161 | static void ufs_write_super(struct super_block *sb) | ||
| 1162 | { | ||
| 1163 | if (!(sb->s_flags & MS_RDONLY)) | ||
| 1164 | ufs_sync_fs(sb, 1); | ||
| 1165 | else | ||
| 1166 | sb->s_dirt = 0; | ||
| 1156 | } | 1167 | } |
| 1157 | 1168 | ||
| 1158 | static void ufs_put_super(struct super_block *sb) | 1169 | static void ufs_put_super(struct super_block *sb) |
| @@ -1381,6 +1392,7 @@ static const struct super_operations ufs_super_ops = { | |||
| 1381 | .delete_inode = ufs_delete_inode, | 1392 | .delete_inode = ufs_delete_inode, |
| 1382 | .put_super = ufs_put_super, | 1393 | .put_super = ufs_put_super, |
| 1383 | .write_super = ufs_write_super, | 1394 | .write_super = ufs_write_super, |
| 1395 | .sync_fs = ufs_sync_fs, | ||
| 1384 | .statfs = ufs_statfs, | 1396 | .statfs = ufs_statfs, |
| 1385 | .remount_fs = ufs_remount, | 1397 | .remount_fs = ufs_remount, |
| 1386 | .show_options = ufs_show_options, | 1398 | .show_options = ufs_show_options, |
