diff options
Diffstat (limited to 'fs/inode.c')
-rw-r--r-- | fs/inode.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/inode.c b/fs/inode.c index 913ab2d9a5d1..826fb0b9d1c3 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -359,6 +359,7 @@ static int invalidate_list(struct list_head *head, struct list_head *dispose) | |||
359 | invalidate_inode_buffers(inode); | 359 | invalidate_inode_buffers(inode); |
360 | if (!atomic_read(&inode->i_count)) { | 360 | if (!atomic_read(&inode->i_count)) { |
361 | list_move(&inode->i_list, dispose); | 361 | list_move(&inode->i_list, dispose); |
362 | WARN_ON(inode->i_state & I_NEW); | ||
362 | inode->i_state |= I_FREEING; | 363 | inode->i_state |= I_FREEING; |
363 | count++; | 364 | count++; |
364 | continue; | 365 | continue; |
@@ -460,6 +461,7 @@ static void prune_icache(int nr_to_scan) | |||
460 | continue; | 461 | continue; |
461 | } | 462 | } |
462 | list_move(&inode->i_list, &freeable); | 463 | list_move(&inode->i_list, &freeable); |
464 | WARN_ON(inode->i_state & I_NEW); | ||
463 | inode->i_state |= I_FREEING; | 465 | inode->i_state |= I_FREEING; |
464 | nr_pruned++; | 466 | nr_pruned++; |
465 | } | 467 | } |
@@ -656,6 +658,7 @@ void unlock_new_inode(struct inode *inode) | |||
656 | * just created it (so there can be no old holders | 658 | * just created it (so there can be no old holders |
657 | * that haven't tested I_LOCK). | 659 | * that haven't tested I_LOCK). |
658 | */ | 660 | */ |
661 | WARN_ON((inode->i_state & (I_LOCK|I_NEW)) != (I_LOCK|I_NEW)); | ||
659 | inode->i_state &= ~(I_LOCK|I_NEW); | 662 | inode->i_state &= ~(I_LOCK|I_NEW); |
660 | wake_up_inode(inode); | 663 | wake_up_inode(inode); |
661 | } | 664 | } |
@@ -1145,6 +1148,7 @@ void generic_delete_inode(struct inode *inode) | |||
1145 | 1148 | ||
1146 | list_del_init(&inode->i_list); | 1149 | list_del_init(&inode->i_list); |
1147 | list_del_init(&inode->i_sb_list); | 1150 | list_del_init(&inode->i_sb_list); |
1151 | WARN_ON(inode->i_state & I_NEW); | ||
1148 | inode->i_state |= I_FREEING; | 1152 | inode->i_state |= I_FREEING; |
1149 | inodes_stat.nr_inodes--; | 1153 | inodes_stat.nr_inodes--; |
1150 | spin_unlock(&inode_lock); | 1154 | spin_unlock(&inode_lock); |
@@ -1186,16 +1190,19 @@ static void generic_forget_inode(struct inode *inode) | |||
1186 | spin_unlock(&inode_lock); | 1190 | spin_unlock(&inode_lock); |
1187 | return; | 1191 | return; |
1188 | } | 1192 | } |
1193 | WARN_ON(inode->i_state & I_NEW); | ||
1189 | inode->i_state |= I_WILL_FREE; | 1194 | inode->i_state |= I_WILL_FREE; |
1190 | spin_unlock(&inode_lock); | 1195 | spin_unlock(&inode_lock); |
1191 | write_inode_now(inode, 1); | 1196 | write_inode_now(inode, 1); |
1192 | spin_lock(&inode_lock); | 1197 | spin_lock(&inode_lock); |
1198 | WARN_ON(inode->i_state & I_NEW); | ||
1193 | inode->i_state &= ~I_WILL_FREE; | 1199 | inode->i_state &= ~I_WILL_FREE; |
1194 | inodes_stat.nr_unused--; | 1200 | inodes_stat.nr_unused--; |
1195 | hlist_del_init(&inode->i_hash); | 1201 | hlist_del_init(&inode->i_hash); |
1196 | } | 1202 | } |
1197 | list_del_init(&inode->i_list); | 1203 | list_del_init(&inode->i_list); |
1198 | list_del_init(&inode->i_sb_list); | 1204 | list_del_init(&inode->i_sb_list); |
1205 | WARN_ON(inode->i_state & I_NEW); | ||
1199 | inode->i_state |= I_FREEING; | 1206 | inode->i_state |= I_FREEING; |
1200 | inodes_stat.nr_inodes--; | 1207 | inodes_stat.nr_inodes--; |
1201 | spin_unlock(&inode_lock); | 1208 | spin_unlock(&inode_lock); |