[PATCH] igrab() should check for I_CLEAR
When igrab() is calling __iget() on an inode it should check if clear_inode() has been called on the inode already. Otherwise there is a race window between clear_inode() and destroy_inode() where igrab() calls __iget() which leads to already free inodes on the inode lists. Signed-off-by: Vandana Rungta <vandana@novell.com> Signed-off-by: Jan Blunck <jblunck@suse.de> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
068135e635
Коммит
4a3b0a490d
|
@ -709,7 +709,7 @@ EXPORT_SYMBOL(iunique);
|
||||||
struct inode *igrab(struct inode *inode)
|
struct inode *igrab(struct inode *inode)
|
||||||
{
|
{
|
||||||
spin_lock(&inode_lock);
|
spin_lock(&inode_lock);
|
||||||
if (!(inode->i_state & (I_FREEING|I_WILL_FREE)))
|
if (!(inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)))
|
||||||
__iget(inode);
|
__iget(inode);
|
||||||
else
|
else
|
||||||
/*
|
/*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче