]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/xfs/xfs_itable.c
Merge tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[karo-tx-linux.git] / fs / xfs / xfs_itable.c
index 2ea7d402188db8596e4c04a231d29cf0cb506756..b93e14b86754a6cf6b12e4e9952e911e10a008ad 100644 (file)
@@ -43,7 +43,7 @@ xfs_internal_inum(
 {
        return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino ||
                (xfs_sb_version_hasquota(&mp->m_sb) &&
-                (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino)));
+                xfs_is_quota_inode(&mp->m_sb, ino)));
 }
 
 /*
@@ -221,7 +221,6 @@ xfs_bulkstat(
        char                    __user *ubufp;  /* pointer into user's buffer */
        int                     ubelem; /* spaces used in user's buffer */
        int                     ubused; /* bytes used by formatter */
-       xfs_buf_t               *bp;    /* ptr to on-disk inode cluster buf */
 
        /*
         * Get the last inode value, see if there's nothing to do.
@@ -263,7 +262,6 @@ xfs_bulkstat(
        rval = 0;
        while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) {
                cond_resched();
-               bp = NULL;
                error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp);
                if (error) {
                        /*
@@ -383,11 +381,13 @@ 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;
@@ -399,6 +399,7 @@ xfs_bulkstat(
                                                        agbno, nbcluster,
                                                        &xfs_inode_buf_ops);
                                }
+                               blk_finish_plug(&plug);
                                irbp->ir_startino = r.ir_startino;
                                irbp->ir_freecount = r.ir_freecount;
                                irbp->ir_free = r.ir_free;
@@ -433,27 +434,7 @@ xfs_bulkstat(
                                irbp->ir_freecount < XFS_INODES_PER_CHUNK;
                             chunkidx++, clustidx++, agino++) {
                                ASSERT(chunkidx < XFS_INODES_PER_CHUNK);
-                               /*
-                                * Recompute agbno if this is the
-                                * first inode of the cluster.
-                                *
-                                * Careful with clustidx.   There can be
-                                * multiple clusters per chunk, a single
-                                * cluster per chunk or a cluster that has
-                                * inodes represented from several different
-                                * chunks (if blocksize is large).
-                                *
-                                * Because of this, the starting clustidx is
-                                * initialized to zero in this loop but must
-                                * later be reset after reading in the cluster
-                                * buffer.
-                                */
-                               if ((chunkidx & (nicluster - 1)) == 0) {
-                                       agbno = XFS_AGINO_TO_AGBNO(mp,
-                                                       irbp->ir_startino) +
-                                               ((chunkidx & nimask) >>
-                                                mp->m_sb.sb_inopblog);
-                               }
+
                                ino = XFS_AGINO_TO_INO(mp, agno, agino);
                                /*
                                 * Skip if this inode is free.
@@ -499,10 +480,6 @@ xfs_bulkstat(
 
                        cond_resched();
                }
-
-               if (bp)
-                       xfs_buf_relse(bp);
-
                /*
                 * Set up for the next loop iteration.
                 */