diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2010-06-02 17:38:30 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-08-09 16:47:44 -0400 |
commit | a4ffdde6e56fdf8c34ddadc2674d6eb978083369 (patch) | |
tree | 0fa07df92d804cb7d0482135195e4835cb16403a /fs/notify/inotify/inotify.c | |
parent | b5fc510c48f631882ccec3c0f02a25d5b67de09f (diff) |
simplify checks for I_CLEAR/I_FREEING
add I_CLEAR instead of replacing I_FREEING with it. I_CLEAR is
equivalent to I_FREEING for almost all code looking at either;
it's there to keep track of having called clear_inode() exactly
once per inode lifetime, at some point after having set I_FREEING.
I_CLEAR and I_FREEING never get set at the same time with the
current code, so we can switch to setting i_flags to I_FREEING | I_CLEAR
instead of I_CLEAR without loss of information. As the result of
such change, checks become simpler and the amount of code that needs
to know about I_CLEAR shrinks a lot.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/notify/inotify/inotify.c')
-rw-r--r-- | fs/notify/inotify/inotify.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/notify/inotify/inotify.c b/fs/notify/inotify/inotify.c index 27b75ebc7460..cf6b0429a257 100644 --- a/fs/notify/inotify/inotify.c +++ b/fs/notify/inotify/inotify.c | |||
@@ -377,11 +377,11 @@ void inotify_unmount_inodes(struct list_head *list) | |||
377 | struct list_head *watches; | 377 | struct list_head *watches; |
378 | 378 | ||
379 | /* | 379 | /* |
380 | * We cannot __iget() an inode in state I_CLEAR, I_FREEING, | 380 | * We cannot __iget() an inode in state I_FREEING, |
381 | * I_WILL_FREE, or I_NEW which is fine because by that point | 381 | * I_WILL_FREE, or I_NEW which is fine because by that point |
382 | * the inode cannot have any associated watches. | 382 | * the inode cannot have any associated watches. |
383 | */ | 383 | */ |
384 | if (inode->i_state & (I_CLEAR|I_FREEING|I_WILL_FREE|I_NEW)) | 384 | if (inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) |
385 | continue; | 385 | continue; |
386 | 386 | ||
387 | /* | 387 | /* |
@@ -403,8 +403,7 @@ void inotify_unmount_inodes(struct list_head *list) | |||
403 | /* In case the dropping of a reference would nuke next_i. */ | 403 | /* In case the dropping of a reference would nuke next_i. */ |
404 | if ((&next_i->i_sb_list != list) && | 404 | if ((&next_i->i_sb_list != list) && |
405 | atomic_read(&next_i->i_count) && | 405 | atomic_read(&next_i->i_count) && |
406 | !(next_i->i_state & (I_CLEAR | I_FREEING | | 406 | !(next_i->i_state & (I_FREEING|I_WILL_FREE))) { |
407 | I_WILL_FREE))) { | ||
408 | __iget(next_i); | 407 | __iget(next_i); |
409 | need_iput = next_i; | 408 | need_iput = next_i; |
410 | } | 409 | } |