block: document blk-plug
Thus spake Andrew Morton: "And I have the usual maintainability whine. If someone comes up to vmscan.c and sees it calling blk_start_plug(), how are they supposed to work out why that call is there? They go look at the blk_start_plug() definition and it is undocumented. I think we can do better than this?" Adapted from the LWN article - http://lwn.net/Articles/438256/ by Jens Axboe and from an earlier attempt by Shaohua Li to document blk-plug. [akpm@linux-foundation.org: grammatical and spelling tweaks] Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de> Cc: Shaohua Li <shaohua.li@intel.com> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@google.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
					parent
					
						
							
								27a84d54c0
							
						
					
				
			
			
				commit
				
					
						75df713627
					
				
			
		
					 2 changed files with 29 additions and 9 deletions
				
			
		|  | @ -2595,6 +2595,20 @@ EXPORT_SYMBOL(kblockd_schedule_delayed_work); | |||
| 
 | ||||
| #define PLUG_MAGIC	0x91827364 | ||||
| 
 | ||||
| /**
 | ||||
|  * blk_start_plug - initialize blk_plug and track it inside the task_struct | ||||
|  * @plug:	The &struct blk_plug that needs to be initialized | ||||
|  * | ||||
|  * Description: | ||||
|  *   Tracking blk_plug inside the task_struct will help with auto-flushing the | ||||
|  *   pending I/O should the task end up blocking between blk_start_plug() and | ||||
|  *   blk_finish_plug(). This is important from a performance perspective, but | ||||
|  *   also ensures that we don't deadlock. For instance, if the task is blocking | ||||
|  *   for a memory allocation, memory reclaim could end up wanting to free a | ||||
|  *   page belonging to that request that is currently residing in our private | ||||
|  *   plug. By flushing the pending I/O when the process goes to sleep, we avoid | ||||
|  *   this kind of deadlock. | ||||
|  */ | ||||
| void blk_start_plug(struct blk_plug *plug) | ||||
| { | ||||
| 	struct task_struct *tsk = current; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Suresh Jayaraman
				Suresh Jayaraman