Loading fs/jffs2/README.Locking +5 −1 Original line number Original line Diff line number Diff line $Id: README.Locking,v 1.9 2004/11/20 10:35:40 dwmw2 Exp $ $Id: README.Locking,v 1.12 2005/04/13 13:22:35 dwmw2 Exp $ JFFS2 LOCKING DOCUMENTATION JFFS2 LOCKING DOCUMENTATION --------------------------- --------------------------- Loading Loading @@ -108,6 +108,10 @@ in-core jffs2_inode_cache objects (each inode in JFFS2 has the correspondent jffs2_inode_cache object). So, the inocache_lock correspondent jffs2_inode_cache object). So, the inocache_lock has to be locked while walking the c->inocache_list hash buckets. has to be locked while walking the c->inocache_list hash buckets. This spinlock also covers allocation of new inode numbers, which is currently just '++->highest_ino++', but might one day get more complicated if we need to deal with wrapping after 4 milliard inode numbers are used. Note, the f->sem guarantees that the correspondent jffs2_inode_cache Note, the f->sem guarantees that the correspondent jffs2_inode_cache will not be removed. So, it is allowed to access it without locking will not be removed. So, it is allowed to access it without locking the inocache_lock spinlock. the inocache_lock spinlock. Loading fs/jffs2/nodelist.c +5 −1 Original line number Original line Diff line number Diff line Loading @@ -7,7 +7,7 @@ * * * For licensing information, see the file 'LICENCE' in this directory. * For licensing information, see the file 'LICENCE' in this directory. * * * $Id: nodelist.c,v 1.93 2005/02/27 23:01:32 dwmw2 Exp $ * $Id: nodelist.c,v 1.94 2005/04/13 13:22:35 dwmw2 Exp $ * * */ */ Loading Loading @@ -491,6 +491,10 @@ void jffs2_add_ino_cache (struct jffs2_sb_info *c, struct jffs2_inode_cache *new struct jffs2_inode_cache **prev; struct jffs2_inode_cache **prev; D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); spin_lock(&c->inocache_lock); spin_lock(&c->inocache_lock); if (!new->ino) new->ino = ++c->highest_ino; D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; Loading fs/jffs2/write.c +3 −4 Original line number Original line Diff line number Diff line Loading @@ -7,7 +7,7 @@ * * * For licensing information, see the file 'LICENCE' in this directory. * For licensing information, see the file 'LICENCE' in this directory. * * * $Id: write.c,v 1.91 2005/03/01 10:34:03 dedekind Exp $ * $Id: write.c,v 1.92 2005/04/13 13:22:35 dwmw2 Exp $ * * */ */ Loading Loading @@ -35,13 +35,12 @@ int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint f->inocache = ic; f->inocache = ic; f->inocache->nlink = 1; f->inocache->nlink = 1; f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; f->inocache->ino = ++c->highest_ino; f->inocache->state = INO_STATE_PRESENT; f->inocache->state = INO_STATE_PRESENT; ri->ino = cpu_to_je32(f->inocache->ino); D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino)); jffs2_add_ino_cache(c, f->inocache); jffs2_add_ino_cache(c, f->inocache); D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino)); ri->ino = cpu_to_je32(f->inocache->ino); ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); Loading Loading
fs/jffs2/README.Locking +5 −1 Original line number Original line Diff line number Diff line $Id: README.Locking,v 1.9 2004/11/20 10:35:40 dwmw2 Exp $ $Id: README.Locking,v 1.12 2005/04/13 13:22:35 dwmw2 Exp $ JFFS2 LOCKING DOCUMENTATION JFFS2 LOCKING DOCUMENTATION --------------------------- --------------------------- Loading Loading @@ -108,6 +108,10 @@ in-core jffs2_inode_cache objects (each inode in JFFS2 has the correspondent jffs2_inode_cache object). So, the inocache_lock correspondent jffs2_inode_cache object). So, the inocache_lock has to be locked while walking the c->inocache_list hash buckets. has to be locked while walking the c->inocache_list hash buckets. This spinlock also covers allocation of new inode numbers, which is currently just '++->highest_ino++', but might one day get more complicated if we need to deal with wrapping after 4 milliard inode numbers are used. Note, the f->sem guarantees that the correspondent jffs2_inode_cache Note, the f->sem guarantees that the correspondent jffs2_inode_cache will not be removed. So, it is allowed to access it without locking will not be removed. So, it is allowed to access it without locking the inocache_lock spinlock. the inocache_lock spinlock. Loading
fs/jffs2/nodelist.c +5 −1 Original line number Original line Diff line number Diff line Loading @@ -7,7 +7,7 @@ * * * For licensing information, see the file 'LICENCE' in this directory. * For licensing information, see the file 'LICENCE' in this directory. * * * $Id: nodelist.c,v 1.93 2005/02/27 23:01:32 dwmw2 Exp $ * $Id: nodelist.c,v 1.94 2005/04/13 13:22:35 dwmw2 Exp $ * * */ */ Loading Loading @@ -491,6 +491,10 @@ void jffs2_add_ino_cache (struct jffs2_sb_info *c, struct jffs2_inode_cache *new struct jffs2_inode_cache **prev; struct jffs2_inode_cache **prev; D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); spin_lock(&c->inocache_lock); spin_lock(&c->inocache_lock); if (!new->ino) new->ino = ++c->highest_ino; D2(printk(KERN_DEBUG "jffs2_add_ino_cache: Add %p (ino #%u)\n", new, new->ino)); prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; prev = &c->inocache_list[new->ino % INOCACHE_HASHSIZE]; Loading
fs/jffs2/write.c +3 −4 Original line number Original line Diff line number Diff line Loading @@ -7,7 +7,7 @@ * * * For licensing information, see the file 'LICENCE' in this directory. * For licensing information, see the file 'LICENCE' in this directory. * * * $Id: write.c,v 1.91 2005/03/01 10:34:03 dedekind Exp $ * $Id: write.c,v 1.92 2005/04/13 13:22:35 dwmw2 Exp $ * * */ */ Loading Loading @@ -35,13 +35,12 @@ int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint f->inocache = ic; f->inocache = ic; f->inocache->nlink = 1; f->inocache->nlink = 1; f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache; f->inocache->ino = ++c->highest_ino; f->inocache->state = INO_STATE_PRESENT; f->inocache->state = INO_STATE_PRESENT; ri->ino = cpu_to_je32(f->inocache->ino); D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino)); jffs2_add_ino_cache(c, f->inocache); jffs2_add_ino_cache(c, f->inocache); D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino)); ri->ino = cpu_to_je32(f->inocache->ino); ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE); Loading