Merge branch 'akpm' (fixes from Andrew)
[linux-drm-fsl-dcu.git] / fs / pnode.c
index 9af0df15256e9405082fdb59d1a2c6fe97fb8e59..c7221bb19801e6b6251ad1ed3cea6f4f79dcf876 100644 (file)
@@ -264,12 +264,12 @@ int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp,
                prev_src_mnt  = child;
        }
 out:
-       br_write_lock(&vfsmount_lock);
+       lock_mount_hash();
        while (!list_empty(&tmp_list)) {
                child = list_first_entry(&tmp_list, struct mount, mnt_hash);
                umount_tree(child, 0);
        }
-       br_write_unlock(&vfsmount_lock);
+       unlock_mount_hash();
        return ret;
 }
 
@@ -278,8 +278,7 @@ out:
  */
 static inline int do_refcount_check(struct mount *mnt, int count)
 {
-       int mycount = mnt_get_count(mnt) - mnt->mnt_ghosts;
-       return (mycount > count);
+       return mnt_get_count(mnt) > count;
 }
 
 /*
@@ -311,7 +310,7 @@ int propagate_mount_busy(struct mount *mnt, int refcnt)
 
        for (m = propagation_next(parent, parent); m;
                        m = propagation_next(m, parent)) {
-               child = __lookup_mnt(&m->mnt, mnt->mnt_mountpoint, 0);
+               child = __lookup_mnt_last(&m->mnt, mnt->mnt_mountpoint);
                if (child && list_empty(&child->mnt_mounts) &&
                    (ret = do_refcount_check(child, 1)))
                        break;
@@ -333,8 +332,8 @@ static void __propagate_umount(struct mount *mnt)
        for (m = propagation_next(parent, parent); m;
                        m = propagation_next(m, parent)) {
 
-               struct mount *child = __lookup_mnt(&m->mnt,
-                                       mnt->mnt_mountpoint, 0);
+               struct mount *child = __lookup_mnt_last(&m->mnt,
+                                               mnt->mnt_mountpoint);
                /*
                 * umount the child only if the child has no
                 * other children