|
@@ -317,7 +317,7 @@ void clear_inode(struct inode *inode)
|
|
|
bd_forget(inode);
|
|
|
if (S_ISCHR(inode->i_mode) && inode->i_cdev)
|
|
|
cd_forget(inode);
|
|
|
- inode->i_state = I_CLEAR;
|
|
|
+ inode->i_state = I_FREEING | I_CLEAR;
|
|
|
}
|
|
|
EXPORT_SYMBOL(clear_inode);
|
|
|
|
|
@@ -553,7 +553,7 @@ repeat:
|
|
|
continue;
|
|
|
if (!test(inode, data))
|
|
|
continue;
|
|
|
- if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)) {
|
|
|
+ if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
|
|
|
__wait_on_freeing_inode(inode);
|
|
|
goto repeat;
|
|
|
}
|
|
@@ -578,7 +578,7 @@ repeat:
|
|
|
continue;
|
|
|
if (inode->i_sb != sb)
|
|
|
continue;
|
|
|
- if (inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)) {
|
|
|
+ if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
|
|
|
__wait_on_freeing_inode(inode);
|
|
|
goto repeat;
|
|
|
}
|
|
@@ -840,7 +840,7 @@ EXPORT_SYMBOL(iunique);
|
|
|
struct inode *igrab(struct inode *inode)
|
|
|
{
|
|
|
spin_lock(&inode_lock);
|
|
|
- if (!(inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)))
|
|
|
+ if (!(inode->i_state & (I_FREEING|I_WILL_FREE)))
|
|
|
__iget(inode);
|
|
|
else
|
|
|
/*
|
|
@@ -1089,7 +1089,7 @@ int insert_inode_locked(struct inode *inode)
|
|
|
continue;
|
|
|
if (old->i_sb != sb)
|
|
|
continue;
|
|
|
- if (old->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE))
|
|
|
+ if (old->i_state & (I_FREEING|I_WILL_FREE))
|
|
|
continue;
|
|
|
break;
|
|
|
}
|
|
@@ -1128,7 +1128,7 @@ int insert_inode_locked4(struct inode *inode, unsigned long hashval,
|
|
|
continue;
|
|
|
if (!test(old, data))
|
|
|
continue;
|
|
|
- if (old->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE))
|
|
|
+ if (old->i_state & (I_FREEING|I_WILL_FREE))
|
|
|
continue;
|
|
|
break;
|
|
|
}
|
|
@@ -1218,7 +1218,7 @@ void generic_delete_inode(struct inode *inode)
|
|
|
hlist_del_init(&inode->i_hash);
|
|
|
spin_unlock(&inode_lock);
|
|
|
wake_up_inode(inode);
|
|
|
- BUG_ON(inode->i_state != I_CLEAR);
|
|
|
+ BUG_ON(inode->i_state != (I_FREEING | I_CLEAR));
|
|
|
destroy_inode(inode);
|
|
|
}
|
|
|
EXPORT_SYMBOL(generic_delete_inode);
|
|
@@ -1322,7 +1322,7 @@ static inline void iput_final(struct inode *inode)
|
|
|
void iput(struct inode *inode)
|
|
|
{
|
|
|
if (inode) {
|
|
|
- BUG_ON(inode->i_state == I_CLEAR);
|
|
|
+ BUG_ON(inode->i_state & I_CLEAR);
|
|
|
|
|
|
if (atomic_dec_and_lock(&inode->i_count, &inode_lock))
|
|
|
iput_final(inode);
|