[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:
Benjamin LaHaise 2006-03-23 03:01:03 -08:00 committed by Linus Torvalds
parent 0b2fcfdb8b
commit 5a6b7951bf
3 changed files with 14 additions and 17 deletions

View File

@ -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

View File

@ -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:

View File

@ -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) {}