]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/xfs/xfs_dir2.c
Merge remote-tracking branches 'regulator/topic/88pm800', 'regulator/topic/ab8500...
[karo-tx-linux.git] / fs / xfs / xfs_dir2.c
index bf0d6dd472426484b2b8bf7c4c36174b5134001e..79670cda48ae4797f902af912d59d105215885bb 100644 (file)
@@ -93,7 +93,7 @@ xfs_da_mount(
        int                     nodehdr_size;
 
 
-       ASSERT(xfs_sb_version_hasdirv2(&mp->m_sb));
+       ASSERT(mp->m_sb.sb_versionnum & XFS_SB_VERSION_DIRV2BIT);
        ASSERT((1 << (mp->m_sb.sb_blocklog + mp->m_sb.sb_dirblklog)) <=
               XFS_MAX_BLOCKSIZE);
 
@@ -117,9 +117,14 @@ xfs_da_mount(
        dageo->fsblog = mp->m_sb.sb_blocklog;
        dageo->blksize = 1 << dageo->blklog;
        dageo->fsbcount = 1 << mp->m_sb.sb_dirblklog;
-       dageo->datablk = xfs_dir2_byte_to_da(mp, XFS_DIR2_DATA_OFFSET);
-       dageo->leafblk = xfs_dir2_byte_to_da(mp, XFS_DIR2_LEAF_OFFSET);
-       dageo->freeblk = xfs_dir2_byte_to_da(mp, XFS_DIR2_FREE_OFFSET);
+
+       /*
+        * Now we've set up the block conversion variables, we can calculate the
+        * segment block constants using the geometry structure.
+        */
+       dageo->datablk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_DATA_OFFSET);
+       dageo->leafblk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_LEAF_OFFSET);
+       dageo->freeblk = xfs_dir2_byte_to_da(dageo, XFS_DIR2_FREE_OFFSET);
        dageo->node_ents = (dageo->blksize - nodehdr_size) /
                                (uint)sizeof(xfs_da_node_entry_t);
        dageo->magicpct = (dageo->blksize * 37) / 100;
@@ -139,16 +144,6 @@ xfs_da_mount(
        else
                mp->m_dirnameops = &xfs_default_nameops;
 
-       /* XXX: these are to be removed as code is converted to use geo */
-       mp->m_dirblksize = mp->m_dir_geo->blksize;
-       mp->m_dirblkfsbs = mp->m_dir_geo->fsbcount;
-       mp->m_dirdatablk = mp->m_dir_geo->datablk;
-       mp->m_dirleafblk = mp->m_dir_geo->leafblk;
-       mp->m_dirfreeblk = mp->m_dir_geo->freeblk;
-       mp->m_dir_node_ents = mp->m_dir_geo->node_ents;
-       mp->m_dir_magicpct = mp->m_dir_geo->magicpct;
-       mp->m_attr_node_ents = mp->m_attr_geo->node_ents;
-       mp->m_attr_magicpct = mp->m_attr_geo->magicpct;
        return 0;
 }
 
@@ -287,7 +282,7 @@ xfs_dir_createname(
                goto out_free;
        }
 
