fs: remove all rcu head initializations, except on_stack initializations
Remove all rcu head inits. We don't care about the RCU head state before passing it to call_rcu() anyway. Only leave the "on_stack" variants so debugobjects can keep track of objects on stack. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Andries Brouwer <aeb@cwi.nl>
This commit is contained in:
		
					parent
					
						
							
								9161e329ef
							
						
					
				
			
			
				commit
				
					
						b97181f242
					
				
			
		
					 3 changed files with 26 additions and 9 deletions
				
			
		|  | @ -178,7 +178,6 @@ static struct fdtable * alloc_fdtable(unsigned int nr) | |||
| 	fdt->open_fds = (fd_set *)data; | ||||
| 	data += nr / BITS_PER_BYTE; | ||||
| 	fdt->close_on_exec = (fd_set *)data; | ||||
| 	INIT_RCU_HEAD(&fdt->rcu); | ||||
| 	fdt->next = NULL; | ||||
| 
 | ||||
| 	return fdt; | ||||
|  | @ -312,7 +311,6 @@ struct files_struct *dup_fd(struct files_struct *oldf, int *errorp) | |||
| 	new_fdt->close_on_exec = (fd_set *)&newf->close_on_exec_init; | ||||
| 	new_fdt->open_fds = (fd_set *)&newf->open_fds_init; | ||||
| 	new_fdt->fd = &newf->fd_array[0]; | ||||
| 	INIT_RCU_HEAD(&new_fdt->rcu); | ||||
| 	new_fdt->next = NULL; | ||||
| 
 | ||||
| 	spin_lock(&oldf->file_lock); | ||||
|  | @ -430,7 +428,6 @@ struct files_struct init_files = { | |||
| 		.fd		= &init_files.fd_array[0], | ||||
| 		.close_on_exec	= (fd_set *)&init_files.close_on_exec_init, | ||||
| 		.open_fds	= (fd_set *)&init_files.open_fds_init, | ||||
| 		.rcu		= RCU_HEAD_INIT, | ||||
| 	}, | ||||
| 	.file_lock	= __SPIN_LOCK_UNLOCKED(init_task.file_lock), | ||||
| }; | ||||
|  |  | |||
|  | @ -75,12 +75,33 @@ static inline bool bdi_work_on_stack(struct bdi_work *work) | |||
| 	return test_bit(WS_ONSTACK_B, &work->state); | ||||
| } | ||||
| 
 | ||||
| static inline void __bdi_work_init(struct bdi_work *work, | ||||
| 				   struct wb_writeback_args *args, | ||||
| 				   int on_stack) | ||||
| { | ||||
| 	work->args = *args; | ||||
| 	work->state = WS_USED; | ||||
| 	if (on_stack) { | ||||
| 		work->state |= WS_ONSTACK; | ||||
| 		init_rcu_head_on_stack(&work->rcu_head); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static inline void bdi_work_init(struct bdi_work *work, | ||||
| 				 struct wb_writeback_args *args) | ||||
| { | ||||
| 	INIT_RCU_HEAD(&work->rcu_head); | ||||
| 	work->args = *args; | ||||
| 	work->state = WS_USED; | ||||
| 	__bdi_work_init(work, args, false); | ||||
| } | ||||
| 
 | ||||
| static inline void bdi_work_init_on_stack(struct bdi_work *work, | ||||
| 					  struct wb_writeback_args *args) | ||||
| { | ||||
| 	__bdi_work_init(work, args, true); | ||||
| } | ||||
| 
 | ||||
| static inline void bdi_destroy_work_on_stack(struct bdi_work *work) | ||||
| { | ||||
| 	destroy_rcu_head_on_stack(&work->rcu_head); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -233,11 +254,11 @@ static void bdi_sync_writeback(struct backing_dev_info *bdi, | |||
| 	}; | ||||
| 	struct bdi_work work; | ||||
| 
 | ||||
| 	bdi_work_init(&work, &args); | ||||
| 	work.state |= WS_ONSTACK; | ||||
| 	bdi_work_init_on_stack(&work, &args); | ||||
| 
 | ||||
| 	bdi_queue_work(bdi, &work); | ||||
| 	bdi_wait_on_work_clear(&work); | ||||
| 	bdi_destroy_work_on_stack(&work); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  |  | |||
|  | @ -459,7 +459,6 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno, | |||
| 	} | ||||
| 
 | ||||
| 	/* everything is up and running, commence */ | ||||
| 	INIT_RCU_HEAD(&p->rcu_head); | ||||
| 	rcu_assign_pointer(ptbl->part[partno], p); | ||||
| 
 | ||||
| 	/* suppress uevent if the disk supresses it */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Paul E. McKenney
				Paul E. McKenney