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
Kirill Smelkov
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
Hide 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