diff options
Diffstat (limited to 'fs/namespace.c')
| -rw-r--r-- | fs/namespace.c | 21 | 
1 files changed, 20 insertions, 1 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index cda50fe9250..22bfe8273c6 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2721,6 +2721,25 @@ EXPORT_SYMBOL(put_mnt_ns);  struct vfsmount *kern_mount_data(struct file_system_type *type, void *data)  { -	return vfs_kern_mount(type, MS_KERNMOUNT, type->name, data); +	struct vfsmount *mnt; +	mnt = vfs_kern_mount(type, MS_KERNMOUNT, type->name, data); +	if (!IS_ERR(mnt)) { +		/* +		 * it is a longterm mount, don't release mnt until +		 * we unmount before file sys is unregistered +		*/ +		mnt_make_longterm(mnt); +	} +	return mnt;  }  EXPORT_SYMBOL_GPL(kern_mount_data); + +void kern_unmount(struct vfsmount *mnt) +{ +	/* release long term mount so mount point can be released */ +	if (!IS_ERR_OR_NULL(mnt)) { +		mnt_make_shortterm(mnt); +		mntput(mnt); +	} +} +EXPORT_SYMBOL(kern_unmount);  |