[PATCH] get_empty_filp tweaks, inline epoll_init_file()
Eliminate a handful of cache references by keeping current in a register instead of reloading (helps x86) and avoiding the overhead of a function call. Inlining eventpoll_init_file() saves 24 bytes. Also reorder file initialization to make writes occur more sequentially. Signed-off-by: Benjamin LaHaise <bcrl@linux.intel.com> Cc: Davide Libenzi <davidel@xmailserver.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0b2fcfdb8b
commit
5a6b7951bf
|
@ -452,15 +452,6 @@ static void ep_poll_safewake(struct poll_safewake *psw, wait_queue_head_t *wq)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Used to initialize the epoll bits inside the "struct file" */
|
|
||||||
void eventpoll_init_file(struct file *file)
|
|
||||||
{
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&file->f_ep_links);
|
|
||||||
spin_lock_init(&file->f_ep_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is called from eventpoll_release() to unlink files from the eventpoll
|
* This is called from eventpoll_release() to unlink files from the eventpoll
|
||||||
* interface. We need to have this facility to cleanup correctly files that are
|
* interface. We need to have this facility to cleanup correctly files that are
|
||||||
|
|
|
@ -88,6 +88,7 @@ int proc_nr_files(ctl_table *table, int write, struct file *filp,
|
||||||
*/
|
*/
|
||||||
struct file *get_empty_filp(void)
|
struct file *get_empty_filp(void)
|
||||||
{
|
{
|
||||||
|
struct task_struct *tsk;
|
||||||
static int old_max;
|
static int old_max;
|
||||||
struct file * f;
|
struct file * f;
|
||||||
|
|
||||||
|
@ -112,13 +113,14 @@ struct file *get_empty_filp(void)
|
||||||
if (security_file_alloc(f))
|
if (security_file_alloc(f))
|
||||||
goto fail_sec;
|
goto fail_sec;
|
||||||
|
|
||||||
eventpoll_init_file(f);
|
tsk = current;
|
||||||
atomic_set(&f->f_count, 1);
|
|
||||||
f->f_uid = current->fsuid;
|
|
||||||
f->f_gid = current->fsgid;
|
|
||||||
rwlock_init(&f->f_owner.lock);
|
|
||||||
/* f->f_version: 0 */
|
|
||||||
INIT_LIST_HEAD(&f->f_u.fu_list);
|
INIT_LIST_HEAD(&f->f_u.fu_list);
|
||||||
|
atomic_set(&f->f_count, 1);
|
||||||
|
rwlock_init(&f->f_owner.lock);
|
||||||
|
f->f_uid = tsk->fsuid;
|
||||||
|
f->f_gid = tsk->fsgid;
|
||||||
|
eventpoll_init_file(f);
|
||||||
|
/* f->f_version: 0 */
|
||||||
return f;
|
return f;
|
||||||
|
|
||||||
over:
|
over:
|
||||||
|
|
|
@ -52,7 +52,12 @@ struct file;
|
||||||
#ifdef CONFIG_EPOLL
|
#ifdef CONFIG_EPOLL
|
||||||
|
|
||||||
/* Used to initialize the epoll bits inside the "struct file" */
|
/* Used to initialize the epoll bits inside the "struct file" */
|
||||||
void eventpoll_init_file(struct file *file);
|
static inline void eventpoll_init_file(struct file *file)
|
||||||
|
{
|
||||||
|
INIT_LIST_HEAD(&file->f_ep_links);
|
||||||
|
spin_lock_init(&file->f_ep_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Used to release the epoll bits inside the "struct file" */
|
/* Used to release the epoll bits inside the "struct file" */
|
||||||
void eventpoll_release_file(struct file *file);
|
void eventpoll_release_file(struct file *file);
|
||||||
|
@ -85,7 +90,6 @@ static inline void eventpoll_release(struct file *file)
|
||||||
eventpoll_release_file(file);
|
eventpoll_release_file(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static inline void eventpoll_init_file(struct file *file) {}
|
static inline void eventpoll_init_file(struct file *file) {}
|
||||||
|
|
Loading…
Reference in New Issue