Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
7f2da1e7
Commit
7f2da1e7
authored
May 10, 2008
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] kill altroot
long overdue... Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
8bb79224
Changes
31
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
5 additions
and
466 deletions
+5
-466
fs/namei.c
fs/namei.c
+2
-87
fs/namespace.c
fs/namespace.c
+1
-7
fs/open.c
fs/open.c
+1
-2
include/asm-alpha/namei.h
include/asm-alpha/namei.h
+0
-17
include/asm-arm/namei.h
include/asm-arm/namei.h
+0
-25
include/asm-avr32/namei.h
include/asm-avr32/namei.h
+0
-7
include/asm-blackfin/namei.h
include/asm-blackfin/namei.h
+0
-19
include/asm-cris/namei.h
include/asm-cris/namei.h
+0
-17
include/asm-frv/namei.h
include/asm-frv/namei.h
+0
-18
include/asm-h8300/namei.h
include/asm-h8300/namei.h
+0
-17
include/asm-ia64/namei.h
include/asm-ia64/namei.h
+0
-25
include/asm-m32r/namei.h
include/asm-m32r/namei.h
+0
-17
include/asm-m68k/namei.h
include/asm-m68k/namei.h
+0
-17
include/asm-m68knommu/namei.h
include/asm-m68knommu/namei.h
+0
-1
include/asm-mips/namei.h
include/asm-mips/namei.h
+0
-11
include/asm-mn10300/namei.h
include/asm-mn10300/namei.h
+0
-22
include/asm-parisc/namei.h
include/asm-parisc/namei.h
+0
-17
include/asm-powerpc/namei.h
include/asm-powerpc/namei.h
+0
-20
include/asm-s390/namei.h
include/asm-s390/namei.h
+0
-21
include/asm-sh/namei.h
include/asm-sh/namei.h
+0
-17
include/asm-sparc/namei.h
include/asm-sparc/namei.h
+0
-8
include/asm-sparc64/namei.h
include/asm-sparc64/namei.h
+0
-1
include/asm-um/namei.h
include/asm-um/namei.h
+0
-6
include/asm-v850/namei.h
include/asm-v850/namei.h
+0
-17
include/asm-x86/namei.h
include/asm-x86/namei.h
+0
-11
include/asm-xtensa/namei.h
include/asm-xtensa/namei.h
+0
-26
include/linux/fs_struct.h
include/linux/fs_struct.h
+1
-2
include/linux/namei.h
include/linux/namei.h
+0
-1
kernel/exec_domain.c
kernel/exec_domain.c
+0
-1
kernel/exit.c
kernel/exit.c
+0
-2
kernel/fork.c
kernel/fork.c
+0
-7
No files found.
fs/namei.c
View file @
7f2da1e7
...
...
@@ -31,7 +31,6 @@
#include <linux/file.h>
#include <linux/fcntl.h>
#include <linux/device_cgroup.h>
#include <asm/namei.h>
#include <asm/uaccess.h>
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
...
...
@@ -562,27 +561,16 @@ static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, s
return
result
;
}
static
int
__emul_lookup_dentry
(
const
char
*
,
struct
nameidata
*
);
/* SMP-safe */
static
__always_inline
int
static
__always_inline
void
walk_init_root
(
const
char
*
name
,
struct
nameidata
*
nd
)
{
struct
fs_struct
*
fs
=
current
->
fs
;
read_lock
(
&
fs
->
lock
);
if
(
fs
->
altroot
.
dentry
&&
!
(
nd
->
flags
&
LOOKUP_NOALT
))
{
nd
->
path
=
fs
->
altroot
;
path_get
(
&
fs
->
altroot
);
read_unlock
(
&
fs
->
lock
);
if
(
__emul_lookup_dentry
(
name
,
nd
))
return
0
;
read_lock
(
&
fs
->
lock
);
}
nd
->
path
=
fs
->
root
;
path_get
(
&
fs
->
root
);
read_unlock
(
&
fs
->
lock
);
return
1
;
}
/*
...
...
@@ -623,12 +611,9 @@ static __always_inline int __vfs_follow_link(struct nameidata *nd, const char *l
if
(
*
link
==
'/'
)
{
path_put
(
&
nd
->
path
);
if
(
!
walk_init_root
(
link
,
nd
))
/* weird __emul_prefix() stuff did it */
goto
out
;
walk_init_root
(
link
,
nd
);
}
res
=
link_path_walk
(
link
,
nd
);
out:
if
(
nd
->
depth
||
res
||
nd
->
last_type
!=
LAST_NORM
)
return
res
;
/*
...
...
@@ -1077,67 +1062,6 @@ static int path_walk(const char *name, struct nameidata *nd)
return
link_path_walk
(
name
,
nd
);
}
/*
* SMP-safe: Returns 1 and nd will have valid dentry and mnt, if
* everything is done. Returns 0 and drops input nd, if lookup failed;
*/
static
int
__emul_lookup_dentry
(
const
char
*
name
,
struct
nameidata
*
nd
)
{
if
(
path_walk
(
name
,
nd
))
return
0
;
/* something went wrong... */
if
(
!
nd
->
path
.
dentry
->
d_inode
||
S_ISDIR
(
nd
->
path
.
dentry
->
d_inode
->
i_mode
))
{
struct
path
old_path
=
nd
->
path
;
struct
qstr
last
=
nd
->
last
;
int
last_type
=
nd
->
last_type
;
struct
fs_struct
*
fs
=
current
->
fs
;
/*
* NAME was not found in alternate root or it's a directory.
* Try to find it in the normal root:
*/
nd
->
last_type
=
LAST_ROOT
;
read_lock
(
&
fs
->
lock
);
nd
->
path
=
fs
->
root
;
path_get
(
&
fs
->
root
);
read_unlock
(
&
fs
->
lock
);
if
(
path_walk
(
name
,
nd
)
==
0
)
{
if
(
nd
->
path
.
dentry
->
d_inode
)
{
path_put
(
&
old_path
);
return
1
;
}
path_put
(
&
nd
->
path
);
}
nd
->
path
=
old_path
;
nd
->
last
=
last
;
nd
->
last_type
=
last_type
;
}
return
1
;
}
void
set_fs_altroot
(
void
)
{
char
*
emul
=
__emul_prefix
();
struct
nameidata
nd
;
struct
path
path
=
{},
old_path
;
int
err
;
struct
fs_struct
*
fs
=
current
->
fs
;
if
(
!
emul
)
goto
set_it
;
err
=
path_lookup
(
emul
,
LOOKUP_FOLLOW
|
LOOKUP_DIRECTORY
|
LOOKUP_NOALT
,
&
nd
);
if
(
!
err
)
path
=
nd
.
path
;
set_it:
write_lock
(
&
fs
->
lock
);
old_path
=
fs
->
altroot
;
fs
->
altroot
=
path
;
write_unlock
(
&
fs
->
lock
);
if
(
old_path
.
dentry
)
path_put
(
&
old_path
);
}
/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
static
int
do_path_lookup
(
int
dfd
,
const
char
*
name
,
unsigned
int
flags
,
struct
nameidata
*
nd
)
...
...
@@ -1153,14 +1077,6 @@ static int do_path_lookup(int dfd, const char *name,
if
(
*
name
==
'/'
)
{
read_lock
(
&
fs
->
lock
);
if
(
fs
->
altroot
.
dentry
&&
!
(
nd
->
flags
&
LOOKUP_NOALT
))
{
nd
->
path
=
fs
->
altroot
;
path_get
(
&
fs
->
altroot
);
read_unlock
(
&
fs
->
lock
);
if
(
__emul_lookup_dentry
(
name
,
nd
))
goto
out
;
/* found in altroot */
read_lock
(
&
fs
->
lock
);
}
nd
->
path
=
fs
->
root
;
path_get
(
&
fs
->
root
);
read_unlock
(
&
fs
->
lock
);
...
...
@@ -1194,7 +1110,6 @@ static int do_path_lookup(int dfd, const char *name,
}
retval
=
path_walk
(
name
,
nd
);
out:
if
(
unlikely
(
!
retval
&&
!
audit_dummy_context
()
&&
nd
->
path
.
dentry
&&
nd
->
path
.
dentry
->
d_inode
))
audit_inode
(
name
,
nd
->
path
.
dentry
);
...
...
fs/namespace.c
View file @
7f2da1e7
...
...
@@ -1972,7 +1972,7 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
struct
fs_struct
*
fs
)
{
struct
mnt_namespace
*
new_ns
;
struct
vfsmount
*
rootmnt
=
NULL
,
*
pwdmnt
=
NULL
,
*
altrootmnt
=
NULL
;
struct
vfsmount
*
rootmnt
=
NULL
,
*
pwdmnt
=
NULL
;
struct
vfsmount
*
p
,
*
q
;
new_ns
=
kmalloc
(
sizeof
(
struct
mnt_namespace
),
GFP_KERNEL
);
...
...
@@ -2015,10 +2015,6 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
pwdmnt
=
p
;
fs
->
pwd
.
mnt
=
mntget
(
q
);
}
if
(
p
==
fs
->
altroot
.
mnt
)
{
altrootmnt
=
p
;
fs
->
altroot
.
mnt
=
mntget
(
q
);
}
}
p
=
next_mnt
(
p
,
mnt_ns
->
root
);
q
=
next_mnt
(
q
,
new_ns
->
root
);
...
...
@@ -2029,8 +2025,6 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
mntput
(
rootmnt
);
if
(
pwdmnt
)
mntput
(
pwdmnt
);
if
(
altrootmnt
)
mntput
(
altrootmnt
);
return
new_ns
;
}
...
...
fs/open.c
View file @
7f2da1e7
...
...
@@ -548,7 +548,7 @@ asmlinkage long sys_chroot(const char __user * filename)
struct
nameidata
nd
;
int
error
;
error
=
__user_walk
(
filename
,
LOOKUP_FOLLOW
|
LOOKUP_DIRECTORY
|
LOOKUP_NOALT
,
&
nd
);
error
=
__user_walk
(
filename
,
LOOKUP_FOLLOW
|
LOOKUP_DIRECTORY
,
&
nd
);
if
(
error
)
goto
out
;
...
...
@@ -561,7 +561,6 @@ asmlinkage long sys_chroot(const char __user * filename)
goto
dput_and_out
;
set_fs_root
(
current
->
fs
,
&
nd
.
path
);
set_fs_altroot
();
error
=
0
;
dput_and_out:
path_put
(
&
nd
.
path
);
...
...
include/asm-alpha/namei.h
deleted
100644 → 0
View file @
8bb79224
/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
* linux/include/asm-alpha/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __ALPHA_NAMEI_H
#define __ALPHA_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __ALPHA_NAMEI_H */
include/asm-arm/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* linux/include/asm-arm/namei.h
*
* Routines to handle famous /usr/gnemul
* Derived from the Sparc version of this file
*
* Included from linux/fs/namei.c
*/
#ifndef __ASMARM_NAMEI_H
#define __ASMARM_NAMEI_H
#define ARM_BSD_EMUL "usr/gnemul/bsd/"
static
inline
char
*
__emul_prefix
(
void
)
{
switch
(
current
->
personality
)
{
case
PER_BSD
:
return
ARM_BSD_EMUL
;
default:
return
NULL
;
}
}
#endif
/* __ASMARM_NAMEI_H */
include/asm-avr32/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef __ASM_AVR32_NAMEI_H
#define __ASM_AVR32_NAMEI_H
/* This dummy routine may be changed to something useful */
#define __emul_prefix() NULL
#endif
/* __ASM_AVR32_NAMEI_H */
include/asm-blackfin/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* linux/include/asm/namei.h
*
* Included from linux/fs/namei.c
*
* Changes made by Lineo Inc. May 2001
*/
#ifndef __BFIN_NAMEI_H
#define __BFIN_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
include/asm-cris/namei.h
deleted
100644 → 0
View file @
8bb79224
/* $Id: namei.h,v 1.1 2000/07/10 16:32:31 bjornw Exp $
* linux/include/asm-cris/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __CRIS_NAMEI_H
#define __CRIS_NAMEI_H
/* used to find file-system prefixes for doing emulations
* see for example asm-sparc/namei.h
* we don't use it...
*/
#define __emul_prefix() NULL
#endif
/* __CRIS_NAMEI_H */
include/asm-frv/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* include/asm-frv/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __ASM_NAMEI_H
#define __ASM_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
include/asm-h8300/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* linux/include/asm-h8300/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __H8300_NAMEI_H
#define __H8300_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
include/asm-ia64/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef _ASM_IA64_NAMEI_H
#define _ASM_IA64_NAMEI_H
/*
* Modified 1998, 1999, 2001
* David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
*/
#include <asm/ptrace.h>
#include <asm/system.h>
#define EMUL_PREFIX_LINUX_IA32 "/emul/ia32-linux/"
static
inline
char
*
__emul_prefix
(
void
)
{
switch
(
current
->
personality
)
{
case
PER_LINUX32
:
return
EMUL_PREFIX_LINUX_IA32
;
default:
return
NULL
;
}
}
#endif
/* _ASM_IA64_NAMEI_H */
include/asm-m32r/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef _ASM_M32R_NAMEI_H
#define _ASM_M32R_NAMEI_H
/*
* linux/include/asm-m32r/namei.h
*
* Included from linux/fs/namei.c
*/
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* _ASM_M32R_NAMEI_H */
include/asm-m68k/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* linux/include/asm-m68k/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __M68K_NAMEI_H
#define __M68K_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
include/asm-m68knommu/namei.h
deleted
100644 → 0
View file @
8bb79224
#include <asm-m68k/namei.h>
include/asm-mips/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef _ASM_NAMEI_H
#define _ASM_NAMEI_H
/*
* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
*/
#define __emul_prefix() NULL
#endif
/* _ASM_NAMEI_H */
include/asm-mn10300/namei.h
deleted
100644 → 0
View file @
8bb79224
/* Emulation stuff
*
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
* Written by David Howells (dhowells@redhat.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public Licence
* as published by the Free Software Foundation; either version
* 2 of the Licence, or (at your option) any later version.
*/
#ifndef _ASM_NAMEI_H
#define _ASM_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* _ASM_NAMEI_H */
include/asm-parisc/namei.h
deleted
100644 → 0
View file @
8bb79224
/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
* linux/include/asm-parisc/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __PARISC_NAMEI_H
#define __PARISC_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __PARISC_NAMEI_H */
include/asm-powerpc/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef _ASM_POWERPC_NAMEI_H
#define _ASM_POWERPC_NAMEI_H
#ifdef __KERNEL__
/*
* Adapted from include/asm-alpha/namei.h
*
* Included from fs/namei.c
*/
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __KERNEL__ */
#endif
/* _ASM_POWERPC_NAMEI_H */
include/asm-s390/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* include/asm-s390/namei.h
*
* S390 version
*
* Derived from "include/asm-i386/namei.h"
*
* Included from linux/fs/namei.c
*/
#ifndef __S390_NAMEI_H
#define __S390_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __S390_NAMEI_H */
include/asm-sh/namei.h
deleted
100644 → 0
View file @
8bb79224
/* $Id: namei.h,v 1.3 2000/07/04 06:24:49 gniibe Exp $
* linux/include/asm-sh/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __ASM_SH_NAMEI_H
#define __ASM_SH_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __ASM_SH_NAMEI_H */
include/asm-sparc/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef ___ASM_SPARC_NAMEI_H
#define ___ASM_SPARC_NAMEI_H
#if defined(__sparc__) && defined(__arch64__)
#include <asm-sparc/namei_64.h>
#else
#include <asm-sparc/namei_32.h>
#endif
#endif
include/asm-sparc64/namei.h
deleted
100644 → 0
View file @
8bb79224
#include <asm-sparc/namei.h>
include/asm-um/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef __UM_NAMEI_H
#define __UM_NAMEI_H
#include "asm/arch/namei.h"
#endif
include/asm-v850/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* linux/include/asm-v850/namei.h
*
* Included from linux/fs/namei.c
*/
#ifndef __V850_NAMEI_H__
#define __V850_NAMEI_H__
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __V850_NAMEI_H__ */
include/asm-x86/namei.h
deleted
100644 → 0
View file @
8bb79224
#ifndef _ASM_X86_NAMEI_H
#define _ASM_X86_NAMEI_H
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* _ASM_X86_NAMEI_H */
include/asm-xtensa/namei.h
deleted
100644 → 0
View file @
8bb79224
/*
* include/asm-xtensa/namei.h
*
* Included from linux/fs/namei.c
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001 - 2005 Tensilica Inc.
*/
#ifndef _XTENSA_NAMEI_H
#define _XTENSA_NAMEI_H
#ifdef __KERNEL__
/* This dummy routine maybe changed to something useful
* for /usr/gnemul/ emulation stuff.
* Look at asm-sparc/namei.h for details.
*/
#define __emul_prefix() NULL
#endif
/* __KERNEL__ */
#endif
/* _XTENSA_NAMEI_H */
include/linux/fs_struct.h
View file @
7f2da1e7
...
...
@@ -7,7 +7,7 @@ struct fs_struct {
atomic_t
count
;
rwlock_t
lock
;
int
umask
;
struct
path
root
,
pwd
,
altroot
;
struct
path
root
,
pwd
;
};
#define INIT_FS { \
...
...
@@ -19,7 +19,6 @@ struct fs_struct {
extern
struct
kmem_cache
*
fs_cachep
;
extern
void
exit_fs
(
struct
task_struct
*
);
extern
void
set_fs_altroot
(
void
);
extern
void
set_fs_root
(
struct
fs_struct
*
,
struct
path
*
);
extern
void
set_fs_pwd
(
struct
fs_struct
*
,
struct
path
*
);
extern
struct
fs_struct
*
copy_fs_struct
(
struct
fs_struct
*
);
...
...
include/linux/namei.h
View file @
7f2da1e7
...
...
@@ -47,7 +47,6 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
#define LOOKUP_DIRECTORY 2
#define LOOKUP_CONTINUE 4
#define LOOKUP_PARENT 16
#define LOOKUP_NOALT 32
#define LOOKUP_REVAL 64
/*
* Intent data
...
...
kernel/exec_domain.c
View file @
7f2da1e7
...
...
@@ -168,7 +168,6 @@ __set_personality(u_long personality)
current
->
personality
=
personality
;
oep
=
current_thread_info
()
->
exec_domain
;
current_thread_info
()
->
exec_domain
=
ep
;
set_fs_altroot
();
module_put
(
oep
->
module
);
return
0
;
...
...
kernel/exit.c
View file @
7f2da1e7
...
...
@@ -565,8 +565,6 @@ void put_fs_struct(struct fs_struct *fs)
if
(
atomic_dec_and_test
(
&
fs
->
count
))
{
path_put
(
&
fs
->
root
);
path_put
(
&
fs
->
pwd
);
if
(
fs
->
altroot
.
dentry
)
path_put
(
&
fs
->
altroot
);
kmem_cache_free
(
fs_cachep
,
fs
);
}
}
...
...
kernel/fork.c
View file @
7f2da1e7
...
...
@@ -657,13 +657,6 @@ static struct fs_struct *__copy_fs_struct(struct fs_struct *old)
path_get
(
&
old
->
root
);
fs
->
pwd
=
old
->
pwd
;
path_get
(
&
old
->
pwd
);
if
(
old
->
altroot
.
dentry
)
{
fs
->
altroot
=
old
->
altroot
;
path_get
(
&
old
->
altroot
);
}
else
{
fs
->
altroot
.
mnt
=
NULL
;
fs
->
altroot
.
dentry
=
NULL
;
}
read_unlock
(
&
old
->
lock
);
}
return
fs
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment