Loading fs/namespace.c +13 −13 Original line number Original line Diff line number Diff line Loading @@ -199,7 +199,7 @@ static struct mount *alloc_vfsmnt(const char *name) mnt->mnt_writers = 0; mnt->mnt_writers = 0; #endif #endif INIT_LIST_HEAD(&mnt->mnt_hash); INIT_LIST_HEAD(&p->mnt.mnt_hash); INIT_LIST_HEAD(&mnt->mnt_child); INIT_LIST_HEAD(&mnt->mnt_child); INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_list); INIT_LIST_HEAD(&mnt->mnt_list); Loading Loading @@ -540,10 +540,10 @@ static void dentry_reset_mounted(struct dentry *dentry) unsigned u; unsigned u; for (u = 0; u < HASH_SIZE; u++) { for (u = 0; u < HASH_SIZE; u++) { struct vfsmount *p; struct mount *p; list_for_each_entry(p, &mount_hashtable[u], mnt_hash) { list_for_each_entry(p, &mount_hashtable[u], mnt.mnt_hash) { if (p->mnt_mountpoint == dentry) if (p->mnt.mnt_mountpoint == dentry) return; return; } } } } Loading Loading @@ -1191,25 +1191,25 @@ EXPORT_SYMBOL(may_umount); void release_mounts(struct list_head *head) void release_mounts(struct list_head *head) { { struct vfsmount *mnt; struct mount *mnt; while (!list_empty(head)) { while (!list_empty(head)) { mnt = list_first_entry(head, struct vfsmount, mnt_hash); mnt = list_first_entry(head, struct mount, mnt.mnt_hash); list_del_init(&mnt->mnt_hash); list_del_init(&mnt->mnt.mnt_hash); if (mnt_has_parent(mnt)) { if (mnt_has_parent(&mnt->mnt)) { struct dentry *dentry; struct dentry *dentry; struct vfsmount *m; struct vfsmount *m; br_write_lock(vfsmount_lock); br_write_lock(vfsmount_lock); dentry = mnt->mnt_mountpoint; dentry = mnt->mnt.mnt_mountpoint; m = mnt->mnt_parent; m = mnt->mnt.mnt_parent; mnt->mnt_mountpoint = mnt->mnt_root; mnt->mnt.mnt_mountpoint = mnt->mnt.mnt_root; mnt->mnt_parent = mnt; mnt->mnt.mnt_parent = &mnt->mnt; m->mnt_ghosts--; m->mnt_ghosts--; br_write_unlock(vfsmount_lock); br_write_unlock(vfsmount_lock); dput(dentry); dput(dentry); mntput(m); mntput(m); } } mntput(mnt); mntput(&mnt->mnt); } } } } Loading Loading
fs/namespace.c +13 −13 Original line number Original line Diff line number Diff line Loading @@ -199,7 +199,7 @@ static struct mount *alloc_vfsmnt(const char *name) mnt->mnt_writers = 0; mnt->mnt_writers = 0; #endif #endif INIT_LIST_HEAD(&mnt->mnt_hash); INIT_LIST_HEAD(&p->mnt.mnt_hash); INIT_LIST_HEAD(&mnt->mnt_child); INIT_LIST_HEAD(&mnt->mnt_child); INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_list); INIT_LIST_HEAD(&mnt->mnt_list); Loading Loading @@ -540,10 +540,10 @@ static void dentry_reset_mounted(struct dentry *dentry) unsigned u; unsigned u; for (u = 0; u < HASH_SIZE; u++) { for (u = 0; u < HASH_SIZE; u++) { struct vfsmount *p; struct mount *p; list_for_each_entry(p, &mount_hashtable[u], mnt_hash) { list_for_each_entry(p, &mount_hashtable[u], mnt.mnt_hash) { if (p->mnt_mountpoint == dentry) if (p->mnt.mnt_mountpoint == dentry) return; return; } } } } Loading Loading @@ -1191,25 +1191,25 @@ EXPORT_SYMBOL(may_umount); void release_mounts(struct list_head *head) void release_mounts(struct list_head *head) { { struct vfsmount *mnt; struct mount *mnt; while (!list_empty(head)) { while (!list_empty(head)) { mnt = list_first_entry(head, struct vfsmount, mnt_hash); mnt = list_first_entry(head, struct mount, mnt.mnt_hash); list_del_init(&mnt->mnt_hash); list_del_init(&mnt->mnt.mnt_hash); if (mnt_has_parent(mnt)) { if (mnt_has_parent(&mnt->mnt)) { struct dentry *dentry; struct dentry *dentry; struct vfsmount *m; struct vfsmount *m; br_write_lock(vfsmount_lock); br_write_lock(vfsmount_lock); dentry = mnt->mnt_mountpoint; dentry = mnt->mnt.mnt_mountpoint; m = mnt->mnt_parent; m = mnt->mnt.mnt_parent; mnt->mnt_mountpoint = mnt->mnt_root; mnt->mnt.mnt_mountpoint = mnt->mnt.mnt_root; mnt->mnt_parent = mnt; mnt->mnt.mnt_parent = &mnt->mnt; m->mnt_ghosts--; m->mnt_ghosts--; br_write_unlock(vfsmount_lock); br_write_unlock(vfsmount_lock); dput(dentry); dput(dentry); mntput(m); mntput(m); } } mntput(mnt); mntput(&mnt->mnt); } } } } Loading