diff options
| author | Dave Chinner <dchinner@redhat.com> | 2014-06-06 01:15:59 -0400 |
|---|---|---|
| committer | Dave Chinner <david@fromorbit.com> | 2014-06-06 01:15:59 -0400 |
| commit | 8f66193c89f0b0259db6b27b4df3deb828c294f9 (patch) | |
| tree | 333c24e2c4d901d044e5b2c3c820cb680919f73c | |
| parent | d6cf13051f31bf1a54b65643d0e578b3ca2f0692 (diff) | |
xfs: convert m_dirblksize to xfs_da_geometry
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
| -rw-r--r-- | fs/xfs/xfs_da_btree.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_da_format.c | 36 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2.c | 5 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2.h | 10 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_block.c | 32 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_data.c | 17 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_leaf.c | 35 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_node.c | 42 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_priv.h | 8 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_readdir.c | 11 | ||||
| -rw-r--r-- | fs/xfs/xfs_dir2_sf.c | 14 | ||||
| -rw-r--r-- | fs/xfs/xfs_fsops.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_mount.h | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_trans_resv.c | 2 |
14 files changed, 115 insertions, 106 deletions
diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 70b934392f73..653e23f17f79 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c | |||
| @@ -2169,8 +2169,8 @@ xfs_da3_swap_lastblock( | |||
| 2169 | /* | 2169 | /* |
| 2170 | * Copy the last block into the dead buffer and log it. | 2170 | * Copy the last block into the dead buffer and log it. |
| 2171 | */ | 2171 | */ |
| 2172 | memcpy(dead_buf->b_addr, last_buf->b_addr, mp->m_dirblksize); | 2172 | memcpy(dead_buf->b_addr, last_buf->b_addr, args->geo->blksize); |
| 2173 | xfs_trans_log_buf(tp, dead_buf, 0, mp->m_dirblksize - 1); | 2173 | xfs_trans_log_buf(tp, dead_buf, 0, args->geo->blksize - 1); |
| 2174 | dead_info = dead_buf->b_addr; | 2174 | dead_info = dead_buf->b_addr; |
| 2175 | /* | 2175 | /* |
| 2176 | * Get values from the moved block. | 2176 | * Get values from the moved block. |
diff --git a/fs/xfs/xfs_da_format.c b/fs/xfs/xfs_da_format.c index ac8474e22e2b..c9aee52a37e2 100644 --- a/fs/xfs/xfs_da_format.c +++ b/fs/xfs/xfs_da_format.c | |||
| @@ -427,9 +427,9 @@ xfs_dir3_data_unused_p(struct xfs_dir2_data_hdr *hdr) | |||
| 427 | * Directory Leaf block operations | 427 | * Directory Leaf block operations |
| 428 | */ | 428 | */ |
| 429 | static int | 429 | static int |
| 430 | xfs_dir2_max_leaf_ents(struct xfs_mount *mp) | 430 | xfs_dir2_max_leaf_ents(struct xfs_da_geometry *geo) |
| 431 | { | 431 | { |
| 432 | return (mp->m_dirblksize - sizeof(struct xfs_dir2_leaf_hdr)) / | 432 | return (geo->blksize - sizeof(struct xfs_dir2_leaf_hdr)) / |
| 433 | (uint)sizeof(struct xfs_dir2_leaf_entry); | 433 | (uint)sizeof(struct xfs_dir2_leaf_entry); |
| 434 | } | 434 | } |
| 435 | 435 | ||
| @@ -440,9 +440,9 @@ xfs_dir2_leaf_ents_p(struct xfs_dir2_leaf *lp) | |||
| 440 | } | 440 | } |
| 441 | 441 | ||
| 442 | static int | 442 | static int |
| 443 | xfs_dir3_max_leaf_ents(struct xfs_mount *mp) | 443 | xfs_dir3_max_leaf_ents(struct xfs_da_geometry *geo) |
| 444 | { | 444 | { |
| 445 | return (mp->m_dirblksize - sizeof(struct xfs_dir3_leaf_hdr)) / | 445 | return (geo->blksize - sizeof(struct xfs_dir3_leaf_hdr)) / |
| 446 | (uint)sizeof(struct xfs_dir2_leaf_entry); | 446 | (uint)sizeof(struct xfs_dir2_leaf_entry); |
| 447 | } | 447 | } |
| 448 | 448 | ||
| @@ -593,9 +593,9 @@ xfs_da3_node_hdr_to_disk( | |||
| 593 | * Directory free space block operations | 593 | * Directory free space block operations |
| 594 | */ | 594 | */ |
| 595 | static int | 595 | static int |
| 596 | xfs_dir2_free_max_bests(struct xfs_mount *mp) | 596 | xfs_dir2_free_max_bests(struct xfs_da_geometry *geo) |
| 597 | { | 597 | { |
| 598 | return (mp->m_dirblksize - sizeof(struct xfs_dir2_free_hdr)) / | 598 | return (geo->blksize - sizeof(struct xfs_dir2_free_hdr)) / |
| 599 | sizeof(xfs_dir2_data_off_t); | 599 | sizeof(xfs_dir2_data_off_t); |
| 600 | } | 600 | } |
| 601 | 601 | ||
| @@ -609,25 +609,25 @@ xfs_dir2_free_bests_p(struct xfs_dir2_free *free) | |||
| 609 | * Convert data space db to the corresponding free db. | 609 | * Convert data space db to the corresponding free db. |
| 610 | */ | 610 | */ |
| 611 | static xfs_dir2_db_t | 611 | static xfs_dir2_db_t |
| 612 | xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db) | 612 | xfs_dir2_db_to_fdb(struct xfs_da_geometry *geo, xfs_dir2_db_t db) |
| 613 | { | 613 | { |
| 614 | return xfs_dir2_byte_to_db(mp->m_dir_geo, XFS_DIR2_FREE_OFFSET) + | 614 | return xfs_dir2_byte_to_db(geo, XFS_DIR2_FREE_OFFSET) + |
| 615 | (db / xfs_dir2_free_max_bests(mp)); | 615 | (db / xfs_dir2_free_max_bests(geo)); |
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | /* | 618 | /* |
| 619 | * Convert data space db to the corresponding index in a free db. | 619 | * Convert data space db to the corresponding index in a free db. |
| 620 | */ | 620 | */ |
| 621 | static int | 621 | static int |
| 622 | xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db) | 622 | xfs_dir2_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db) |
| 623 | { | 623 | { |
| 624 | return db % xfs_dir2_free_max_bests(mp); | 624 | return db % xfs_dir2_free_max_bests(geo); |
| 625 | } | 625 | } |
| 626 | 626 | ||
| 627 | static int | 627 | static int |
| 628 | xfs_dir3_free_max_bests(struct xfs_mount *mp) | 628 | xfs_dir3_free_max_bests(struct xfs_da_geometry *geo) |
| 629 | { | 629 | { |
| 630 | return (mp->m_dirblksize - sizeof(struct xfs_dir3_free_hdr)) / | 630 | return (geo->blksize - sizeof(struct xfs_dir3_free_hdr)) / |
| 631 | sizeof(xfs_dir2_data_off_t); | 631 | sizeof(xfs_dir2_data_off_t); |
| 632 | } | 632 | } |
| 633 | 633 | ||
| @@ -641,19 +641,19 @@ xfs_dir3_free_bests_p(struct xfs_dir2_free *free) | |||
| 641 | * Convert data space db to the corresponding free db. | 641 | * Convert data space db to the corresponding free db. |
| 642 | */ | 642 | */ |
| 643 | static xfs_dir2_db_t | 643 | static xfs_dir2_db_t |
| 644 | xfs_dir3_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db) | 644 | xfs_dir3_db_to_fdb(struct xfs_da_geometry *geo, xfs_dir2_db_t db) |
| 645 | { | 645 | { |
| 646 | return xfs_dir2_byte_to_db(mp->m_dir_geo, XFS_DIR2_FREE_OFFSET) + | 646 | return xfs_dir2_byte_to_db(geo, XFS_DIR2_FREE_OFFSET) + |
| 647 | (db / xfs_dir3_free_max_bests(mp)); | 647 | (db / xfs_dir3_free_max_bests(geo)); |
| 648 | } | 648 | } |
| 649 | 649 | ||
| 650 | /* | 650 | /* |
| 651 | * Convert data space db to the corresponding index in a free db. | 651 | * Convert data space db to the corresponding index in a free db. |
| 652 | */ | 652 | */ |
| 653 | static int | 653 | static int |
| 654 | xfs_dir3_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db) | 654 | xfs_dir3_db_to_fdindex(struct xfs_da_geometry *geo, xfs_dir2_db_t db) |
| 655 | { | 655 | { |
| 656 | return db % xfs_dir3_free_max_bests(mp); | 656 | return db % xfs_dir3_free_max_bests(geo); |
| 657 | } | 657 | } |
| 658 | 658 | ||
| 659 | static void | 659 | static void |
diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 3fbf0110eeb3..2685552480f0 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c | |||
| @@ -145,7 +145,6 @@ xfs_da_mount( | |||
| 145 | mp->m_dirnameops = &xfs_default_nameops; | 145 | mp->m_dirnameops = &xfs_default_nameops; |
| 146 | 146 | ||
| 147 | /* XXX: these are to be removed as code is converted to use geo */ | 147 | /* XXX: these are to be removed as code is converted to use geo */ |
| 148 | mp->m_dirblksize = mp->m_dir_geo->blksize; | ||
| 149 | mp->m_dir_node_ents = mp->m_dir_geo->node_ents; | 148 | mp->m_dir_node_ents = mp->m_dir_geo->node_ents; |
| 150 | mp->m_dir_magicpct = mp->m_dir_geo->magicpct; | 149 | mp->m_dir_magicpct = mp->m_dir_geo->magicpct; |
| 151 | mp->m_attr_node_ents = mp->m_attr_geo->node_ents; | 150 | mp->m_attr_node_ents = mp->m_attr_geo->node_ents; |
| @@ -665,8 +664,8 @@ xfs_dir2_isblock( | |||
| 665 | mp = dp->i_mount; | 664 | mp = dp->i_mount; |
| 666 | if ((rval = xfs_bmap_last_offset(dp, &last, XFS_DATA_FORK))) | 665 | if ((rval = xfs_bmap_last_offset(dp, &last, XFS_DATA_FORK))) |
| 667 | return rval; | 666 | return rval; |
| 668 | rval = XFS_FSB_TO_B(mp, last) == mp->m_dirblksize; | 667 | rval = XFS_FSB_TO_B(mp, last) == mp->m_dir_geo->blksize; |
| 669 | ASSERT(rval == 0 || dp->i_d.di_size == mp->m_dirblksize); | 668 | ASSERT(rval == 0 || dp->i_d.di_size == mp->m_dir_geo->blksize); |
| 670 | *vp = rval; | 669 | *vp = rval; |
| 671 | return 0; | 670 | return 0; |
| 672 | } | 671 | } |
diff --git a/fs/xfs/xfs_dir2.h b/fs/xfs/xfs_dir2.h index 7a85b9c1f849..9b709ae3ba1e 100644 --- a/fs/xfs/xfs_dir2.h +++ b/fs/xfs/xfs_dir2.h | |||
| @@ -80,7 +80,7 @@ struct xfs_dir_ops { | |||
| 80 | struct xfs_dir3_icleaf_hdr *from); | 80 | struct xfs_dir3_icleaf_hdr *from); |
| 81 | void (*leaf_hdr_from_disk)(struct xfs_dir3_icleaf_hdr *to, | 81 | void (*leaf_hdr_from_disk)(struct xfs_dir3_icleaf_hdr *to, |
| 82 | struct xfs_dir2_leaf *from); | 82 | struct xfs_dir2_leaf *from); |
| 83 | int (*leaf_max_ents)(struct xfs_mount *mp); | 83 | int (*leaf_max_ents)(struct xfs_da_geometry *geo); |
| 84 | struct xfs_dir2_leaf_entry * | 84 | struct xfs_dir2_leaf_entry * |
| 85 | (*leaf_ents_p)(struct xfs_dir2_leaf *lp); | 85 | (*leaf_ents_p)(struct xfs_dir2_leaf *lp); |
| 86 | 86 | ||
| @@ -97,10 +97,12 @@ struct xfs_dir_ops { | |||
| 97 | struct xfs_dir3_icfree_hdr *from); | 97 | struct xfs_dir3_icfree_hdr *from); |
| 98 | void (*free_hdr_from_disk)(struct xfs_dir3_icfree_hdr *to, | 98 | void (*free_hdr_from_disk)(struct xfs_dir3_icfree_hdr *to, |
| 99 | struct xfs_dir2_free *from); | 99 | struct xfs_dir2_free *from); |
| 100 | int (*free_max_bests)(struct xfs_mount *mp); | 100 | int (*free_max_bests)(struct xfs_da_geometry *geo); |
| 101 | __be16 * (*free_bests_p)(struct xfs_dir2_free *free); | 101 | __be16 * (*free_bests_p)(struct xfs_dir2_free *free); |
| 102 | xfs_dir2_db_t (*db_to_fdb)(struct xfs_mount *mp, xfs_dir2_db_t db); | 102 | xfs_dir2_db_t (*db_to_fdb)(struct xfs_da_geometry *geo, |
| 103 | int (*db_to_fdindex)(struct xfs_mount *mp, xfs_dir2_db_t db); | 103 | xfs_dir2_db_t db); |
| 104 | int (*db_to_fdindex)(struct xfs_da_geometry *geo, | ||
| 105 | xfs_dir2_db_t db); | ||
| 104 | }; | 106 | }; |
| 105 | 107 | ||
| 106 | extern const struct xfs_dir_ops * | 108 | extern const struct xfs_dir_ops * |
diff --git a/fs/xfs/xfs_dir2_block.c b/fs/xfs/xfs_dir2_block.c index d950cde3afeb..4204df966980 100644 --- a/fs/xfs/xfs_dir2_block.c +++ b/fs/xfs/xfs_dir2_block.c | |||
| @@ -377,7 +377,7 @@ xfs_dir2_block_addname( | |||
| 377 | * Set up pointers to parts of the block. | 377 | * Set up pointers to parts of the block. |
| 378 | */ | 378 | */ |
| 379 | hdr = bp->b_addr; | 379 | hdr = bp->b_addr; |
| 380 | btp = xfs_dir2_block_tail_p(mp, hdr); | 380 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 381 | blp = xfs_dir2_block_leaf_p(btp); | 381 | blp = xfs_dir2_block_leaf_p(btp); |
| 382 | 382 | ||
| 383 | /* | 383 | /* |
| @@ -581,7 +581,7 @@ xfs_dir2_block_log_leaf( | |||
| 581 | xfs_dir2_leaf_entry_t *blp; | 581 | xfs_dir2_leaf_entry_t *blp; |
| 582 | xfs_dir2_block_tail_t *btp; | 582 | xfs_dir2_block_tail_t *btp; |
| 583 | 583 | ||
| 584 | btp = xfs_dir2_block_tail_p(tp->t_mountp, hdr); | 584 | btp = xfs_dir2_block_tail_p(tp->t_mountp->m_dir_geo, hdr); |
| 585 | blp = xfs_dir2_block_leaf_p(btp); | 585 | blp = xfs_dir2_block_leaf_p(btp); |
| 586 | xfs_trans_log_buf(tp, bp, (uint)((char *)&blp[first] - (char *)hdr), | 586 | xfs_trans_log_buf(tp, bp, (uint)((char *)&blp[first] - (char *)hdr), |
| 587 | (uint)((char *)&blp[last + 1] - (char *)hdr - 1)); | 587 | (uint)((char *)&blp[last + 1] - (char *)hdr - 1)); |
| @@ -598,7 +598,7 @@ xfs_dir2_block_log_tail( | |||
| 598 | xfs_dir2_data_hdr_t *hdr = bp->b_addr; | 598 | xfs_dir2_data_hdr_t *hdr = bp->b_addr; |
| 599 | xfs_dir2_block_tail_t *btp; | 599 | xfs_dir2_block_tail_t *btp; |
| 600 | 600 | ||
| 601 | btp = xfs_dir2_block_tail_p(tp->t_mountp, hdr); | 601 | btp = xfs_dir2_block_tail_p(tp->t_mountp->m_dir_geo, hdr); |
| 602 | xfs_trans_log_buf(tp, bp, (uint)((char *)btp - (char *)hdr), | 602 | xfs_trans_log_buf(tp, bp, (uint)((char *)btp - (char *)hdr), |
| 603 | (uint)((char *)(btp + 1) - (char *)hdr - 1)); | 603 | (uint)((char *)(btp + 1) - (char *)hdr - 1)); |
| 604 | } | 604 | } |
| @@ -633,7 +633,7 @@ xfs_dir2_block_lookup( | |||
| 633 | mp = dp->i_mount; | 633 | mp = dp->i_mount; |
| 634 | hdr = bp->b_addr; | 634 | hdr = bp->b_addr; |
| 635 | xfs_dir3_data_check(dp, bp); | 635 | xfs_dir3_data_check(dp, bp); |
| 636 | btp = xfs_dir2_block_tail_p(mp, hdr); | 636 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 637 | blp = xfs_dir2_block_leaf_p(btp); | 637 | blp = xfs_dir2_block_leaf_p(btp); |
| 638 | /* | 638 | /* |
| 639 | * Get the offset from the leaf entry, to point to the data. | 639 | * Get the offset from the leaf entry, to point to the data. |
| @@ -686,7 +686,7 @@ xfs_dir2_block_lookup_int( | |||
| 686 | 686 | ||
| 687 | hdr = bp->b_addr; | 687 | hdr = bp->b_addr; |
| 688 | xfs_dir3_data_check(dp, bp); | 688 | xfs_dir3_data_check(dp, bp); |
| 689 | btp = xfs_dir2_block_tail_p(mp, hdr); | 689 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 690 | blp = xfs_dir2_block_leaf_p(btp); | 690 | blp = xfs_dir2_block_leaf_p(btp); |
| 691 | /* | 691 | /* |
| 692 | * Loop doing a binary search for our hash value. | 692 | * Loop doing a binary search for our hash value. |
| @@ -791,7 +791,7 @@ xfs_dir2_block_removename( | |||
| 791 | tp = args->trans; | 791 | tp = args->trans; |
| 792 | mp = dp->i_mount; | 792 | mp = dp->i_mount; |
| 793 | hdr = bp->b_addr; | 793 | hdr = bp->b_addr; |
| 794 | btp = xfs_dir2_block_tail_p(mp, hdr); | 794 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 795 | blp = xfs_dir2_block_leaf_p(btp); | 795 | blp = xfs_dir2_block_leaf_p(btp); |
| 796 | /* | 796 | /* |
| 797 | * Point to the data entry using the leaf entry. | 797 | * Point to the data entry using the leaf entry. |
| @@ -867,7 +867,7 @@ xfs_dir2_block_replace( | |||
| 867 | dp = args->dp; | 867 | dp = args->dp; |
| 868 | mp = dp->i_mount; | 868 | mp = dp->i_mount; |
| 869 | hdr = bp->b_addr; | 869 | hdr = bp->b_addr; |
| 870 | btp = xfs_dir2_block_tail_p(mp, hdr); | 870 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 871 | blp = xfs_dir2_block_leaf_p(btp); | 871 | blp = xfs_dir2_block_leaf_p(btp); |
| 872 | /* | 872 | /* |
| 873 | * Point to the data entry we need to change. | 873 | * Point to the data entry we need to change. |
| @@ -941,7 +941,7 @@ xfs_dir2_leaf_to_block( | |||
| 941 | leaf = lbp->b_addr; | 941 | leaf = lbp->b_addr; |
| 942 | dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf); | 942 | dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf); |
| 943 | ents = dp->d_ops->leaf_ents_p(leaf); | 943 | ents = dp->d_ops->leaf_ents_p(leaf); |
| 944 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 944 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 945 | 945 | ||
| 946 | ASSERT(leafhdr.magic == XFS_DIR2_LEAF1_MAGIC || | 946 | ASSERT(leafhdr.magic == XFS_DIR2_LEAF1_MAGIC || |
| 947 | leafhdr.magic == XFS_DIR3_LEAF1_MAGIC); | 947 | leafhdr.magic == XFS_DIR3_LEAF1_MAGIC); |
| @@ -951,13 +951,13 @@ xfs_dir2_leaf_to_block( | |||
| 951 | * been left behind during no-space-reservation operations. | 951 | * been left behind during no-space-reservation operations. |
| 952 | * These will show up in the leaf bests table. | 952 | * These will show up in the leaf bests table. |
| 953 | */ | 953 | */ |
| 954 | while (dp->i_d.di_size > mp->m_dirblksize) { | 954 | while (dp->i_d.di_size > args->geo->blksize) { |
| 955 | int hdrsz; | 955 | int hdrsz; |
| 956 | 956 | ||
| 957 | hdrsz = dp->d_ops->data_entry_offset; | 957 | hdrsz = dp->d_ops->data_entry_offset; |
| 958 | bestsp = xfs_dir2_leaf_bests_p(ltp); | 958 | bestsp = xfs_dir2_leaf_bests_p(ltp); |
| 959 | if (be16_to_cpu(bestsp[be32_to_cpu(ltp->bestcount) - 1]) == | 959 | if (be16_to_cpu(bestsp[be32_to_cpu(ltp->bestcount) - 1]) == |
| 960 | mp->m_dirblksize - hdrsz) { | 960 | args->geo->blksize - hdrsz) { |
| 961 | if ((error = | 961 | if ((error = |
| 962 | xfs_dir2_leaf_trim_data(args, lbp, | 962 | xfs_dir2_leaf_trim_data(args, lbp, |
| 963 | (xfs_dir2_db_t)(be32_to_cpu(ltp->bestcount) - 1)))) | 963 | (xfs_dir2_db_t)(be32_to_cpu(ltp->bestcount) - 1)))) |
| @@ -985,7 +985,7 @@ xfs_dir2_leaf_to_block( | |||
| 985 | /* | 985 | /* |
| 986 | * Look at the last data entry. | 986 | * Look at the last data entry. |
| 987 | */ | 987 | */ |
| 988 | tagp = (__be16 *)((char *)hdr + mp->m_dirblksize) - 1; | 988 | tagp = (__be16 *)((char *)hdr + args->geo->blksize) - 1; |
| 989 | dup = (xfs_dir2_data_unused_t *)((char *)hdr + be16_to_cpu(*tagp)); | 989 | dup = (xfs_dir2_data_unused_t *)((char *)hdr + be16_to_cpu(*tagp)); |
| 990 | /* | 990 | /* |
| 991 | * If it's not free or is too short we can't do it. | 991 | * If it's not free or is too short we can't do it. |
| @@ -1004,12 +1004,12 @@ xfs_dir2_leaf_to_block( | |||
| 1004 | /* | 1004 | /* |
| 1005 | * Use up the space at the end of the block (blp/btp). | 1005 | * Use up the space at the end of the block (blp/btp). |
| 1006 | */ | 1006 | */ |
| 1007 | xfs_dir2_data_use_free(tp, dp, dbp, dup, mp->m_dirblksize - size, size, | 1007 | xfs_dir2_data_use_free(tp, dp, dbp, dup, args->geo->blksize - size, size, |
| 1008 | &needlog, &needscan); | 1008 | &needlog, &needscan); |
| 1009 | /* | 1009 | /* |
| 1010 | * Initialize the block tail. | 1010 | * Initialize the block tail. |
| 1011 | */ | 1011 | */ |
| 1012 | btp = xfs_dir2_block_tail_p(mp, hdr); | 1012 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 1013 | btp->count = cpu_to_be32(leafhdr.count - leafhdr.stale); | 1013 | btp->count = cpu_to_be32(leafhdr.count - leafhdr.stale); |
| 1014 | btp->stale = 0; | 1014 | btp->stale = 0; |
| 1015 | xfs_dir2_block_log_tail(tp, dbp); | 1015 | xfs_dir2_block_log_tail(tp, dbp); |
| @@ -1143,13 +1143,13 @@ xfs_dir2_sf_to_block( | |||
| 1143 | */ | 1143 | */ |
| 1144 | dup = dp->d_ops->data_unused_p(hdr); | 1144 | dup = dp->d_ops->data_unused_p(hdr); |
| 1145 | needlog = needscan = 0; | 1145 | needlog = needscan = 0; |
| 1146 | xfs_dir2_data_use_free(tp, dp, bp, dup, mp->m_dirblksize - i, i, &needlog, | 1146 | xfs_dir2_data_use_free(tp, dp, bp, dup, args->geo->blksize - i, |
| 1147 | &needscan); | 1147 | i, &needlog, &needscan); |
| 1148 | ASSERT(needscan == 0); | 1148 | ASSERT(needscan == 0); |
| 1149 | /* | 1149 | /* |
| 1150 | * Fill in the tail. | 1150 | * Fill in the tail. |
| 1151 | */ | 1151 | */ |
| 1152 | btp = xfs_dir2_block_tail_p(mp, hdr); | 1152 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 1153 | btp->count = cpu_to_be32(sfp->count + 2); /* ., .. */ | 1153 | btp->count = cpu_to_be32(sfp->count + 2); /* ., .. */ |
| 1154 | btp->stale = 0; | 1154 | btp->stale = 0; |
| 1155 | blp = xfs_dir2_block_leaf_p(btp); | 1155 | blp = xfs_dir2_block_leaf_p(btp); |
diff --git a/fs/xfs/xfs_dir2_data.c b/fs/xfs/xfs_dir2_data.c index 6c23f86e0148..b73d61adf104 100644 --- a/fs/xfs/xfs_dir2_data.c +++ b/fs/xfs/xfs_dir2_data.c | |||
| @@ -80,7 +80,7 @@ __xfs_dir3_data_check( | |||
| 80 | switch (hdr->magic) { | 80 | switch (hdr->magic) { |
| 81 | case cpu_to_be32(XFS_DIR3_BLOCK_MAGIC): | 81 | case cpu_to_be32(XFS_DIR3_BLOCK_MAGIC): |
| 82 | case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC): | 82 | case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC): |
| 83 | btp = xfs_dir2_block_tail_p(mp, hdr); | 83 | btp = xfs_dir2_block_tail_p(geo, hdr); |
| 84 | lep = xfs_dir2_block_leaf_p(btp); | 84 | lep = xfs_dir2_block_leaf_p(btp); |
| 85 | endp = (char *)lep; | 85 | endp = (char *)lep; |
| 86 | 86 | ||
| @@ -96,7 +96,7 @@ __xfs_dir3_data_check( | |||
| 96 | break; | 96 | break; |
| 97 | case cpu_to_be32(XFS_DIR3_DATA_MAGIC): | 97 | case cpu_to_be32(XFS_DIR3_DATA_MAGIC): |
| 98 | case cpu_to_be32(XFS_DIR2_DATA_MAGIC): | 98 | case cpu_to_be32(XFS_DIR2_DATA_MAGIC): |
| 99 | endp = (char *)hdr + mp->m_dirblksize; | 99 | endp = (char *)hdr + geo->blksize; |
| 100 | break; | 100 | break; |
| 101 | default: | 101 | default: |
| 102 | XFS_ERROR_REPORT("Bad Magic", XFS_ERRLEVEL_LOW, mp); | 102 | XFS_ERROR_REPORT("Bad Magic", XFS_ERRLEVEL_LOW, mp); |
| @@ -511,6 +511,7 @@ xfs_dir2_data_freescan( | |||
| 511 | struct xfs_dir2_data_free *bf; | 511 | struct xfs_dir2_data_free *bf; |
| 512 | char *endp; /* end of block's data */ | 512 | char *endp; /* end of block's data */ |
| 513 | char *p; /* current entry pointer */ | 513 | char *p; /* current entry pointer */ |
| 514 | struct xfs_da_geometry *geo = dp->i_mount->m_dir_geo; | ||
| 514 | 515 | ||
| 515 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || | 516 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || |
| 516 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || | 517 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC) || |
| @@ -529,10 +530,10 @@ xfs_dir2_data_freescan( | |||
| 529 | p = (char *)dp->d_ops->data_entry_p(hdr); | 530 | p = (char *)dp->d_ops->data_entry_p(hdr); |
| 530 | if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || | 531 | if (hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || |
| 531 | hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { | 532 | hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)) { |
| 532 | btp = xfs_dir2_block_tail_p(dp->i_mount, hdr); | 533 | btp = xfs_dir2_block_tail_p(geo, hdr); |
| 533 | endp = (char *)xfs_dir2_block_leaf_p(btp); | 534 | endp = (char *)xfs_dir2_block_leaf_p(btp); |
| 534 | } else | 535 | } else |
| 535 | endp = (char *)hdr + dp->i_mount->m_dirblksize; | 536 | endp = (char *)hdr + geo->blksize; |
| 536 | /* | 537 | /* |
| 537 | * Loop over the block's entries. | 538 | * Loop over the block's entries. |
| 538 | */ | 539 | */ |
| @@ -622,7 +623,7 @@ xfs_dir3_data_init( | |||
| 622 | dup = dp->d_ops->data_unused_p(hdr); | 623 | dup = dp->d_ops->data_unused_p(hdr); |
| 623 | dup->freetag = cpu_to_be16(XFS_DIR2_DATA_FREE_TAG); | 624 | dup->freetag = cpu_to_be16(XFS_DIR2_DATA_FREE_TAG); |
| 624 | 625 | ||
| 625 | t = mp->m_dirblksize - (uint)dp->d_ops->data_entry_offset; | 626 | t = args->geo->blksize - (uint)dp->d_ops->data_entry_offset; |
| 626 | bf[0].length = cpu_to_be16(t); | 627 | bf[0].length = cpu_to_be16(t); |
| 627 | dup->length = cpu_to_be16(t); | 628 | dup->length = cpu_to_be16(t); |
| 628 | *xfs_dir2_data_unused_tag_p(dup) = cpu_to_be16((char *)dup - (char *)hdr); | 629 | *xfs_dir2_data_unused_tag_p(dup) = cpu_to_be16((char *)dup - (char *)hdr); |
| @@ -732,22 +733,24 @@ xfs_dir2_data_make_free( | |||
| 732 | xfs_dir2_data_unused_t *postdup; /* unused entry after us */ | 733 | xfs_dir2_data_unused_t *postdup; /* unused entry after us */ |
| 733 | xfs_dir2_data_unused_t *prevdup; /* unused entry before us */ | 734 | xfs_dir2_data_unused_t *prevdup; /* unused entry before us */ |
| 734 | struct xfs_dir2_data_free *bf; | 735 | struct xfs_dir2_data_free *bf; |
| 736 | struct xfs_da_geometry *geo; | ||
| 735 | 737 | ||
| 736 | mp = tp->t_mountp; | 738 | mp = tp->t_mountp; |
| 737 | hdr = bp->b_addr; | 739 | hdr = bp->b_addr; |
| 740 | geo = mp->m_dir_geo; | ||
| 738 | 741 | ||
| 739 | /* | 742 | /* |
| 740 | * Figure out where the end of the data area is. | 743 | * Figure out where the end of the data area is. |
| 741 | */ | 744 | */ |
| 742 | if (hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || | 745 | if (hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || |
| 743 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)) | 746 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)) |
| 744 | endptr = (char *)hdr + mp->m_dirblksize; | 747 | endptr = (char *)hdr + geo->blksize; |
| 745 | else { | 748 | else { |
| 746 | xfs_dir2_block_tail_t *btp; /* block tail */ | 749 | xfs_dir2_block_tail_t *btp; /* block tail */ |
| 747 | 750 | ||
| 748 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || | 751 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_BLOCK_MAGIC) || |
| 749 | hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); | 752 | hdr->magic == cpu_to_be32(XFS_DIR3_BLOCK_MAGIC)); |
| 750 | btp = xfs_dir2_block_tail_p(mp, hdr); | 753 | btp = xfs_dir2_block_tail_p(geo, hdr); |
| 751 | endptr = (char *)xfs_dir2_block_leaf_p(btp); | 754 | endptr = (char *)xfs_dir2_block_leaf_p(btp); |
| 752 | } | 755 | } |
| 753 | /* | 756 | /* |
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index a1f13103a16e..e517bd0544cd 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c | |||
| @@ -92,6 +92,7 @@ xfs_dir3_leaf_check_int( | |||
| 92 | int i; | 92 | int i; |
| 93 | const struct xfs_dir_ops *ops; | 93 | const struct xfs_dir_ops *ops; |
| 94 | struct xfs_dir3_icleaf_hdr leafhdr; | 94 | struct xfs_dir3_icleaf_hdr leafhdr; |
| 95 | struct xfs_da_geometry *geo = mp->m_dir_geo; | ||
| 95 | 96 | ||
| 96 | /* | 97 | /* |
| 97 | * we can be passed a null dp here from a verifier, so we need to go the | 98 | * we can be passed a null dp here from a verifier, so we need to go the |
| @@ -105,14 +106,14 @@ xfs_dir3_leaf_check_int( | |||
| 105 | } | 106 | } |
| 106 | 107 | ||
| 107 | ents = ops->leaf_ents_p(leaf); | 108 | ents = ops->leaf_ents_p(leaf); |
| 108 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 109 | ltp = xfs_dir2_leaf_tail_p(geo, leaf); |
| 109 | 110 | ||
| 110 | /* | 111 | /* |
| 111 | * XXX (dgc): This value is not restrictive enough. | 112 | * XXX (dgc): This value is not restrictive enough. |
| 112 | * Should factor in the size of the bests table as well. | 113 | * Should factor in the size of the bests table as well. |
| 113 | * We can deduce a value for that from di_size. | 114 | * We can deduce a value for that from di_size. |
| 114 | */ | 115 | */ |
| 115 | if (hdr->count > ops->leaf_max_ents(mp)) | 116 | if (hdr->count > ops->leaf_max_ents(geo)) |
| 116 | return false; | 117 | return false; |
| 117 | 118 | ||
| 118 | /* Leaves and bests don't overlap in leaf format. */ | 119 | /* Leaves and bests don't overlap in leaf format. */ |
| @@ -323,7 +324,7 @@ xfs_dir3_leaf_init( | |||
| 323 | if (type == XFS_DIR2_LEAF1_MAGIC) { | 324 | if (type == XFS_DIR2_LEAF1_MAGIC) { |
| 324 | struct xfs_dir2_leaf_tail *ltp; | 325 | struct xfs_dir2_leaf_tail *ltp; |
| 325 | 326 | ||
| 326 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 327 | ltp = xfs_dir2_leaf_tail_p(mp->m_dir_geo, leaf); |
| 327 | ltp->bestcount = 0; | 328 | ltp->bestcount = 0; |
| 328 | bp->b_ops = &xfs_dir3_leaf1_buf_ops; | 329 | bp->b_ops = &xfs_dir3_leaf1_buf_ops; |
| 329 | xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_LEAF1_BUF); | 330 | xfs_trans_buf_set_type(tp, bp, XFS_BLFT_DIR_LEAF1_BUF); |
| @@ -415,7 +416,7 @@ xfs_dir2_block_to_leaf( | |||
| 415 | leaf = lbp->b_addr; | 416 | leaf = lbp->b_addr; |
| 416 | hdr = dbp->b_addr; | 417 | hdr = dbp->b_addr; |
| 417 | xfs_dir3_data_check(dp, dbp); | 418 | xfs_dir3_data_check(dp, dbp); |
| 418 | btp = xfs_dir2_block_tail_p(mp, hdr); | 419 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 419 | blp = xfs_dir2_block_leaf_p(btp); | 420 | blp = xfs_dir2_block_leaf_p(btp); |
| 420 | bf = dp->d_ops->data_bestfree_p(hdr); | 421 | bf = dp->d_ops->data_bestfree_p(hdr); |
| 421 | ents = dp->d_ops->leaf_ents_p(leaf); | 422 | ents = dp->d_ops->leaf_ents_p(leaf); |
| @@ -443,7 +444,7 @@ xfs_dir2_block_to_leaf( | |||
| 443 | */ | 444 | */ |
| 444 | xfs_dir2_data_make_free(tp, dp, dbp, | 445 | xfs_dir2_data_make_free(tp, dp, dbp, |
| 445 | (xfs_dir2_data_aoff_t)((char *)blp - (char *)hdr), | 446 | (xfs_dir2_data_aoff_t)((char *)blp - (char *)hdr), |
| 446 | (xfs_dir2_data_aoff_t)((char *)hdr + mp->m_dirblksize - | 447 | (xfs_dir2_data_aoff_t)((char *)hdr + args->geo->blksize - |
| 447 | (char *)blp), | 448 | (char *)blp), |
| 448 | &needlog, &needscan); | 449 | &needlog, &needscan); |
| 449 | /* | 450 | /* |
| @@ -461,7 +462,7 @@ xfs_dir2_block_to_leaf( | |||
| 461 | /* | 462 | /* |
| 462 | * Set up leaf tail and bests table. | 463 | * Set up leaf tail and bests table. |
| 463 | */ | 464 | */ |
| 464 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 465 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 465 | ltp->bestcount = cpu_to_be32(1); | 466 | ltp->bestcount = cpu_to_be32(1); |
| 466 | bestsp = xfs_dir2_leaf_bests_p(ltp); | 467 | bestsp = xfs_dir2_leaf_bests_p(ltp); |
| 467 | bestsp[0] = bf[0].length; | 468 | bestsp[0] = bf[0].length; |
| @@ -653,7 +654,7 @@ xfs_dir2_leaf_addname( | |||
| 653 | */ | 654 | */ |
| 654 | index = xfs_dir2_leaf_search_hash(args, lbp); | 655 | index = xfs_dir2_leaf_search_hash(args, lbp); |
| 655 | leaf = lbp->b_addr; | 656 | leaf = lbp->b_addr; |
| 656 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 657 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 657 | ents = dp->d_ops->leaf_ents_p(leaf); | 658 | ents = dp->d_ops->leaf_ents_p(leaf); |
| 658 | dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf); | 659 | dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf); |
| 659 | bestsp = xfs_dir2_leaf_bests_p(ltp); | 660 | bestsp = xfs_dir2_leaf_bests_p(ltp); |
| @@ -1066,7 +1067,7 @@ xfs_dir3_leaf_log_bests( | |||
| 1066 | ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || | 1067 | ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAF1_MAGIC) || |
| 1067 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC)); | 1068 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAF1_MAGIC)); |
| 1068 | 1069 | ||
| 1069 | ltp = xfs_dir2_leaf_tail_p(tp->t_mountp, leaf); | 1070 | ltp = xfs_dir2_leaf_tail_p(tp->t_mountp->m_dir_geo, leaf); |
| 1070 | firstb = xfs_dir2_leaf_bests_p(ltp) + first; | 1071 | firstb = xfs_dir2_leaf_bests_p(ltp) + first; |
| 1071 | lastb = xfs_dir2_leaf_bests_p(ltp) + last; | 1072 | lastb = xfs_dir2_leaf_bests_p(ltp) + last; |
| 1072 | xfs_trans_log_buf(tp, bp, (uint)((char *)firstb - (char *)leaf), | 1073 | xfs_trans_log_buf(tp, bp, (uint)((char *)firstb - (char *)leaf), |
| @@ -1138,9 +1139,9 @@ xfs_dir3_leaf_log_tail( | |||
| 1138 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || | 1139 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC) || |
| 1139 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)); | 1140 | leaf->hdr.info.magic == cpu_to_be16(XFS_DIR3_LEAFN_MAGIC)); |
| 1140 | 1141 | ||
| 1141 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 1142 | ltp = xfs_dir2_leaf_tail_p(mp->m_dir_geo, leaf); |
| 1142 | xfs_trans_log_buf(tp, bp, (uint)((char *)ltp - (char *)leaf), | 1143 | xfs_trans_log_buf(tp, bp, (uint)((char *)ltp - (char *)leaf), |
| 1143 | (uint)(mp->m_dirblksize - 1)); | 1144 | (uint)(mp->m_dir_geo->blksize - 1)); |
| 1144 | } | 1145 | } |
| 1145 | 1146 | ||
| 1146 | /* | 1147 | /* |
| @@ -1388,7 +1389,7 @@ xfs_dir2_leaf_removename( | |||
| 1388 | xfs_dir2_dataptr_to_off(args->geo, be32_to_cpu(lep->address))); | 1389 | xfs_dir2_dataptr_to_off(args->geo, be32_to_cpu(lep->address))); |
| 1389 | needscan = needlog = 0; | 1390 | needscan = needlog = 0; |
| 1390 | oldbest = be16_to_cpu(bf[0].length); | 1391 | oldbest = be16_to_cpu(bf[0].length); |
| 1391 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 1392 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 1392 | bestsp = xfs_dir2_leaf_bests_p(ltp); | 1393 | bestsp = xfs_dir2_leaf_bests_p(ltp); |
| 1393 | ASSERT(be16_to_cpu(bestsp[db]) == oldbest); | 1394 | ASSERT(be16_to_cpu(bestsp[db]) == oldbest); |
| 1394 | /* | 1395 | /* |
| @@ -1428,7 +1429,7 @@ xfs_dir2_leaf_removename( | |||
| 1428 | * If the data block is now empty then get rid of the data block. | 1429 | * If the data block is now empty then get rid of the data block. |
| 1429 | */ | 1430 | */ |
| 1430 | if (be16_to_cpu(bf[0].length) == | 1431 | if (be16_to_cpu(bf[0].length) == |
| 1431 | mp->m_dirblksize - dp->d_ops->data_entry_offset) { | 1432 | args->geo->blksize - dp->d_ops->data_entry_offset) { |
| 1432 | ASSERT(db != args->geo->datablk); | 1433 | ASSERT(db != args->geo->datablk); |
| 1433 | if ((error = xfs_dir2_shrink_inode(args, db, dbp))) { | 1434 | if ((error = xfs_dir2_shrink_inode(args, db, dbp))) { |
| 1434 | /* | 1435 | /* |
| @@ -1618,7 +1619,7 @@ xfs_dir2_leaf_trim_data( | |||
| 1618 | return error; | 1619 | return error; |
| 1619 | 1620 | ||
| 1620 | leaf = lbp->b_addr; | 1621 | leaf = lbp->b_addr; |
| 1621 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 1622 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 1622 | 1623 | ||
| 1623 | #ifdef DEBUG | 1624 | #ifdef DEBUG |
| 1624 | { | 1625 | { |
| @@ -1628,7 +1629,7 @@ xfs_dir2_leaf_trim_data( | |||
| 1628 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || | 1629 | ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC) || |
| 1629 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)); | 1630 | hdr->magic == cpu_to_be32(XFS_DIR3_DATA_MAGIC)); |
| 1630 | ASSERT(be16_to_cpu(bf[0].length) == | 1631 | ASSERT(be16_to_cpu(bf[0].length) == |
| 1631 | mp->m_dirblksize - dp->d_ops->data_entry_offset); | 1632 | args->geo->blksize - dp->d_ops->data_entry_offset); |
| 1632 | ASSERT(db == be32_to_cpu(ltp->bestcount) - 1); | 1633 | ASSERT(db == be32_to_cpu(ltp->bestcount) - 1); |
| 1633 | } | 1634 | } |
| 1634 | #endif | 1635 | #endif |
| @@ -1740,7 +1741,7 @@ xfs_dir2_node_to_leaf( | |||
| 1740 | /* | 1741 | /* |
| 1741 | * If it's not the single leaf block, give up. | 1742 | * If it's not the single leaf block, give up. |
| 1742 | */ | 1743 | */ |
| 1743 | if (XFS_FSB_TO_B(mp, fo) > XFS_DIR2_LEAF_OFFSET + mp->m_dirblksize) | 1744 | if (XFS_FSB_TO_B(mp, fo) > XFS_DIR2_LEAF_OFFSET + args->geo->blksize) |
| 1744 | return 0; | 1745 | return 0; |
| 1745 | lbp = state->path.blk[0].bp; | 1746 | lbp = state->path.blk[0].bp; |
| 1746 | leaf = lbp->b_addr; | 1747 | leaf = lbp->b_addr; |
| @@ -1764,7 +1765,7 @@ xfs_dir2_node_to_leaf( | |||
| 1764 | * Now see if the leafn and free data will fit in a leaf1. | 1765 | * Now see if the leafn and free data will fit in a leaf1. |
| 1765 | * If not, release the buffer and give up. | 1766 | * If not, release the buffer and give up. |
| 1766 | */ | 1767 | */ |
| 1767 | if (xfs_dir3_leaf_size(&leafhdr, freehdr.nvalid) > mp->m_dirblksize) { | 1768 | if (xfs_dir3_leaf_size(&leafhdr, freehdr.nvalid) > args->geo->blksize) { |
| 1768 | xfs_trans_brelse(tp, fbp); | 1769 | xfs_trans_brelse(tp, fbp); |
| 1769 | return 0; | 1770 | return 0; |
| 1770 | } | 1771 | } |
| @@ -1784,7 +1785,7 @@ xfs_dir2_node_to_leaf( | |||
| 1784 | /* | 1785 | /* |
| 1785 | * Set up the leaf tail from the freespace block. | 1786 | * Set up the leaf tail from the freespace block. |
| 1786 | */ | 1787 | */ |
| 1787 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 1788 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 1788 | ltp->bestcount = cpu_to_be32(freehdr.nvalid); | 1789 | ltp->bestcount = cpu_to_be32(freehdr.nvalid); |
| 1789 | 1790 | ||
| 1790 | /* | 1791 | /* |
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c index 89777bf63551..ef34c197b62f 100644 --- a/fs/xfs/xfs_dir2_node.c +++ b/fs/xfs/xfs_dir2_node.c | |||
| @@ -327,9 +327,9 @@ xfs_dir2_leaf_to_node( | |||
| 327 | free = fbp->b_addr; | 327 | free = fbp->b_addr; |
| 328 | dp->d_ops->free_hdr_from_disk(&freehdr, free); | 328 | dp->d_ops->free_hdr_from_disk(&freehdr, free); |
| 329 | leaf = lbp->b_addr; | 329 | leaf = lbp->b_addr; |
| 330 | ltp = xfs_dir2_leaf_tail_p(mp, leaf); | 330 | ltp = xfs_dir2_leaf_tail_p(args->geo, leaf); |
| 331 | ASSERT(be32_to_cpu(ltp->bestcount) <= | 331 | ASSERT(be32_to_cpu(ltp->bestcount) <= |
| 332 | (uint)dp->i_d.di_size / mp->m_dirblksize); | 332 | (uint)dp->i_d.di_size / args->geo->blksize); |
| 333 | 333 | ||
| 334 | /* | 334 | /* |
| 335 | * Copy freespace entries from the leaf block to the new block. | 335 | * Copy freespace entries from the leaf block to the new block. |
| @@ -416,7 +416,7 @@ xfs_dir2_leafn_add( | |||
| 416 | * a compact. | 416 | * a compact. |
| 417 | */ | 417 | */ |
| 418 | 418 | ||
| 419 | if (leafhdr.count == dp->d_ops->leaf_max_ents(mp)) { | 419 | if (leafhdr.count == dp->d_ops->leaf_max_ents(args->geo)) { |
| 420 | if (!leafhdr.stale) | 420 | if (!leafhdr.stale) |
| 421 | return XFS_ERROR(ENOSPC); | 421 | return XFS_ERROR(ENOSPC); |
| 422 | compact = leafhdr.stale > 1; | 422 | compact = leafhdr.stale > 1; |
| @@ -472,7 +472,8 @@ xfs_dir2_free_hdr_check( | |||
| 472 | 472 | ||
| 473 | dp->d_ops->free_hdr_from_disk(&hdr, bp->b_addr); | 473 | dp->d_ops->free_hdr_from_disk(&hdr, bp->b_addr); |
| 474 | 474 | ||
| 475 | ASSERT((hdr.firstdb % dp->d_ops->free_max_bests(dp->i_mount)) == 0); | 475 | ASSERT((hdr.firstdb % |
| 476 | dp->d_ops->free_max_bests(dp->i_mount->m_dir_geo)) == 0); | ||
| 476 | ASSERT(hdr.firstdb <= db); | 477 | ASSERT(hdr.firstdb <= db); |
| 477 | ASSERT(db < hdr.firstdb + hdr.nvalid); | 478 | ASSERT(db < hdr.firstdb + hdr.nvalid); |
| 478 | } | 479 | } |
| @@ -595,7 +596,7 @@ xfs_dir2_leafn_lookup_for_addname( | |||
| 595 | * Convert the data block to the free block | 596 | * Convert the data block to the free block |
| 596 | * holding its freespace information. | 597 | * holding its freespace information. |
| 597 | */ | 598 | */ |
| 598 | newfdb = dp->d_ops->db_to_fdb(mp, newdb); | 599 | newfdb = dp->d_ops->db_to_fdb(args->geo, newdb); |
| 599 | /* | 600 | /* |
| 600 | * If it's not the one we have in hand, read it in. | 601 | * If it's not the one we have in hand, read it in. |
| 601 | */ | 602 | */ |
| @@ -619,7 +620,7 @@ xfs_dir2_leafn_lookup_for_addname( | |||
| 619 | /* | 620 | /* |
| 620 | * Get the index for our entry. | 621 | * Get the index for our entry. |
| 621 | */ | 622 | */ |
| 622 | fi = dp->d_ops->db_to_fdindex(mp, curdb); | 623 | fi = dp->d_ops->db_to_fdindex(args->geo, curdb); |
| 623 | /* | 624 | /* |
| 624 | * If it has room, return it. | 625 | * If it has room, return it. |
| 625 | */ | 626 | */ |
| @@ -1251,7 +1252,7 @@ xfs_dir2_leafn_remove( | |||
| 1251 | * Convert the data block number to a free block, | 1252 | * Convert the data block number to a free block, |
| 1252 | * read in the free block. | 1253 | * read in the free block. |
| 1253 | */ | 1254 | */ |
| 1254 | fdb = dp->d_ops->db_to_fdb(mp, db); | 1255 | fdb = dp->d_ops->db_to_fdb(args->geo, db); |
| 1255 | error = xfs_dir2_free_read(tp, dp, | 1256 | error = xfs_dir2_free_read(tp, dp, |
| 1256 | xfs_dir2_db_to_da(args->geo, fdb), | 1257 | xfs_dir2_db_to_da(args->geo, fdb), |
| 1257 | &fbp); | 1258 | &fbp); |
| @@ -1262,7 +1263,7 @@ xfs_dir2_leafn_remove( | |||
| 1262 | { | 1263 | { |
| 1263 | struct xfs_dir3_icfree_hdr freehdr; | 1264 | struct xfs_dir3_icfree_hdr freehdr; |
| 1264 | dp->d_ops->free_hdr_from_disk(&freehdr, free); | 1265 | dp->d_ops->free_hdr_from_disk(&freehdr, free); |
| 1265 | ASSERT(freehdr.firstdb == dp->d_ops->free_max_bests(mp) * | 1266 | ASSERT(freehdr.firstdb == dp->d_ops->free_max_bests(args->geo) * |
| 1266 | (fdb - xfs_dir2_byte_to_db(args->geo, | 1267 | (fdb - xfs_dir2_byte_to_db(args->geo, |
| 1267 | XFS_DIR2_FREE_OFFSET))); | 1268 | XFS_DIR2_FREE_OFFSET))); |
| 1268 | } | 1269 | } |
| @@ -1270,13 +1271,13 @@ xfs_dir2_leafn_remove( | |||
| 1270 | /* | 1271 | /* |
| 1271 | * Calculate which entry we need to fix. | 1272 | * Calculate which entry we need to fix. |
| 1272 | */ | 1273 | */ |
| 1273 | findex = dp->d_ops->db_to_fdindex(mp, db); | 1274 | findex = dp->d_ops->db_to_fdindex(args->geo, db); |
| 1274 | longest = be16_to_cpu(bf[0].length); | 1275 | longest = be16_to_cpu(bf[0].length); |
| 1275 | /* | 1276 | /* |
| 1276 | * If the data block is now empty we can get rid of it | 1277 | * If the data block is now empty we can get rid of it |
| 1277 | * (usually). | 1278 | * (usually). |
| 1278 | */ | 1279 | */ |
| 1279 | if (longest == mp->m_dirblksize - | 1280 | if (longest == args->geo->blksize - |
| 1280 | dp->d_ops->data_entry_offset) { | 1281 | dp->d_ops->data_entry_offset) { |
| 1281 | /* | 1282 | /* |
| 1282 | * Try to punch out the data block. | 1283 | * Try to punch out the data block. |
| @@ -1595,7 +1596,7 @@ xfs_dir2_node_addname( | |||
| 1595 | state = xfs_da_state_alloc(); | 1596 | state = xfs_da_state_alloc(); |
| 1596 | state->args = args; | 1597 | state->args = args; |
| 1597 | state->mp = args->dp->i_mount; | 1598 | state->mp = args->dp->i_mount; |
| 1598 | state->blocksize = state->mp->m_dirblksize; | 1599 | state->blocksize = state->args->geo->blksize; |
| 1599 | state->node_ents = state->mp->m_dir_node_ents; | 1600 | state->node_ents = state->mp->m_dir_node_ents; |
| 1600 | /* | 1601 | /* |
| 1601 | * Look up the name. We're not supposed to find it, but | 1602 | * Look up the name. We're not supposed to find it, but |
| @@ -1843,7 +1844,7 @@ xfs_dir2_node_addname_int( | |||
| 1843 | * Get the freespace block corresponding to the data block | 1844 | * Get the freespace block corresponding to the data block |
| 1844 | * that was just allocated. | 1845 | * that was just allocated. |
| 1845 | */ | 1846 | */ |
| 1846 | fbno = dp->d_ops->db_to_fdb(mp, dbno); | 1847 | fbno = dp->d_ops->db_to_fdb(args->geo, dbno); |
| 1847 | error = xfs_dir2_free_try_read(tp, dp, | 1848 | error = xfs_dir2_free_try_read(tp, dp, |
| 1848 | xfs_dir2_db_to_da(args->geo, fbno), | 1849 | xfs_dir2_db_to_da(args->geo, fbno), |
| 1849 | &fbp); | 1850 | &fbp); |
| @@ -1860,12 +1861,13 @@ xfs_dir2_node_addname_int( | |||
| 1860 | if (error) | 1861 | if (error) |
| 1861 | return error; | 1862 | return error; |
| 1862 | 1863 | ||
| 1863 | if (unlikely(dp->d_ops->db_to_fdb(mp, dbno) != fbno)) { | 1864 | if (dp->d_ops->db_to_fdb(args->geo, dbno) != fbno) { |
| 1864 | xfs_alert(mp, | 1865 | xfs_alert(mp, |
| 1865 | "%s: dir ino %llu needed freesp block %lld for\n" | 1866 | "%s: dir ino %llu needed freesp block %lld for\n" |
| 1866 | " data block %lld, got %lld ifbno %llu lastfbno %d", | 1867 | " data block %lld, got %lld ifbno %llu lastfbno %d", |
| 1867 | __func__, (unsigned long long)dp->i_ino, | 1868 | __func__, (unsigned long long)dp->i_ino, |
| 1868 | (long long)dp->d_ops->db_to_fdb(mp, dbno), | 1869 | (long long)dp->d_ops->db_to_fdb( |
| 1870 | args->geo, dbno), | ||
| 1869 | (long long)dbno, (long long)fbno, | 1871 | (long long)dbno, (long long)fbno, |
| 1870 | (unsigned long long)ifbno, lastfbno); | 1872 | (unsigned long long)ifbno, lastfbno); |
| 1871 | if (fblk) { | 1873 | if (fblk) { |
| @@ -1899,7 +1901,7 @@ xfs_dir2_node_addname_int( | |||
| 1899 | freehdr.firstdb = | 1901 | freehdr.firstdb = |
| 1900 | (fbno - xfs_dir2_byte_to_db(args->geo, | 1902 | (fbno - xfs_dir2_byte_to_db(args->geo, |
| 1901 | XFS_DIR2_FREE_OFFSET)) * | 1903 | XFS_DIR2_FREE_OFFSET)) * |
| 1902 | dp->d_ops->free_max_bests(mp); | 1904 | dp->d_ops->free_max_bests(args->geo); |
| 1903 | } else { | 1905 | } else { |
| 1904 | free = fbp->b_addr; | 1906 | free = fbp->b_addr; |
| 1905 | bests = dp->d_ops->free_bests_p(free); | 1907 | bests = dp->d_ops->free_bests_p(free); |
| @@ -1909,13 +1911,13 @@ xfs_dir2_node_addname_int( | |||
| 1909 | /* | 1911 | /* |
| 1910 | * Set the freespace block index from the data block number. | 1912 | * Set the freespace block index from the data block number. |
| 1911 | */ | 1913 | */ |
| 1912 | findex = dp->d_ops->db_to_fdindex(mp, dbno); | 1914 | findex = dp->d_ops->db_to_fdindex(args->geo, dbno); |
| 1913 | /* | 1915 | /* |
| 1914 | * If it's after the end of the current entries in the | 1916 | * If it's after the end of the current entries in the |
| 1915 | * freespace block, extend that table. | 1917 | * freespace block, extend that table. |
| 1916 | */ | 1918 | */ |
| 1917 | if (findex >= freehdr.nvalid) { | 1919 | if (findex >= freehdr.nvalid) { |
| 1918 | ASSERT(findex < dp->d_ops->free_max_bests(mp)); | 1920 | ASSERT(findex < dp->d_ops->free_max_bests(args->geo)); |
| 1919 | freehdr.nvalid = findex + 1; | 1921 | freehdr.nvalid = findex + 1; |
| 1920 | /* | 1922 | /* |
| 1921 | * Tag new entry so nused will go up. | 1923 | * Tag new entry so nused will go up. |
| @@ -2040,7 +2042,7 @@ xfs_dir2_node_lookup( | |||
| 2040 | state = xfs_da_state_alloc(); | 2042 | state = xfs_da_state_alloc(); |
| 2041 | state->args = args; | 2043 | state->args = args; |
| 2042 | state->mp = args->dp->i_mount; | 2044 | state->mp = args->dp->i_mount; |
| 2043 | state->blocksize = state->mp->m_dirblksize; | 2045 | state->blocksize = args->geo->blksize; |
| 2044 | state->node_ents = state->mp->m_dir_node_ents; | 2046 | state->node_ents = state->mp->m_dir_node_ents; |
| 2045 | /* | 2047 | /* |
| 2046 | * Fill in the path to the entry in the cursor. | 2048 | * Fill in the path to the entry in the cursor. |
| @@ -2095,7 +2097,7 @@ xfs_dir2_node_removename( | |||
| 2095 | state = xfs_da_state_alloc(); | 2097 | state = xfs_da_state_alloc(); |
| 2096 | state->args = args; | 2098 | state->args = args; |
| 2097 | state->mp = args->dp->i_mount; | 2099 | state->mp = args->dp->i_mount; |
| 2098 | state->blocksize = state->mp->m_dirblksize; | 2100 | state->blocksize = args->geo->blksize; |
| 2099 | state->node_ents = state->mp->m_dir_node_ents; | 2101 | state->node_ents = state->mp->m_dir_node_ents; |
| 2100 | 2102 | ||
| 2101 | /* Look up the entry we're deleting, set up the cursor. */ | 2103 | /* Look up the entry we're deleting, set up the cursor. */ |
| @@ -2165,7 +2167,7 @@ xfs_dir2_node_replace( | |||
| 2165 | state = xfs_da_state_alloc(); | 2167 | state = xfs_da_state_alloc(); |
| 2166 | state->args = args; | 2168 | state->args = args; |
| 2167 | state->mp = args->dp->i_mount; | 2169 | state->mp = args->dp->i_mount; |
| 2168 | state->blocksize = state->mp->m_dirblksize; | 2170 | state->blocksize = args->geo->blksize; |
| 2169 | state->node_ents = state->mp->m_dir_node_ents; | 2171 | state->node_ents = state->mp->m_dir_node_ents; |
| 2170 | inum = args->inumber; | 2172 | inum = args->inumber; |
| 2171 | /* | 2173 | /* |
diff --git a/fs/xfs/xfs_dir2_priv.h b/fs/xfs/xfs_dir2_priv.h index 071b685abcbb..436135f28f96 100644 --- a/fs/xfs/xfs_dir2_priv.h +++ b/fs/xfs/xfs_dir2_priv.h | |||
| @@ -140,17 +140,17 @@ xfs_dir2_da_to_byte(struct xfs_da_geometry *geo, xfs_dablk_t da) | |||
| 140 | * Directory tail pointer accessor functions. Based on block geometry. | 140 | * Directory tail pointer accessor functions. Based on block geometry. |
| 141 | */ | 141 | */ |
| 142 | static inline struct xfs_dir2_block_tail * | 142 | static inline struct xfs_dir2_block_tail * |
| 143 | xfs_dir2_block_tail_p(struct xfs_mount *mp, struct xfs_dir2_data_hdr *hdr) | 143 | xfs_dir2_block_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_data_hdr *hdr) |
| 144 | { | 144 | { |
| 145 | return ((struct xfs_dir2_block_tail *) | 145 | return ((struct xfs_dir2_block_tail *) |
| 146 | ((char *)hdr + mp->m_dirblksize)) - 1; | 146 | ((char *)hdr + geo->blksize)) - 1; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | static inline struct xfs_dir2_leaf_tail * | 149 | static inline struct xfs_dir2_leaf_tail * |
| 150 | xfs_dir2_leaf_tail_p(struct xfs_mount *mp, struct xfs_dir2_leaf *lp) | 150 | xfs_dir2_leaf_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_leaf *lp) |
| 151 | { | 151 | { |
| 152 | return (struct xfs_dir2_leaf_tail *) | 152 | return (struct xfs_dir2_leaf_tail *) |
| 153 | ((char *)lp + mp->m_dirblksize - | 153 | ((char *)lp + geo->blksize - |
| 154 | sizeof(struct xfs_dir2_leaf_tail)); | 154 | sizeof(struct xfs_dir2_leaf_tail)); |
| 155 | } | 155 | } |
| 156 | 156 | ||
diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index 8cb5340071e8..fa393d5c2a14 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c | |||
| @@ -216,7 +216,7 @@ xfs_dir2_block_getdents( | |||
| 216 | /* | 216 | /* |
| 217 | * Set up values for the loop. | 217 | * Set up values for the loop. |
| 218 | */ | 218 | */ |
| 219 | btp = xfs_dir2_block_tail_p(mp, hdr); | 219 | btp = xfs_dir2_block_tail_p(geo, hdr); |
| 220 | ptr = (char *)dp->d_ops->data_entry_p(hdr); | 220 | ptr = (char *)dp->d_ops->data_entry_p(hdr); |
| 221 | endptr = (char *)xfs_dir2_block_leaf_p(btp); | 221 | endptr = (char *)xfs_dir2_block_leaf_p(btp); |
| 222 | 222 | ||
| @@ -338,7 +338,7 @@ xfs_dir2_leaf_readbuf( | |||
| 338 | /* | 338 | /* |
| 339 | * Recalculate the readahead blocks wanted. | 339 | * Recalculate the readahead blocks wanted. |
| 340 | */ | 340 | */ |
| 341 | mip->ra_want = howmany(bufsize + mp->m_dirblksize, | 341 | mip->ra_want = howmany(bufsize + geo->blksize, |
| 342 | mp->m_sb.sb_blocksize) - 1; | 342 | mp->m_sb.sb_blocksize) - 1; |
| 343 | ASSERT(mip->ra_want >= 0); | 343 | ASSERT(mip->ra_want >= 0); |
| 344 | 344 | ||
| @@ -526,8 +526,7 @@ xfs_dir2_leaf_getdents( | |||
| 526 | * buffer size, the directory block size, and the filesystem | 526 | * buffer size, the directory block size, and the filesystem |
| 527 | * block size. | 527 | * block size. |
| 528 | */ | 528 | */ |
| 529 | length = howmany(bufsize + mp->m_dirblksize, | 529 | length = howmany(bufsize + geo->blksize, mp->m_sb.sb_blocksize); |
| 530 | mp->m_sb.sb_blocksize); | ||
| 531 | map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + | 530 | map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) + |
| 532 | (length * sizeof(struct xfs_bmbt_irec)), | 531 | (length * sizeof(struct xfs_bmbt_irec)), |
| 533 | KM_SLEEP | KM_NOFS); | 532 | KM_SLEEP | KM_NOFS); |
| @@ -557,7 +556,7 @@ xfs_dir2_leaf_getdents( | |||
| 557 | * If we have no buffer, or we're off the end of the | 556 | * If we have no buffer, or we're off the end of the |
| 558 | * current buffer, need to get another one. | 557 | * current buffer, need to get another one. |
| 559 | */ | 558 | */ |
| 560 | if (!bp || ptr >= (char *)bp->b_addr + mp->m_dirblksize) { | 559 | if (!bp || ptr >= (char *)bp->b_addr + geo->blksize) { |
| 561 | 560 | ||
| 562 | error = xfs_dir2_leaf_readbuf(dp, bufsize, map_info, | 561 | error = xfs_dir2_leaf_readbuf(dp, bufsize, map_info, |
| 563 | &curoff, &bp); | 562 | &curoff, &bp); |
| @@ -618,7 +617,7 @@ xfs_dir2_leaf_getdents( | |||
| 618 | xfs_dir2_db_off_to_byte(geo, | 617 | xfs_dir2_db_off_to_byte(geo, |
| 619 | xfs_dir2_byte_to_db(geo, curoff), | 618 | xfs_dir2_byte_to_db(geo, curoff), |
| 620 | (char *)ptr - (char *)hdr); | 619 | (char *)ptr - (char *)hdr); |
| 621 | if (ptr >= (char *)hdr + mp->m_dirblksize) { | 620 | if (ptr >= (char *)hdr + geo->blksize) { |
| 622 | continue; | 621 | continue; |
| 623 | } | 622 | } |
| 624 | } | 623 | } |
diff --git a/fs/xfs/xfs_dir2_sf.c b/fs/xfs/xfs_dir2_sf.c index 10f4c2a23bc4..53c3be619db5 100644 --- a/fs/xfs/xfs_dir2_sf.c +++ b/fs/xfs/xfs_dir2_sf.c | |||
| @@ -82,8 +82,10 @@ xfs_dir2_block_sfsize( | |||
| 82 | xfs_ino_t parent = 0; /* parent inode number */ | 82 | xfs_ino_t parent = 0; /* parent inode number */ |
| 83 | int size=0; /* total computed size */ | 83 | int size=0; /* total computed size */ |
| 84 | int has_ftype; | 84 | int has_ftype; |
| 85 | struct xfs_da_geometry *geo; | ||
| 85 | 86 | ||
| 86 | mp = dp->i_mount; | 87 | mp = dp->i_mount; |
| 88 | geo = mp->m_dir_geo; | ||
| 87 | 89 | ||
| 88 | /* | 90 | /* |
| 89 | * if there is a filetype field, add the extra byte to the namelen | 91 | * if there is a filetype field, add the extra byte to the namelen |
| @@ -92,7 +94,7 @@ xfs_dir2_block_sfsize( | |||
| 92 | has_ftype = xfs_sb_version_hasftype(&mp->m_sb) ? 1 : 0; | 94 | has_ftype = xfs_sb_version_hasftype(&mp->m_sb) ? 1 : 0; |
| 93 | 95 | ||
| 94 | count = i8count = namelen = 0; | 96 | count = i8count = namelen = 0; |
| 95 | btp = xfs_dir2_block_tail_p(mp, hdr); | 97 | btp = xfs_dir2_block_tail_p(geo, hdr); |
| 96 | blp = xfs_dir2_block_leaf_p(btp); | 98 | blp = xfs_dir2_block_leaf_p(btp); |
| 97 | 99 | ||
| 98 | /* | 100 | /* |
| @@ -105,7 +107,7 @@ xfs_dir2_block_sfsize( | |||
| 105 | * Calculate the pointer to the entry at hand. | 107 | * Calculate the pointer to the entry at hand. |
| 106 | */ | 108 | */ |
| 107 | dep = (xfs_dir2_data_entry_t *)((char *)hdr + | 109 | dep = (xfs_dir2_data_entry_t *)((char *)hdr + |
| 108 | xfs_dir2_dataptr_to_off(mp->m_dir_geo, addr)); | 110 | xfs_dir2_dataptr_to_off(geo, addr)); |
| 109 | /* | 111 | /* |
| 110 | * Detect . and .., so we can special-case them. | 112 | * Detect . and .., so we can special-case them. |
| 111 | * . is not included in sf directories. | 113 | * . is not included in sf directories. |
| @@ -195,7 +197,7 @@ xfs_dir2_block_to_sf( | |||
| 195 | /* | 197 | /* |
| 196 | * Set up to loop over the block's entries. | 198 | * Set up to loop over the block's entries. |
| 197 | */ | 199 | */ |
| 198 | btp = xfs_dir2_block_tail_p(mp, hdr); | 200 | btp = xfs_dir2_block_tail_p(args->geo, hdr); |
| 199 | ptr = (char *)dp->d_ops->data_entry_p(hdr); | 201 | ptr = (char *)dp->d_ops->data_entry_p(hdr); |
| 200 | endptr = (char *)xfs_dir2_block_leaf_p(btp); | 202 | endptr = (char *)xfs_dir2_block_leaf_p(btp); |
| 201 | sfep = xfs_dir2_sf_firstentry(sfp); | 203 | sfep = xfs_dir2_sf_firstentry(sfp); |
| @@ -586,7 +588,7 @@ xfs_dir2_sf_addname_pick( | |||
| 586 | * we'll go back, convert to block, then try the insert and convert | 588 | * we'll go back, convert to block, then try the insert and convert |
| 587 | * to leaf. | 589 | * to leaf. |
| 588 | */ | 590 | */ |
| 589 | if (used + (holefit ? 0 : size) > mp->m_dirblksize) | 591 | if (used + (holefit ? 0 : size) > args->geo->blksize) |
| 590 | return 0; | 592 | return 0; |
| 591 | /* | 593 | /* |
| 592 | * If changing the inode number size, do it the hard way. | 594 | * If changing the inode number size, do it the hard way. |
| @@ -601,7 +603,7 @@ xfs_dir2_sf_addname_pick( | |||
| 601 | /* | 603 | /* |
| 602 | * If it won't fit at the end then do it the hard way (use the hole). | 604 | * If it won't fit at the end then do it the hard way (use the hole). |
| 603 | */ | 605 | */ |
| 604 | if (used + size > mp->m_dirblksize) | 606 | if (used + size > args->geo->blksize) |
| 605 | return 2; | 607 | return 2; |
| 606 | /* | 608 | /* |
| 607 | * Do it the easy way. | 609 | * Do it the easy way. |
| @@ -652,7 +654,7 @@ xfs_dir2_sf_check( | |||
| 652 | ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size); | 654 | ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size); |
| 653 | ASSERT(offset + | 655 | ASSERT(offset + |
| 654 | (sfp->count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) + | 656 | (sfp->count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) + |
| 655 | (uint)sizeof(xfs_dir2_block_tail_t) <= mp->m_dirblksize); | 657 | (uint)sizeof(xfs_dir2_block_tail_t) <= args->geo->blksize); |
| 656 | } | 658 | } |
| 657 | #endif /* DEBUG */ | 659 | #endif /* DEBUG */ |
| 658 | 660 | ||
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 3445ead7c1fc..a8cbcf06e792 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #include "xfs_sb.h" | 24 | #include "xfs_sb.h" |
| 25 | #include "xfs_ag.h" | 25 | #include "xfs_ag.h" |
| 26 | #include "xfs_mount.h" | 26 | #include "xfs_mount.h" |
| 27 | #include "xfs_da_format.h" | ||
| 28 | #include "xfs_da_btree.h" | ||
| 27 | #include "xfs_inode.h" | 29 | #include "xfs_inode.h" |
| 28 | #include "xfs_trans.h" | 30 | #include "xfs_trans.h" |
| 29 | #include "xfs_inode_item.h" | 31 | #include "xfs_inode_item.h" |
| @@ -110,7 +112,7 @@ xfs_fs_geometry( | |||
| 110 | geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? | 112 | geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? |
| 111 | mp->m_sb.sb_logsectsize : BBSIZE; | 113 | mp->m_sb.sb_logsectsize : BBSIZE; |
| 112 | geo->rtsectsize = mp->m_sb.sb_blocksize; | 114 | geo->rtsectsize = mp->m_sb.sb_blocksize; |
| 113 | geo->dirblocksize = mp->m_dirblksize; | 115 | geo->dirblocksize = mp->m_dir_geo->blksize; |
| 114 | } | 116 | } |
| 115 | if (new_version >= 4) { | 117 | if (new_version >= 4) { |
| 116 | geo->flags |= | 118 | geo->flags |= |
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index a23e7b63d420..4e3f6cebebc6 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
| @@ -154,7 +154,6 @@ typedef struct xfs_mount { | |||
| 154 | const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ | 154 | const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ |
| 155 | const struct xfs_dir_ops *m_dir_inode_ops; /* vector of dir inode ops */ | 155 | const struct xfs_dir_ops *m_dir_inode_ops; /* vector of dir inode ops */ |
| 156 | const struct xfs_dir_ops *m_nondir_inode_ops; /* !dir inode ops */ | 156 | const struct xfs_dir_ops *m_nondir_inode_ops; /* !dir inode ops */ |
| 157 | int m_dirblksize; /* directory block sz--bytes */ | ||
| 158 | uint m_chsize; /* size of next field */ | 157 | uint m_chsize; /* size of next field */ |
| 159 | atomic_t m_active_trans; /* number trans frozen */ | 158 | atomic_t m_active_trans; /* number trans frozen */ |
| 160 | #ifdef HAVE_PERCPU_SB | 159 | #ifdef HAVE_PERCPU_SB |
diff --git a/fs/xfs/xfs_trans_resv.c b/fs/xfs/xfs_trans_resv.c index 63a42a180a67..f2bda7c76b8a 100644 --- a/fs/xfs/xfs_trans_resv.c +++ b/fs/xfs/xfs_trans_resv.c | |||
| @@ -610,7 +610,7 @@ xfs_calc_addafork_reservation( | |||
| 610 | return XFS_DQUOT_LOGRES(mp) + | 610 | return XFS_DQUOT_LOGRES(mp) + |
| 611 | xfs_calc_inode_res(mp, 1) + | 611 | xfs_calc_inode_res(mp, 1) + |
| 612 | xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + | 612 | xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) + |
| 613 | xfs_calc_buf_res(1, mp->m_dirblksize) + | 613 | xfs_calc_buf_res(1, mp->m_dir_geo->blksize) + |
| 614 | xfs_calc_buf_res(XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK) + 1, | 614 | xfs_calc_buf_res(XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK) + 1, |
| 615 | XFS_FSB_TO_B(mp, 1)) + | 615 | XFS_FSB_TO_B(mp, 1)) + |
| 616 | xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), | 616 | xfs_calc_buf_res(XFS_ALLOCFREE_LOG_COUNT(mp, 1), |
