diff options
Diffstat (limited to 'fs/xfs/xfs_mount.c')
| -rw-r--r-- | fs/xfs/xfs_mount.c | 21 | 
1 files changed, 20 insertions, 1 deletions
| diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index bf92e0c037c7..bb753b359bee 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -47,6 +47,16 @@ static DEFINE_MUTEX(xfs_uuid_table_mutex);  static int xfs_uuid_table_size;  static uuid_t *xfs_uuid_table; +void +xfs_uuid_table_free(void) +{ +	if (xfs_uuid_table_size == 0) +		return; +	kmem_free(xfs_uuid_table); +	xfs_uuid_table = NULL; +	xfs_uuid_table_size = 0; +} +  /*   * See if the UUID is unique among mounted XFS filesystems.   * Mount fails if UUID is nil or a FS with the same UUID is already mounted. @@ -693,10 +703,15 @@ xfs_mountfs(  	if (error)  		goto out; -	error = xfs_uuid_mount(mp); +	error = xfs_sysfs_init(&mp->m_stats.xs_kobj, &xfs_stats_ktype, +			       &mp->m_kobj, "stats");  	if (error)  		goto out_remove_sysfs; +	error = xfs_uuid_mount(mp); +	if (error) +		goto out_del_stats; +  	/*  	 * Set the minimum read and write sizes  	 */ @@ -971,6 +986,8 @@ xfs_mountfs(  	xfs_da_unmount(mp);   out_remove_uuid:  	xfs_uuid_unmount(mp); + out_del_stats: +	xfs_sysfs_del(&mp->m_stats.xs_kobj);   out_remove_sysfs:  	xfs_sysfs_del(&mp->m_kobj);   out: @@ -1047,6 +1064,7 @@ xfs_unmountfs(  		xfs_warn(mp, "Unable to update superblock counters. "  				"Freespace may not be correct on next mount."); +  	xfs_log_unmount(mp);  	xfs_da_unmount(mp);  	xfs_uuid_unmount(mp); @@ -1056,6 +1074,7 @@ xfs_unmountfs(  #endif  	xfs_free_perag(mp); +	xfs_sysfs_del(&mp->m_stats.xs_kobj);  	xfs_sysfs_del(&mp->m_kobj);  } | 
