Message ID | 157062068470.32346.8530858639686710763.stgit@fedora-28 (mailing list archive) |
---|---|
State | Deferred, archived |
Headers | show |
Series | xfs: mount API patch series | expand |
On Wed, Oct 09, 2019 at 07:31:24PM +0800, Ian Kent wrote: > Add the fs_context_operations method .free that performs fs > context cleanup on context release. > > Signed-off-by: Ian Kent <raven@themaw.net> > --- Reviewed-by: Brian Foster <bfoster@redhat.com> > fs/xfs/xfs_super.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 230b0e2a184c..c7c33395b648 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -2127,10 +2127,29 @@ 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; > + > + /* > + * mp and ctx are stored in the fs_context when it is > + * initialized. mp is transferred to the superblock on > + * a successful mount, but if an error occurs before the > + * transfer we have to free it here. > + */ > + if (mp) { > + xfs_free_fsname(mp); > + kfree(mp); > + } > + kfree(ctx); > +} > + > static const struct fs_context_operations xfs_context_ops = { > .parse_param = xfs_parse_param, > .get_tree = xfs_get_tree, > .reconfigure = xfs_reconfigure, > + .free = xfs_fc_free, > }; > > static struct file_system_type xfs_fs_type = { >
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 230b0e2a184c..c7c33395b648 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -2127,10 +2127,29 @@ 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; + + /* + * mp and ctx are stored in the fs_context when it is + * initialized. mp is transferred to the superblock on + * a successful mount, but if an error occurs before the + * transfer we have to free it here. + */ + if (mp) { + xfs_free_fsname(mp); + kfree(mp); + } + kfree(ctx); +} + static const struct fs_context_operations xfs_context_ops = { .parse_param = xfs_parse_param, .get_tree = xfs_get_tree, .reconfigure = xfs_reconfigure, + .free = xfs_fc_free, }; static struct file_system_type xfs_fs_type = {
Add the fs_context_operations method .free that performs fs context cleanup on context release. Signed-off-by: Ian Kent <raven@themaw.net> --- fs/xfs/xfs_super.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)