9pfs: add cleanup operation in FileOperations
Currently, the backend of VirtFS doesn't have a cleanup function. This will lead resource leak issues if the backed driver allocates resources. This patch addresses this issue. Signed-off-by: Li Qiang <liq3ea@gmail.com> Reviewed-by: Greg Kurz <groug@kaod.org> Signed-off-by: Greg Kurz <groug@kaod.org>
This commit is contained in:
		
							parent
							
								
									4774718e5c
								
							
						
					
					
						commit
						702dbcc274
					
				@ -100,6 +100,7 @@ struct FileOperations
 | 
			
		||||
{
 | 
			
		||||
    int (*parse_opts)(QemuOpts *, struct FsDriverEntry *);
 | 
			
		||||
    int (*init)(struct FsContext *);
 | 
			
		||||
    void (*cleanup)(struct FsContext *);
 | 
			
		||||
    int (*lstat)(FsContext *, V9fsPath *, struct stat *);
 | 
			
		||||
    ssize_t (*readlink)(FsContext *, V9fsPath *, char *, size_t);
 | 
			
		||||
    int (*chmod)(FsContext *, V9fsPath *, FsCred *);
 | 
			
		||||
 | 
			
		||||
@ -3521,6 +3521,9 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp)
 | 
			
		||||
    rc = 0;
 | 
			
		||||
out:
 | 
			
		||||
    if (rc) {
 | 
			
		||||
        if (s->ops->cleanup && s->ctx.private) {
 | 
			
		||||
            s->ops->cleanup(&s->ctx);
 | 
			
		||||
        }
 | 
			
		||||
        g_free(s->tag);
 | 
			
		||||
        g_free(s->ctx.fs_root);
 | 
			
		||||
        v9fs_path_free(&path);
 | 
			
		||||
@ -3530,6 +3533,9 @@ out:
 | 
			
		||||
 | 
			
		||||
void v9fs_device_unrealize_common(V9fsState *s, Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    if (s->ops->cleanup) {
 | 
			
		||||
        s->ops->cleanup(&s->ctx);
 | 
			
		||||
    }
 | 
			
		||||
    g_free(s->tag);
 | 
			
		||||
    g_free(s->ctx.fs_root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user