Re: [PATCH 6/10] xfs: introduce xfs_bulkstat_ichunk_ra

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/28/13 05:22, Jeff Liu wrote:
From: Jie Liu<jeff.liu@xxxxxxxxxx>

Introduce xfs_bulkstat_ichunk_ra() to loop over all clusters in
the next inode chunk, then performs readahead if there are any
allocated inodes in that cluster.

Refactor xfs_bulkstat() with it.

Signed-off-by: Jie Liu<jeff.liu@xxxxxxxxxx>
---

Had some problems applying this patch.
...

+STATIC void
+xfs_bulkstat_ichunk_ra(
+	struct xfs_mount		*mp,
+	xfs_agnumber_t			agno,
+	struct xfs_inobt_rec_incore	*irec)
+{
+	xfs_agblock_t			agbno;
+	struct blk_plug			plug;
+	int				blks_per_cluster;
+	int				inodes_per_cluster;
+	int				i;	/* inode chunk index */
+
+	agbno = XFS_AGINO_TO_AGBNO(mp, irec->ir_startino);
+	blks_per_cluster = xfs_icluster_size_fsb(mp);
                           ^^^^^
does not exist.


@@ -187,7 +218,6 @@ xfs_bulkstat(
  	char			__user *ubuffer, /* buffer with inode stats */
  	int			*done)	/* 1 if there are more stats to get */
  {
-	xfs_agblock_t		agbno=0;/* allocation group block number */
  	xfs_buf_t		*agbp;	/* agi header buffer */
  	xfs_agi_t		*agi;	/* agi header data */
  	xfs_agino_t		agino;	/* inode # in allocation group */
@@ -206,8 +236,6 @@ xfs_bulkstat(
  	xfs_inobt_rec_incore_t	*irbuf;	/* start of irec buffer */
  	xfs_inobt_rec_incore_t	*irbufend; /* end of good irec buffer entries */
  	xfs_ino_t		lastino; /* last inode number returned */
-	int			blks_per_cluster; /* # of blocks per cluster */
-	int			inodes_per_cluster;/* # of inodes per cluster */
  	int			nirbuf;	/* size of irbuf */
  	int			rval;	/* return value error code */
  	int			tmp;	/* result value from btree calls */
@@ -236,8 +264,6 @@ xfs_bulkstat(
  	*done = 0;
  	fmterror = 0;
  	ubufp = ubuffer;
-	blks_per_cluster = xfs_icluster_size_fsb(mp);
-	inodes_per_cluster = blks_per_cluster<<  mp->m_sb.sb_inopblog;
  	irbuf = kmem_zalloc_greedy(&irbsize, PAGE_SIZE, PAGE_SIZE * 4);
  	if (!irbuf)
  		return ENOMEM;
@@ -345,25 +371,7 @@ xfs_bulkstat(
  			 * Also start read-ahead now for this chunk.
  			 */
  			if (r.ir_freecount<  XFS_INODES_PER_CHUNK) {
-				struct blk_plug	plug;
-				/*
-				 * Loop over all clusters in the next chunk.
-				 * Do a readahead if there are any allocated
-				 * inodes in that cluster.
-				 */
-				blk_start_plug(&plug);
-				agbno = XFS_AGINO_TO_AGBNO(mp, r.ir_startino);
-				for (chunkidx = 0;
-				     chunkidx<  XFS_INODES_PER_CHUNK;
-				     chunkidx += inodes_per_cluster,
-				     agbno += blks_per_cluster) {
-					if (xfs_inobt_maskn(chunkidx,
-					    inodes_per_cluster)&  ~r.ir_free)
-						xfs_btree_reada_bufs(mp, agno,
-							agbno, blks_per_cluster,
-							&xfs_inode_buf_ops);
-				}
-				blk_finish_plug(&plug);
+				xfs_bulkstat_ichunk_ra(mp, agno,&r);
  				irbp->ir_startino = r.ir_startino;
  				irbp->ir_freecount = r.ir_freecount;
  				irbp->ir_free = r.ir_free;

last 3 chunks failed to apply because the sources have nbcluster/nicluster (and nimask) instead of blks_per_cluster/inodes_per_cluster.

--Mark.

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux