Justus Winter, le Wed 30 Apr 2014 11:06:00 +0200, a écrit : > Currently, diskfs_node_iterate iterates twice over all nodes in the > cache. The first time only to determine the number of nodes currently > in the cache. Simply count them instead.
Ack. > * ext2fs/inode.c (nodehash_nr_items): New variable. > (diskfs_cached_lookup): Increment nodehash_nr_items. > (diskfs_node_norefs): Decrement nodehash_nr_items. > (diskfs_node_iterate): Fix the type of num_nodes, use nodehash_nr_items. > --- > ext2fs/inode.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/ext2fs/inode.c b/ext2fs/inode.c > index e75c63f..ed78265 100644 > --- a/ext2fs/inode.c > +++ b/ext2fs/inode.c > @@ -47,6 +47,7 @@ > #endif > > static struct node *nodehash[INOHSZ]; > +static size_t nodehash_nr_items; > > static error_t read_node (struct node *np); > > @@ -106,6 +107,7 @@ diskfs_cached_lookup (ino_t inum, struct node **npp) > dn->hnext->dn->hprevp = &dn->hnext; > dn->hprevp = &nodehash[INOHASH(inum)]; > nodehash[INOHASH(inum)] = np; > + nodehash_nr_items += 1; > > pthread_spin_unlock (&diskfs_node_refcnt_lock); > > @@ -159,6 +161,7 @@ diskfs_node_norefs (struct node *np) > *np->dn->hprevp = np->dn->hnext; > if (np->dn->hnext) > np->dn->hnext->dn->hprevp = np->dn->hprevp; > + nodehash_nr_items -= 1; > > if (np->dn->dirents) > free (np->dn->dirents); > @@ -549,7 +552,8 @@ error_t > diskfs_node_iterate (error_t (*fun)(struct node *)) > { > error_t err = 0; > - int n, num_nodes = 0; > + int n; > + size_t num_nodes; > struct node *node, **node_list, **p; > > pthread_spin_lock (&diskfs_node_refcnt_lock); > @@ -559,10 +563,7 @@ diskfs_node_iterate (error_t (*fun)(struct node *)) > during processing (normally we delegate access to hash-table with > diskfs_node_refcnt_lock, but we can't hold this while locking the > individual node locks). */ > - > - for (n = 0; n < INOHSZ; n++) > - for (node = nodehash[n]; node; node = node->dn->hnext) > - num_nodes++; > + num_nodes = nodehash_nr_items; > > /* TODO This method doesn't scale beyond a few dozen nodes and should be > replaced. */ > -- > 1.9.2 > -- Samuel CN > J'ai enseigné l'algorythmique. GLG> C'est quoi l'algorythmique ? Une contrebasse programmée en Algol ? -+- in : Guide du Neuneu d'Usenet - Neuneu fait ses gammes. -+-