Add the fs_context_operations method .free that performs fs context cleanup on context release. Signed-off-by: Ian Kent <raven@xxxxxxxxxx> --- fs/xfs/xfs_super.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 06b382290354..edb15bb98dde 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -2155,6 +2155,32 @@ static const struct super_operations xfs_super_operations = { .free_cached_objects = xfs_fs_free_cached_objects, }; +static void xfs_fc_free(struct fs_context *fc) +{ + struct xfs_fs_context *ctx = fc->fs_private; + struct xfs_mount *mp = fc->s_fs_info; + + /* + * When the mount context is initialized the private + * struct xfs_mount info (mp) is allocated and stored in + * the fs context along with the struct xfs_fs_context + * (ctx) mount context working working storage. + * + * On success the mount info struct, mp, is moved into + * private info super block field ->s_fs_info of the + * newly allocated super block. But if an error occurs + * before this happens it's the responsibility of the fs + * context to release the mount info struct in addition + * to the mount context working storage. + */ + if (mp) { + kfree(mp->m_logname); + kfree(mp->m_rtname); + kfree(mp); + } + kfree(ctx); +} + static struct file_system_type xfs_fs_type = { .owner = THIS_MODULE, .name = "xfs",