|
@@ -1772,6 +1772,7 @@ xfs_fs_fill_super(
|
|
|
out_close_devices:
|
|
out_close_devices:
|
|
|
xfs_close_devices(mp);
|
|
xfs_close_devices(mp);
|
|
|
out_free_fsname:
|
|
out_free_fsname:
|
|
|
|
|
+ sb->s_fs_info = NULL;
|
|
|
xfs_free_fsname(mp);
|
|
xfs_free_fsname(mp);
|
|
|
kfree(mp);
|
|
kfree(mp);
|
|
|
out:
|
|
out:
|
|
@@ -1789,6 +1790,10 @@ xfs_fs_put_super(
|
|
|
{
|
|
{
|
|
|
struct xfs_mount *mp = XFS_M(sb);
|
|
struct xfs_mount *mp = XFS_M(sb);
|
|
|
|
|
|
|
|
|
|
+ /* if ->fill_super failed, we have no mount to tear down */
|
|
|
|
|
+ if (!sb->s_fs_info)
|
|
|
|
|
+ return;
|
|
|
|
|
+
|
|
|
xfs_notice(mp, "Unmounting Filesystem");
|
|
xfs_notice(mp, "Unmounting Filesystem");
|
|
|
xfs_filestream_unmount(mp);
|
|
xfs_filestream_unmount(mp);
|
|
|
xfs_unmountfs(mp);
|
|
xfs_unmountfs(mp);
|
|
@@ -1798,6 +1803,8 @@ xfs_fs_put_super(
|
|
|
xfs_destroy_percpu_counters(mp);
|
|
xfs_destroy_percpu_counters(mp);
|
|
|
xfs_destroy_mount_workqueues(mp);
|
|
xfs_destroy_mount_workqueues(mp);
|
|
|
xfs_close_devices(mp);
|
|
xfs_close_devices(mp);
|
|
|
|
|
+
|
|
|
|
|
+ sb->s_fs_info = NULL;
|
|
|
xfs_free_fsname(mp);
|
|
xfs_free_fsname(mp);
|
|
|
kfree(mp);
|
|
kfree(mp);
|
|
|
}
|
|
}
|
|
@@ -1817,6 +1824,9 @@ xfs_fs_nr_cached_objects(
|
|
|
struct super_block *sb,
|
|
struct super_block *sb,
|
|
|
struct shrink_control *sc)
|
|
struct shrink_control *sc)
|
|
|
{
|
|
{
|
|
|
|
|
+ /* Paranoia: catch incorrect calls during mount setup or teardown */
|
|
|
|
|
+ if (WARN_ON_ONCE(!sb->s_fs_info))
|
|
|
|
|
+ return 0;
|
|
|
return xfs_reclaim_inodes_count(XFS_M(sb));
|
|
return xfs_reclaim_inodes_count(XFS_M(sb));
|
|
|
}
|
|
}
|
|
|
|
|
|