[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/4] ext2fs: improve diskfs_node_iterate
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 2/4] ext2fs: improve diskfs_node_iterate |
Date: |
Wed, 30 Apr 2014 11:09:30 +0200 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
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. -+-