aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/readinode.c
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2005-02-27 18:01:36 -0500
committerThomas Gleixner <tglx@mtd.linutronix.de>2005-05-23 06:46:14 -0400
commit67e345d17ff8c2085a54c293001ae548f7be7b21 (patch)
tree07f2829e98c22c5d1edd8832a06a11cbdde85f24 /fs/jffs2/readinode.c
parent002fa30170f9500ac31fa22931c689029af7f27b (diff)
[JFFS2] Prevent ino cache removal for inodes in use
Don't remove inocache for inodes which are in read_inode() or clear_inode() until they're done. Signed-off-by: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/jffs2/readinode.c')
-rw-r--r--fs/jffs2/readinode.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
index aca4a0b17bcd..a1980a9da531 100644
--- a/fs/jffs2/readinode.c
+++ b/fs/jffs2/readinode.c
@@ -7,7 +7,7 @@
7 * 7 *
8 * For licensing information, see the file 'LICENCE' in this directory. 8 * For licensing information, see the file 'LICENCE' in this directory.
9 * 9 *
10 * $Id: readinode.c,v 1.117 2004/11/20 18:06:54 dwmw2 Exp $ 10 * $Id: readinode.c,v 1.118 2005/02/27 23:01:33 dwmw2 Exp $
11 * 11 *
12 */ 12 */
13 13
@@ -672,6 +672,9 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
672 down(&f->sem); 672 down(&f->sem);
673 deleted = f->inocache && !f->inocache->nlink; 673 deleted = f->inocache && !f->inocache->nlink;
674 674
675 if (f->inocache && f->inocache->state != INO_STATE_CHECKING)
676 jffs2_set_inocache_state(c, f->inocache, INO_STATE_CLEARING);
677
675 if (f->metadata) { 678 if (f->metadata) {
676 if (deleted) 679 if (deleted)
677 jffs2_mark_node_obsolete(c, f->metadata->raw); 680 jffs2_mark_node_obsolete(c, f->metadata->raw);
@@ -688,8 +691,11 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
688 jffs2_free_full_dirent(fd); 691 jffs2_free_full_dirent(fd);
689 } 692 }
690 693
691 if (f->inocache && f->inocache->state != INO_STATE_CHECKING) 694 if (f->inocache && f->inocache->state != INO_STATE_CHECKING) {
692 jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT); 695 jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
696 if (f->inocache->nodes == (void *)f->inocache)
697 jffs2_del_ino_cache(c, f->inocache);
698 }
693 699
694 up(&f->sem); 700 up(&f->sem);
695} 701}