xfs: devirtualize ->m_dirnameops
[linux-2.6-microblaze.git] / fs / xfs / libxfs / xfs_dir2_sf.c
index a1aed58..41eb8a6 100644 (file)
@@ -266,7 +266,7 @@ xfs_dir2_block_to_sf(
        int                     logflags;       /* inode logging flags */
        struct xfs_dir2_sf_entry *sfep;         /* shortform entry */
        struct xfs_dir2_sf_hdr  *sfp;           /* shortform directory header */
-       unsigned int            offset = dp->d_ops->data_entry_offset;
+       unsigned int            offset = args->geo->data_entry_offset;
        unsigned int            end;
 
        trace_xfs_dir2_block_to_sf(args);
@@ -283,7 +283,7 @@ xfs_dir2_block_to_sf(
         * Loop over the active and unused entries.  Stop when we reach the
         * leaf/tail portion of the block.
         */
-       end = xfs_dir3_data_endp(args->geo, bp->b_addr) - bp->b_addr;
+       end = xfs_dir3_data_end_offset(args->geo, bp->b_addr);
        sfep = xfs_dir2_sf_firstentry(sfp);
        while (offset < end) {
                struct xfs_dir2_data_unused     *dup = bp->b_addr + offset;
@@ -319,11 +319,11 @@ xfs_dir2_block_to_sf(
                        xfs_dir2_sf_put_ino(mp, sfp, sfep,
                                              be64_to_cpu(dep->inumber));
                        xfs_dir2_sf_put_ftype(mp, sfep,
-                                       dp->d_ops->data_get_ftype(dep));
+                                       xfs_dir2_data_get_ftype(mp, dep));
 
                        sfep = xfs_dir2_sf_nextentry(mp, sfp, sfep);
                }
-               offset += dp->d_ops->data_entsize(dep->namelen);
+               offset += xfs_dir2_data_entsize(mp, dep->namelen);
        }
        ASSERT((char *)sfep - (char *)sfp == size);
 
@@ -538,12 +538,12 @@ xfs_dir2_sf_addname_hard(
         * to insert the new entry.
         * If it's going to end up at the end then oldsfep will point there.
         */
-       for (offset = dp->d_ops->data_first_offset,
+       for (offset = args->geo->data_first_offset,
              oldsfep = xfs_dir2_sf_firstentry(oldsfp),
-             add_datasize = dp->d_ops->data_entsize(args->namelen),
+             add_datasize = xfs_dir2_data_entsize(mp, args->namelen),
              eof = (char *)oldsfep == &buf[old_isize];
             !eof;
-            offset = new_offset + dp->d_ops->data_entsize(oldsfep->namelen),
+            offset = new_offset + xfs_dir2_data_entsize(mp, oldsfep->namelen),
              oldsfep = xfs_dir2_sf_nextentry(mp, oldsfp, oldsfep),
              eof = (char *)oldsfep == &buf[old_isize]) {
                new_offset = xfs_dir2_sf_get_offset(oldsfep);
@@ -615,8 +615,8 @@ xfs_dir2_sf_addname_pick(
        int                     used;           /* data bytes used */
 
        sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
-       size = dp->d_ops->data_entsize(args->namelen);
-       offset = dp->d_ops->data_first_offset;
+       size = xfs_dir2_data_entsize(mp, args->namelen);
+       offset = args->geo->data_first_offset;
        sfep = xfs_dir2_sf_firstentry(sfp);
        holefit = 0;
        /*
@@ -628,7 +628,7 @@ xfs_dir2_sf_addname_pick(
                if (!holefit)
                        holefit = offset + size <= xfs_dir2_sf_get_offset(sfep);
                offset = xfs_dir2_sf_get_offset(sfep) +
-                        dp->d_ops->data_entsize(sfep->namelen);
+                        xfs_dir2_data_entsize(mp, sfep->namelen);
                sfep = xfs_dir2_sf_nextentry(mp, sfp, sfep);
        }
        /*
@@ -681,7 +681,7 @@ xfs_dir2_sf_check(
        xfs_dir2_sf_hdr_t       *sfp;           /* shortform structure */
 
        sfp = (xfs_dir2_sf_hdr_t *)dp->i_df.if_u1.if_data;
-       offset = dp->d_ops->data_first_offset;
+       offset = args->geo->data_first_offset;
        ino = xfs_dir2_sf_get_parent_ino(sfp);
        i8count = ino > XFS_DIR2_MAX_SHORT_INUM;
 
@@ -693,7 +693,7 @@ xfs_dir2_sf_check(
                i8count += ino > XFS_DIR2_MAX_SHORT_INUM;
                offset =
                        xfs_dir2_sf_get_offset(sfep) +
-                       dp->d_ops->data_entsize(sfep->namelen);
+                       xfs_dir2_data_entsize(mp, sfep->namelen);
                ASSERT(xfs_dir2_sf_get_ftype(mp, sfep) < XFS_DIR3_FT_MAX);
        }
        ASSERT(i8count == sfp->i8count);
@@ -714,7 +714,6 @@ xfs_dir2_sf_verify(
        struct xfs_dir2_sf_entry        *sfep;
        struct xfs_dir2_sf_entry        *next_sfep;
        char                            *endp;
-       const struct xfs_dir_ops        *dops;
        struct xfs_ifork                *ifp;
        xfs_ino_t                       ino;
        int                             i;
@@ -725,11 +724,6 @@ xfs_dir2_sf_verify(
        uint8_t                         filetype;
 
        ASSERT(ip->i_d.di_format == XFS_DINODE_FMT_LOCAL);
-       /*
-        * xfs_iread calls us before xfs_setup_inode sets up ip->d_ops,
-        * so we can only trust the mountpoint to have the right pointer.
-        */
-       dops = xfs_dir_get_ops(mp, NULL);
 
        ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK);
        sfp = (struct xfs_dir2_sf_hdr *)ifp->if_u1.if_data;
@@ -750,7 +744,7 @@ xfs_dir2_sf_verify(
        error = xfs_dir_ino_validate(mp, ino);
        if (error)
                return __this_address;
-       offset = dops->data_first_offset;
+       offset = mp->m_dir_geo->data_first_offset;
 
        /* Check all reported entries */
        sfep = xfs_dir2_sf_firstentry(sfp);
@@ -793,7 +787,7 @@ xfs_dir2_sf_verify(
                        return __this_address;
 
                offset = xfs_dir2_sf_get_offset(sfep) +
-                               dops->data_entsize(sfep->namelen);
+                               xfs_dir2_data_entsize(mp, sfep->namelen);
 
                sfep = next_sfep;
        }
@@ -920,8 +914,7 @@ xfs_dir2_sf_lookup(
                 * number. If it's the first case-insensitive match, store the
                 * inode number and continue looking for an exact match.
                 */
-               cmp = dp->i_mount->m_dirnameops->compname(args, sfep->name,
-                                                               sfep->namelen);
+               cmp = xfs_dir2_compname(args, sfep->name, sfep->namelen);
                if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) {
                        args->cmpresult = cmp;
                        args->inumber = xfs_dir2_sf_get_ino(mp, sfp, sfep);