diff options
Diffstat (limited to 'fs/xfs/xfs_super.c')
| -rw-r--r-- | fs/xfs/xfs_super.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 19cbda196369..8fcc4ccc5c79 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c | |||
| @@ -685,7 +685,7 @@ xfs_blkdev_get( | |||
| 685 | mp); | 685 | mp); |
| 686 | if (IS_ERR(*bdevp)) { | 686 | if (IS_ERR(*bdevp)) { |
| 687 | error = PTR_ERR(*bdevp); | 687 | error = PTR_ERR(*bdevp); |
| 688 | xfs_warn(mp, "Invalid device [%s], error=%d\n", name, error); | 688 | xfs_warn(mp, "Invalid device [%s], error=%d", name, error); |
| 689 | } | 689 | } |
| 690 | 690 | ||
| 691 | return error; | 691 | return error; |
| @@ -1111,6 +1111,11 @@ xfs_fs_statfs( | |||
| 1111 | statp->f_files, | 1111 | statp->f_files, |
| 1112 | mp->m_maxicount); | 1112 | mp->m_maxicount); |
| 1113 | 1113 | ||
| 1114 | /* If sb_icount overshot maxicount, report actual allocation */ | ||
| 1115 | statp->f_files = max_t(typeof(statp->f_files), | ||
| 1116 | statp->f_files, | ||
| 1117 | sbp->sb_icount); | ||
| 1118 | |||
| 1114 | /* make sure statp->f_ffree does not underflow */ | 1119 | /* make sure statp->f_ffree does not underflow */ |
| 1115 | ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree); | 1120 | ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree); |
| 1116 | statp->f_ffree = max_t(__int64_t, ffree, 0); | 1121 | statp->f_ffree = max_t(__int64_t, ffree, 0); |
| @@ -1257,13 +1262,13 @@ xfs_fs_remount( | |||
| 1257 | * If this is the first remount to writeable state we | 1262 | * If this is the first remount to writeable state we |
| 1258 | * might have some superblock changes to update. | 1263 | * might have some superblock changes to update. |
| 1259 | */ | 1264 | */ |
| 1260 | if (mp->m_update_flags) { | 1265 | if (mp->m_update_sb) { |
| 1261 | error = xfs_mount_log_sb(mp, mp->m_update_flags); | 1266 | error = xfs_sync_sb(mp, false); |
| 1262 | if (error) { | 1267 | if (error) { |
| 1263 | xfs_warn(mp, "failed to write sb changes"); | 1268 | xfs_warn(mp, "failed to write sb changes"); |
| 1264 | return error; | 1269 | return error; |
| 1265 | } | 1270 | } |
| 1266 | mp->m_update_flags = 0; | 1271 | mp->m_update_sb = false; |
| 1267 | } | 1272 | } |
| 1268 | 1273 | ||
| 1269 | /* | 1274 | /* |
| @@ -1293,8 +1298,9 @@ xfs_fs_remount( | |||
| 1293 | 1298 | ||
| 1294 | /* | 1299 | /* |
| 1295 | * Second stage of a freeze. The data is already frozen so we only | 1300 | * Second stage of a freeze. The data is already frozen so we only |
| 1296 | * need to take care of the metadata. Once that's done write a dummy | 1301 | * need to take care of the metadata. Once that's done sync the superblock |
| 1297 | * record to dirty the log in case of a crash while frozen. | 1302 | * to the log to dirty it in case of a crash while frozen. This ensures that we |
| 1303 | * will recover the unlinked inode lists on the next mount. | ||
| 1298 | */ | 1304 | */ |
| 1299 | STATIC int | 1305 | STATIC int |
| 1300 | xfs_fs_freeze( | 1306 | xfs_fs_freeze( |
| @@ -1304,7 +1310,7 @@ xfs_fs_freeze( | |||
| 1304 | 1310 | ||
| 1305 | xfs_save_resvblks(mp); | 1311 | xfs_save_resvblks(mp); |
| 1306 | xfs_quiesce_attr(mp); | 1312 | xfs_quiesce_attr(mp); |
| 1307 | return xfs_fs_log_dummy(mp); | 1313 | return xfs_sync_sb(mp, true); |
| 1308 | } | 1314 | } |
| 1309 | 1315 | ||
| 1310 | STATIC int | 1316 | STATIC int |
| @@ -1531,7 +1537,7 @@ xfs_fs_mount( | |||
| 1531 | static long | 1537 | static long |
| 1532 | xfs_fs_nr_cached_objects( | 1538 | xfs_fs_nr_cached_objects( |
| 1533 | struct super_block *sb, | 1539 | struct super_block *sb, |
| 1534 | int nid) | 1540 | struct shrink_control *sc) |
| 1535 | { | 1541 | { |
| 1536 | return xfs_reclaim_inodes_count(XFS_M(sb)); | 1542 | return xfs_reclaim_inodes_count(XFS_M(sb)); |
| 1537 | } | 1543 | } |
| @@ -1539,10 +1545,9 @@ xfs_fs_nr_cached_objects( | |||
| 1539 | static long | 1545 | static long |
| 1540 | xfs_fs_free_cached_objects( | 1546 | xfs_fs_free_cached_objects( |
| 1541 | struct super_block *sb, | 1547 | struct super_block *sb, |
| 1542 | long nr_to_scan, | 1548 | struct shrink_control *sc) |
| 1543 | int nid) | ||
| 1544 | { | 1549 | { |
| 1545 | return xfs_reclaim_inodes_nr(XFS_M(sb), nr_to_scan); | 1550 | return xfs_reclaim_inodes_nr(XFS_M(sb), sc->nr_to_scan); |
| 1546 | } | 1551 | } |
| 1547 | 1552 | ||
| 1548 | static const struct super_operations xfs_super_operations = { | 1553 | static const struct super_operations xfs_super_operations = { |