-       rval = xfs_dir2_isblock(dp, &v);
+       rval = xfs_dir2_isblock(args, &v);
        if (rval)
                goto out_free;
        if (v) {
@@ -295,7 +290,7 @@ xfs_dir_createname(
                goto out_free;
        }
 
-       rval = xfs_dir2_isleaf(dp, &v);
+       rval = xfs_dir2_isleaf(args, &v);
        if (rval)
                goto out_free;
        if (v)
@@ -380,7 +375,7 @@ xfs_dir_lookup(
                goto out_check_rval;
        }
 
-       rval = xfs_dir2_isblock(dp, &v);
+       rval = xfs_dir2_isblock(args, &v);
        if (rval)
                goto out_free;
        if (v) {
@@ -388,7 +383,7 @@ xfs_dir_lookup(
                goto out_check_rval;
        }
 
-       rval = xfs_dir2_isleaf(dp, &v);
+       rval = xfs_dir2_isleaf(args, &v);
        if (rval)
                goto out_free;
        if (v)
@@ -453,7 +448,7 @@ xfs_dir_removename(
                goto out_free;
        }
 
-       rval = xfs_dir2_isblock(dp, &v);
+       rval = xfs_dir2_isblock(args, &v);
        if (rval)
                goto out_free;
        if (v) {
@@ -461,7 +456,7 @@ xfs_dir_removename(
                goto out_free;
        }
 
-       rval = xfs_dir2_isleaf(dp, &v);
+       rval = xfs_dir2_isleaf(args, &v);
        if (rval)
                goto out_free;
        if (v)
@@ -518,7 +513,7 @@ xfs_dir_replace(
                goto out_free;
        }
 
-       rval = xfs_dir2_isblock(dp, &v);
+       rval = xfs_dir2_isblock(args, &v);
        if (rval)
                goto out_free;
        if (v) {
@@ -526,7 +521,7 @@ xfs_dir_replace(
                goto out_free;
        }
 
-       rval = xfs_dir2_isleaf(dp, &v);
+       rval = xfs_dir2_isleaf(args, &v);
        if (rval)
                goto out_free;
        if (v)
@@ -578,7 +573,7 @@ xfs_dir_canenter(
                goto out_free;
        }
 
-       rval = xfs_dir2_isblock(dp, &v);
+       rval = xfs_dir2_isblock(args, &v);
        if (rval)
                goto out_free;
        if (v) {
@@ -586,7 +581,7 @@ xfs_dir_canenter(
                goto out_free;
        }
 
-       rval = xfs_dir2_isleaf(dp, &v);
+       rval = xfs_dir2_isleaf(args, &v);
        if (rval)
                goto out_free;
        if (v)
@@ -626,13 +621,13 @@ xfs_dir2_grow_inode(
         * Set lowest possible block in the space requested.
         */
        bno = XFS_B_TO_FSBT(mp, space * XFS_DIR2_SPACE_SIZE);
-       count = mp->m_dirblkfsbs;
+       count = args->geo->fsbcount;
 
        error = xfs_da_grow_inode_int(args, &bno, count);
        if (error)
                return error;
 
-       *dbp = xfs_dir2_da_to_db(mp, (xfs_dablk_t)bno);
+       *dbp = xfs_dir2_da_to_db(args->geo, (xfs_dablk_t)bno);
 
        /*
         * Update file's size if this is the data space and it grew.
@@ -654,18 +649,16 @@ xfs_dir2_grow_inode(
  */
 int
 xfs_dir2_isblock(
-       xfs_inode_t     *dp,
-       int             *vp)            /* out: 1 is block, 0 is not block */
+       struct xfs_da_args      *args,
+       int                     *vp)    /* out: 1 is block, 0 is not block */
 {
-       xfs_fileoff_t   last;           /* last file offset */
-       xfs_mount_t     *mp;
-       int             rval;
+       xfs_fileoff_t           last;   /* last file offset */
+       int                     rval;
 
-       mp = dp->i_mount;
-       if ((rval = xfs_bmap_last_offset(dp, &last, XFS_DATA_FORK)))
+       if ((rval = xfs_bmap_last_offset(args->dp, &last, XFS_DATA_FORK)))
                return rval;
-       rval = XFS_FSB_TO_B(mp, last) == mp->m_dirblksize;
-       ASSERT(rval == 0 || dp->i_d.di_size == mp->m_dirblksize);
+       rval = XFS_FSB_TO_B(args->dp->i_mount, last) == args->geo->blksize;
+       ASSERT(rval == 0 || args->dp->i_d.di_size == args->geo->blksize);
        *vp = rval;
        return 0;
 }
@@ -675,17 +668,15 @@ xfs_dir2_isblock(
  */
 int
 xfs_dir2_isleaf(
-       xfs_inode_t     *dp,
-       int             *vp)            /* out: 1 is leaf, 0 is not leaf */
+       struct xfs_da_args      *args,
+       int                     *vp)    /* out: 1 is block, 0 is not block */
 {
-       xfs_fileoff_t   last;           /* last file offset */
-       xfs_mount_t     *mp;
-       int             rval;
+       xfs_fileoff_t           last;   /* last file offset */
+       int                     rval;
 
-       mp = dp->i_mount;
-       if ((rval = xfs_bmap_last_offset(dp, &last, XFS_DATA_FORK)))
+       if ((rval = xfs_bmap_last_offset(args->dp, &last, XFS_DATA_FORK)))
                return rval;
-       *vp = last == mp->m_dirleafblk + (1 << mp->m_sb.sb_dirblklog);
+       *vp = last == args->geo->leafblk + args->geo->fsbcount;
        return 0;
 }
 
@@ -713,11 +704,11 @@ xfs_dir2_shrink_inode(
        dp = args->dp;
        mp = dp->i_mount;
        tp = args->trans;
-       da = xfs_dir2_db_to_da(mp, db);
+       da = xfs_dir2_db_to_da(args->geo, db);
        /*
         * Unmap the fsblock(s).
         */
-       if ((error = xfs_bunmapi(tp, dp, da, mp->m_dirblkfsbs,
+       if ((error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount,
                        XFS_BMAPI_METADATA, 0, args->firstblock, args->flist,
                        &done))) {
                /*
@@ -744,12 +735,12 @@ xfs_dir2_shrink_inode(
        /*
         * If it's not a data block, we're done.
         */
-       if (db >= XFS_DIR2_LEAF_FIRSTDB(mp))
+       if (db >= xfs_dir2_byte_to_db(args->geo, XFS_DIR2_LEAF_OFFSET))
                return 0;
        /*
         * If the block isn't the last one in the directory, we're done.
         */
-       if (dp->i_d.di_size > xfs_dir2_db_off_to_byte(mp, db + 1, 0))
+       if (dp->i_d.di_size > xfs_dir2_db_off_to_byte(args->geo, db + 1, 0))
                return 0;
        bno = da;
        if ((error = xfs_bmap_last_before(tp, dp, &bno, XFS_DATA_FORK))) {
@@ -758,7 +749,7 @@ xfs_dir2_shrink_inode(
                 */
                return error;
        }
-       if (db == mp->m_dirdatablk)
+       if (db == args->geo->datablk)
                ASSERT(bno == 0);
        else
                ASSERT(bno > 0);