]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/namespace.c
vfs: Add a function to lazily unmount all mounts from any dentry. v3
[karo-tx-linux.git] / fs / namespace.c
index e4fe22c23e00d1e182246732530bce4b33174262..78f7c5c9e6733625a8b646e7cfd2ef853ad1fbf4 100644 (file)
@@ -1295,6 +1295,30 @@ static int do_umount(struct mount *mnt, int flags)
        return retval;
 }
 
+void detach_mounts(struct dentry *dentry)
+{
+       struct mountpoint *mp;
+       struct mount *mnt;
+
+       namespace_lock();
+       if (!d_mountpoint(dentry))
+               goto out_unlock;
+
+       mp = new_mountpoint(dentry);
+       if (IS_ERR(mp))
+               goto out_unlock;
+
+       br_write_lock(&vfsmount_lock);
+       while (!list_empty(&mp->m_list)) {
+               mnt = list_first_entry(&mp->m_list, struct mount, mnt_mp_list);
+               umount_tree(mnt, 1);
+       }
+       br_write_unlock(&vfsmount_lock);
+       put_mountpoint(mp);
+out_unlock:
+       namespace_unlock();
+}
+
 /* 
  * Is the caller allowed to modify his namespace?
  */