mtd/fs/jffs2 erase.c, 1.71, 1.72 nodelist.c, 1.92, 1.93 nodelist.h,
1.127, 1.128 nodemgmt.c, 1.117, 1.118 readinode.c, 1.117, 1.118
David Woodhouse
dwmw2 at infradead.org
Sun Feb 27 18:01:36 EST 2005
- Previous message: mtd/drivers/mtd/maps alchemy-flash.c, NONE, 1.1 Config.in, 1.71,
1.72 Kconfig, 1.44, 1.45 Makefile.common, 1.24,
1.25 db1550-flash.c, 1.7, NONE db1x00-flash.c, 1.6,
NONE pb1550-flash.c, 1.6, NONE pb1xxx-flash.c, 1.14, NONE
- Next message: mtd/fs/jffs2 build.c,1.69,1.70 nodemgmt.c,1.118,1.119
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/mtd/fs/jffs2
In directory phoenix.infradead.org:/tmp/cvs-serv9999
Modified Files:
erase.c nodelist.c nodelist.h nodemgmt.c readinode.c
Log Message:
Don't remove inocache for inodes which are in read_inode() or
clear_inode() until they're done.
Index: erase.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/erase.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- erase.c 9 Feb 2005 09:17:40 -0000 1.71
+++ erase.c 27 Feb 2005 23:01:32 -0000 1.72
@@ -277,11 +277,8 @@
printk("\n");
});
- if (ic->nodes == (void *)ic) {
- D1(printk(KERN_DEBUG "inocache for ino #%u is all gone now. Freeing\n", ic->ino));
+ if (ic->nodes == (void *)ic)
jffs2_del_ino_cache(c, ic);
- jffs2_free_inode_cache(ic);
- }
}
static void jffs2_free_all_node_refs(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
Index: nodelist.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodelist.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -r1.92 -r1.93
--- nodelist.c 19 Jan 2005 19:22:00 -0000 1.92
+++ nodelist.c 27 Feb 2005 23:01:32 -0000 1.93
@@ -508,7 +508,7 @@
void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old)
{
struct jffs2_inode_cache **prev;
- D2(printk(KERN_DEBUG "jffs2_del_ino_cache: Del %p (ino #%u)\n", old, old->ino));
+ D1(printk(KERN_DEBUG "jffs2_del_ino_cache: Del %p (ino #%u)\n", old, old->ino));
spin_lock(&c->inocache_lock);
prev = &c->inocache_list[old->ino % INOCACHE_HASHSIZE];
@@ -520,6 +520,14 @@
*prev = old->next;
}
+ /* Free it now unless it's in READING or CLEARING state, which
+ are the transitions upon read_inode() and clear_inode(). The
+ rest of the time we know nobody else is looking at it, and
+ if it's held by read_inode() or clear_inode() they'll free it
+ for themselves. */
+ if (old->state != INO_STATE_READING && old->state != INO_STATE_CLEARING)
+ jffs2_free_inode_cache(old);
+
spin_unlock(&c->inocache_lock);
}
@@ -532,7 +540,6 @@
this = c->inocache_list[i];
while (this) {
next = this->next;
- D2(printk(KERN_DEBUG "jffs2_free_ino_caches: Freeing ino #%u at %p\n", this->ino, this));
jffs2_free_inode_cache(this);
this = next;
}
Index: nodelist.h
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodelist.h,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -r1.127 -r1.128
--- nodelist.h 9 Feb 2005 09:23:53 -0000 1.127
+++ nodelist.h 27 Feb 2005 23:01:32 -0000 1.128
@@ -135,6 +135,7 @@
#define INO_STATE_CHECKEDABSENT 3 /* Checked, cleared again */
#define INO_STATE_GC 4 /* GCing a 'pristine' node */
#define INO_STATE_READING 5 /* In read_inode() */
+#define INO_STATE_CLEARING 6 /* In clear_inode() */
#define INOCACHE_HASHSIZE 128
Index: nodemgmt.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodemgmt.c,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -r1.117 -r1.118
--- nodemgmt.c 25 Jan 2005 20:11:11 -0000 1.117
+++ nodemgmt.c 27 Feb 2005 23:01:32 -0000 1.118
@@ -593,11 +593,8 @@
*p = ref->next_in_ino;
ref->next_in_ino = NULL;
- if (ic->nodes == (void *)ic) {
- D1(printk(KERN_DEBUG "inocache for ino #%u is all gone now. Freeing\n", ic->ino));
+ if (ic->nodes == (void *)ic)
jffs2_del_ino_cache(c, ic);
- jffs2_free_inode_cache(ic);
- }
spin_unlock(&c->erase_completion_lock);
}
Index: readinode.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/readinode.c,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -r1.117 -r1.118
--- readinode.c 20 Nov 2004 18:06:54 -0000 1.117
+++ readinode.c 27 Feb 2005 23:01:33 -0000 1.118
@@ -672,6 +672,9 @@
down(&f->sem);
deleted = f->inocache && !f->inocache->nlink;
+ if (f->inocache && f->inocache->state != INO_STATE_CHECKING)
+ jffs2_set_inocache_state(c, f->inocache, INO_STATE_CLEARING);
+
if (f->metadata) {
if (deleted)
jffs2_mark_node_obsolete(c, f->metadata->raw);
@@ -688,8 +691,11 @@
jffs2_free_full_dirent(fd);
}
- if (f->inocache && f->inocache->state != INO_STATE_CHECKING)
+ if (f->inocache && f->inocache->state != INO_STATE_CHECKING) {
jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
+ if (f->inocache->nodes == (void *)f->inocache)
+ jffs2_del_ino_cache(c, f->inocache);
+ }
up(&f->sem);
}
- Previous message: mtd/drivers/mtd/maps alchemy-flash.c, NONE, 1.1 Config.in, 1.71,
1.72 Kconfig, 1.44, 1.45 Makefile.common, 1.24,
1.25 db1550-flash.c, 1.7, NONE db1x00-flash.c, 1.6,
NONE pb1550-flash.c, 1.6, NONE pb1xxx-flash.c, 1.14, NONE
- Next message: mtd/fs/jffs2 build.c,1.69,1.70 nodemgmt.c,1.118,1.119
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the linux-mtd-cvs
mailing list