inode: move inode to a different list inside lock
When removing an element from the lru, this will be done today after the lock is released. This is a clear mistake, although we are not sure if the bugs we are seeing are related to this. All list manipulations are done inside the lock, and so should this one. Signed-off-by: Glauber Costa <glommer@openvz.org> Tested-by: Michal Hocko <mhocko@suse.cz> Cc: Dave Chinner <dchinner@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								bc3b14cb2d
							
						
					
				
			
			
				commit
				
					
						d38fa6986e
					
				
			
		
					 1 changed files with 1 additions and 1 deletions
				
			
		| 
						 | 
					@ -735,9 +735,9 @@ inode_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	WARN_ON(inode->i_state & I_NEW);
 | 
						WARN_ON(inode->i_state & I_NEW);
 | 
				
			||||||
	inode->i_state |= I_FREEING;
 | 
						inode->i_state |= I_FREEING;
 | 
				
			||||||
 | 
						list_move(&inode->i_lru, freeable);
 | 
				
			||||||
	spin_unlock(&inode->i_lock);
 | 
						spin_unlock(&inode->i_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_move(&inode->i_lru, freeable);
 | 
					 | 
				
			||||||
	this_cpu_dec(nr_unused);
 | 
						this_cpu_dec(nr_unused);
 | 
				
			||||||
	return LRU_REMOVED;
 | 
						return LRU_REMOVED;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue