[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 | ||||
|  * 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 task_struct *tsk; | ||||
| 	static int old_max; | ||||
| 	struct file * f; | ||||
| 
 | ||||
| @ -112,13 +113,14 @@ struct file *get_empty_filp(void) | ||||
| 	if (security_file_alloc(f)) | ||||
| 		goto fail_sec; | ||||
| 
 | ||||
| 	eventpoll_init_file(f); | ||||
| 	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 */ | ||||
| 	tsk = current; | ||||
| 	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; | ||||
| 
 | ||||
| over: | ||||
|  | ||||
| @ -52,7 +52,12 @@ struct file; | ||||
| #ifdef CONFIG_EPOLL | ||||
| 
 | ||||
| /* 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" */ | ||||
| void eventpoll_release_file(struct file *file); | ||||
| @ -85,7 +90,6 @@ static inline void eventpoll_release(struct file *file) | ||||
| 	eventpoll_release_file(file); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| static inline void eventpoll_init_file(struct file *file) {} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user