mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
trim free_fdtable_rcu()
embedded case isn't hit anymore Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
b9e02af0ae
commit
1983e781da
17
fs/file.c
17
fs/file.c
@ -90,16 +90,8 @@ static void free_fdtable_rcu(struct rcu_head *rcu)
|
|||||||
struct fdtable_defer *fddef;
|
struct fdtable_defer *fddef;
|
||||||
|
|
||||||
BUG_ON(!fdt);
|
BUG_ON(!fdt);
|
||||||
|
BUG_ON(fdt->max_fds <= NR_OPEN_DEFAULT);
|
||||||
|
|
||||||
if (fdt->max_fds <= NR_OPEN_DEFAULT) {
|
|
||||||
/*
|
|
||||||
* This fdtable is embedded in the files structure and that
|
|
||||||
* structure itself is getting destroyed.
|
|
||||||
*/
|
|
||||||
kmem_cache_free(files_cachep,
|
|
||||||
container_of(fdt, struct files_struct, fdtab));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!is_vmalloc_addr(fdt->fd) && !is_vmalloc_addr(fdt->open_fds)) {
|
if (!is_vmalloc_addr(fdt->fd) && !is_vmalloc_addr(fdt->open_fds)) {
|
||||||
kfree(fdt->fd);
|
kfree(fdt->fd);
|
||||||
kfree(fdt->open_fds);
|
kfree(fdt->open_fds);
|
||||||
@ -116,11 +108,6 @@ static void free_fdtable_rcu(struct rcu_head *rcu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void free_fdtable(struct fdtable *fdt)
|
|
||||||
{
|
|
||||||
call_rcu(&fdt->rcu, free_fdtable_rcu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Expand the fdset in the files_struct. Called with the files spinlock
|
* Expand the fdset in the files_struct. Called with the files spinlock
|
||||||
* held for write.
|
* held for write.
|
||||||
@ -234,7 +221,7 @@ static int expand_fdtable(struct files_struct *files, int nr)
|
|||||||
copy_fdtable(new_fdt, cur_fdt);
|
copy_fdtable(new_fdt, cur_fdt);
|
||||||
rcu_assign_pointer(files->fdt, new_fdt);
|
rcu_assign_pointer(files->fdt, new_fdt);
|
||||||
if (cur_fdt->max_fds > NR_OPEN_DEFAULT)
|
if (cur_fdt->max_fds > NR_OPEN_DEFAULT)
|
||||||
free_fdtable(cur_fdt);
|
call_rcu(&cur_fdt->rcu, free_fdtable_rcu);
|
||||||
} else {
|
} else {
|
||||||
/* Somebody else expanded, so undo our attempt */
|
/* Somebody else expanded, so undo our attempt */
|
||||||
__free_fdtable(new_fdt);
|
__free_fdtable(new_fdt);
|
||||||
|
Loading…
Reference in New Issue
Block a user