Commit 8b22c0c5 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] autofs4: may_umount_tree() cleanup

From: <raven@themaw.net>

Patch to sync 2.6.6-rc2-mm2 with the result of my discussion with 
Christoph Hellwig.

Difference is that Christoph realised that merging may_umount_tree and
may_umount was not worth it. They are now seperate functions.
parent ee81def6
...@@ -260,7 +260,15 @@ struct seq_operations mounts_op = { ...@@ -260,7 +260,15 @@ struct seq_operations mounts_op = {
.show = show_vfsmnt .show = show_vfsmnt
}; };
static int __may_umount_tree(struct vfsmount *mnt, int root_mnt_only) /**
* may_umount_tree - check if a mount tree is busy
* @mnt: root of mount tree
*
* This is called to check if a tree of mounts has any
* open files, pwds, chroots or sub mounts that are
* busy.
*/
int may_umount_tree(struct vfsmount *mnt)
{ {
struct list_head *next; struct list_head *next;
struct vfsmount *this_parent = mnt; struct vfsmount *this_parent = mnt;
...@@ -270,14 +278,6 @@ static int __may_umount_tree(struct vfsmount *mnt, int root_mnt_only) ...@@ -270,14 +278,6 @@ static int __may_umount_tree(struct vfsmount *mnt, int root_mnt_only)
spin_lock(&vfsmount_lock); spin_lock(&vfsmount_lock);
actual_refs = atomic_read(&mnt->mnt_count); actual_refs = atomic_read(&mnt->mnt_count);
minimum_refs = 2; minimum_refs = 2;
if (root_mnt_only) {
spin_unlock(&vfsmount_lock);
if (actual_refs > minimum_refs)
return -EBUSY;
return 0;
}
repeat: repeat:
next = this_parent->mnt_mounts.next; next = this_parent->mnt_mounts.next;
resume: resume:
...@@ -308,19 +308,6 @@ static int __may_umount_tree(struct vfsmount *mnt, int root_mnt_only) ...@@ -308,19 +308,6 @@ static int __may_umount_tree(struct vfsmount *mnt, int root_mnt_only)
return 0; return 0;
} }
/**
* may_umount_tree - check if a mount tree is busy
* @mnt: root of mount tree
*
* This is called to check if a tree of mounts has any
* open files, pwds, chroots or sub mounts that are
* busy.
*/
int may_umount_tree(struct vfsmount *mnt)
{
return __may_umount_tree(mnt, 0);
}
EXPORT_SYMBOL(may_umount_tree); EXPORT_SYMBOL(may_umount_tree);
/** /**
...@@ -338,7 +325,9 @@ EXPORT_SYMBOL(may_umount_tree); ...@@ -338,7 +325,9 @@ EXPORT_SYMBOL(may_umount_tree);
*/ */
int may_umount(struct vfsmount *mnt) int may_umount(struct vfsmount *mnt)
{ {
return __may_umount_tree(mnt, 1); if (atomic_read(&mnt->mnt_count) > 2)
return -EBUSY;
return 0;
} }
EXPORT_SYMBOL(may_umount); EXPORT_SYMBOL(may_umount);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment