|
@@ -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);
|