Diff for /xfs-cmds/xfsprogs/repair/prefetch.c between versions 1.5 and 1.6

version 1.5, 2007/08/15 04:15:18 version 1.6, 2008/06/03 04:24:36
Line 600  pf_queuing_worker( Line 600  pf_queuing_worker(
         ino_tree_node_t         *irec;          ino_tree_node_t         *irec;
         ino_tree_node_t         *cur_irec;          ino_tree_node_t         *cur_irec;
         int                     blks_per_cluster;          int                     blks_per_cluster;
         int                     inos_per_cluster;  
         xfs_agblock_t           bno;          xfs_agblock_t           bno;
         int                     i;          int                     i;
         int                     err;          int                     err;
Line 608  pf_queuing_worker( Line 607  pf_queuing_worker(
         blks_per_cluster =  XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_blocklog;          blks_per_cluster =  XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_blocklog;
         if (blks_per_cluster == 0)          if (blks_per_cluster == 0)
                 blks_per_cluster = 1;                  blks_per_cluster = 1;
         inos_per_cluster = blks_per_cluster * mp->m_sb.sb_inopblock;  
   
         for (i = 0; i < PF_THREAD_COUNT; i++) {          for (i = 0; i < PF_THREAD_COUNT; i++) {
                 err = pthread_create(&args->io_threads[i], NULL,                  err = pthread_create(&args->io_threads[i], NULL,
Line 661  pf_queuing_worker( Line 659  pf_queuing_worker(
                                         (cur_irec->ino_isa_dir != 0) ?                                          (cur_irec->ino_isa_dir != 0) ?
                                                 B_DIR_INODE : B_INODE);                                                  B_DIR_INODE : B_INODE);
                         bno += blks_per_cluster;                          bno += blks_per_cluster;
                         num_inos += inos_per_cluster;                          num_inos += inodes_per_cluster;
                 } while (num_inos < XFS_IALLOC_INODES(mp));                  } while (num_inos < XFS_IALLOC_INODES(mp));
         }          }
   
Line 738  start_inode_prefetch( Line 736  start_inode_prefetch(
         prefetch_args_t         *prev_args)          prefetch_args_t         *prev_args)
 {  {
         prefetch_args_t         *args;          prefetch_args_t         *args;
           long                    max_queue;
   
         if (!do_prefetch || agno >= mp->m_sb.sb_agcount)          if (!do_prefetch || agno >= mp->m_sb.sb_agcount)
                 return NULL;                  return NULL;
Line 757  start_inode_prefetch( Line 756  start_inode_prefetch(
          * and not any other associated metadata like directories           * and not any other associated metadata like directories
          */           */
   
         sem_init(&args->ra_count, 0, libxfs_bcache->c_maxcount / thread_count /          max_queue = libxfs_bcache->c_maxcount / thread_count / 8;
                 (XFS_IALLOC_BLOCKS(mp) / (XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_blocklog)) / 8);          if (XFS_INODE_CLUSTER_SIZE(mp) > mp->m_sb.sb_blocksize)
                   max_queue = max_queue * (XFS_INODE_CLUSTER_SIZE(mp) >>
                                   mp->m_sb.sb_blocklog) / XFS_IALLOC_BLOCKS(mp);
   
           sem_init(&args->ra_count, 0, max_queue);
   
         if (!prev_args) {          if (!prev_args) {
                 if (!pf_create_prefetch_thread(args))                  if (!pf_create_prefetch_thread(args))

Removed from v.1.5  
changed lines
  Added in v.1.6


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>