writeback: do foreign inode detection iff cgroup writeback is enabled
Currently, even when a filesystem doesn't set the FS_CGROUP_WRITEBACK flag, if the filesystem uses wbc_init_bio() and wbc_account_io(), the foreign inode detection and migration logic still ends up activating cgroup writeback which is unexpected. This patch ensures that the foreign inode detection logic stays disabled when inode_cgwb_enabled() is false by not associating writeback_control's with bdi_writeback's. This also avoids unnecessary operations in wbc_init_bio(), wbc_account_io() and wbc_detach_inode() for filesystems which don't support cgroup writeback. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
		
							parent
							
								
									412a19b64a
								
							
						
					
					
						commit
						dd73e4b7df
					
				| @ -513,6 +513,11 @@ out_free: | ||||
| void wbc_attach_and_unlock_inode(struct writeback_control *wbc, | ||||
| 				 struct inode *inode) | ||||
| { | ||||
| 	if (!inode_cgwb_enabled(inode)) { | ||||
| 		spin_unlock(&inode->i_lock); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	wbc->wb = inode_to_wb(inode); | ||||
| 	wbc->inode = inode; | ||||
| 
 | ||||
| @ -575,11 +580,16 @@ void wbc_detach_inode(struct writeback_control *wbc) | ||||
| { | ||||
| 	struct bdi_writeback *wb = wbc->wb; | ||||
| 	struct inode *inode = wbc->inode; | ||||
| 	u16 history = inode->i_wb_frn_history; | ||||
| 	unsigned long avg_time = inode->i_wb_frn_avg_time; | ||||
| 	unsigned long max_bytes, max_time; | ||||
| 	unsigned long avg_time, max_bytes, max_time; | ||||
| 	u16 history; | ||||
| 	int max_id; | ||||
| 
 | ||||
| 	if (!wb) | ||||
| 		return; | ||||
| 
 | ||||
| 	history = inode->i_wb_frn_history; | ||||
| 	avg_time = inode->i_wb_frn_avg_time; | ||||
| 
 | ||||
| 	/* pick the winner of this round */ | ||||
| 	if (wbc->wb_bytes >= wbc->wb_lcand_bytes && | ||||
| 	    wbc->wb_bytes >= wbc->wb_tcand_bytes) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user