From: Nathan Scott Date: Thu, 17 Jun 2004 07:15:04 +0000 (+0000) Subject: Rework maximum transaction reservation calcs to be mkfs runtime, fix size check for... X-Git-Tag: v2.7.0~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfd4ac078f53434e87698d4ff2e5aba0092208f3;p=thirdparty%2Fxfsprogs-dev.git Rework maximum transaction reservation calcs to be mkfs runtime, fix size check for stripe size aligned log. --- diff --git a/mkfs/Makefile b/mkfs/Makefile index 961256377..a720cb352 100644 --- a/mkfs/Makefile +++ b/mkfs/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of version 2 of the GNU General Public License as @@ -34,30 +34,22 @@ TOPDIR = .. include $(TOPDIR)/include/builddefs LTCOMMAND = mkfs.xfs -MAXTRRES = maxtrres FSTYP = fstyp HFILES = xfs_mkfs.h -CFILES = trtab.c proto.c xfs_mkfs.c +CFILES = maxtrres.c proto.c xfs_mkfs.c LLDLIBS = $(LIBXFS) $(LIBUUID) $(LIBDISK) LTDEPENDENCIES = $(LIBXFS) $(LIBDISK) LLDFLAGS = -static -MAXTRLIBS = $(LIBXFS) $(LIBUUID) $(PLDLIBS) -LSRCFILES = $(MAXTRRES).c $(FSTYP).c -LDIRT = $(MAXTRRES) $(MAXTRRES).o $(MAXTRRES).h $(FSTYP) +LSRCFILES = $(FSTYP).c +LDIRT = $(FSTYP) -default: $(MAXTRRES).h $(FSTYP) $(LTCOMMAND) +default: $(FSTYP) $(LTCOMMAND) include $(BUILDRULES) -$(MAXTRRES): $(MAXTRRES).o - $(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(MAXTRLIBS) - -$(MAXTRRES).h: $(MAXTRRES) - $(LTEXEC) ./$(MAXTRRES) > $@ || ( rm -f $@ && exit 1 ) - $(FSTYP): $(LTLINK) $@.c -o $@ $(CFLAGS) $(LDFLAGS) $(LIBDISK) $(PLDLIBS) diff --git a/mkfs/maxtrres.c b/mkfs/maxtrres.c index db916bf81..bd797d606 100644 --- a/mkfs/maxtrres.c +++ b/mkfs/maxtrres.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2001,2004 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -31,72 +31,35 @@ */ /* - * maxtrres + * maxtrres.c * - * Compute the maximum transaction reservation for every legal - * combination of block size, inode size, directory version, - * and directory block size. - * Generates a table compiled into mkfs, to control the default - * and minimum log sizes. + * Compute the maximum transaction reservation for a legal combination + * of sector size, block size, inode size, directory version, and + * directory block size. */ #include #include "xfs_mkfs.h" -xfs_trans_reservations_t tr_count = { - XFS_WRITE_LOG_COUNT, /* extent alloc trans */ - XFS_ITRUNCATE_LOG_COUNT, /* truncate trans */ - XFS_RENAME_LOG_COUNT, /* rename trans */ - XFS_LINK_LOG_COUNT, /* link trans */ - XFS_REMOVE_LOG_COUNT, /* unlink trans */ - XFS_SYMLINK_LOG_COUNT, /* symlink trans */ - XFS_CREATE_LOG_COUNT, /* create trans */ - XFS_MKDIR_LOG_COUNT, /* mkdir trans */ - XFS_DEFAULT_LOG_COUNT, /* inode free trans */ - XFS_DEFAULT_LOG_COUNT, /* inode update trans */ - XFS_DEFAULT_LOG_COUNT, /* fs data section grow trans */ - XFS_DEFAULT_LOG_COUNT, /* sync write inode trans */ - XFS_ADDAFORK_LOG_COUNT, /* cvt inode to attributed trans */ - XFS_DEFAULT_LOG_COUNT, /* write setuid/setgid file */ - XFS_ATTRINVAL_LOG_COUNT, /* attr fork buffer invalidation */ - XFS_ATTRSET_LOG_COUNT, /* set/create an attribute */ - XFS_ATTRRM_LOG_COUNT, /* remove an attribute */ - XFS_DEFAULT_LOG_COUNT, /* clear bad agi unlinked ino bucket */ - XFS_DEFAULT_PERM_LOG_COUNT, /* grow realtime allocations */ - XFS_DEFAULT_LOG_COUNT, /* grow realtime zeroing */ - XFS_DEFAULT_LOG_COUNT, /* grow realtime freeing */ -}; - -static int -max_trans_res( - xfs_mount_t *mp, - int *mul) +static void +max_attrset_trans_res_adjust( + xfs_mount_t *mp) { - uint *p; - uint *q; - int rval; - xfs_trans_reservations_t *tr; xfs_da_args_t args; int local; int size; int nblks; int res; - nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); - /* * Fill in the arg structure for this request. + * This is the maximal sized extended attribute name + * and value (64k) combination, to calculate the + * largest reservation size needed. */ - bzero(&args, sizeof(args)); - args.name = NULL; + memset(&args, 0, sizeof(args)); args.namelen = MAXNAMELEN; - args.value = NULL; args.valuelen = 65536; - args.flags = 0; - args.hashval = 0; - args.dp = NULL; - args.firstblock = NULL; - args.flist = NULL; args.whichfork = XFS_ATTR_FORK; args.oknoent = 1; @@ -106,100 +69,72 @@ max_trans_res( */ size = libxfs_attr_leaf_newentsize( &args, mp->m_sb.sb_blocksize, &local); - - if (local) { - printf("Uh-oh.. attribute is local\n"); - } else { - /* Out of line attribute, cannot double split, but make - * room for the attribute value itself. - */ - nblks += XFS_B_TO_FSB(mp, size); - nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); - } + ASSERT(!local); + nblks = XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK); + nblks += XFS_B_TO_FSB(mp, size); + nblks += XFS_NEXTENTADD_SPACE_RES(mp, size, XFS_ATTR_FORK); res = XFS_ATTRSET_LOG_RES(mp, nblks); + #if 0 printf("size = %d nblks = %d res = %d\n", size, nblks, res); #endif + mp->m_reservations.tr_attrset = res; +} + +static int +max_trans_res_by_mount( + xfs_mount_t *mp) +{ + uint *p; + int rval; + xfs_trans_reservations_t *tr = &mp->m_reservations; - for (rval = 0, tr = &mp->m_reservations, p = (uint *)tr, - q = (uint *)&tr_count; - p < (uint *)(tr + 1); - p++, q++) { - if ((int)*p > rval) { + for (rval = 0, p = (uint *)tr; p < (uint *)(tr + 1); p++) { + if ((int)*p > rval) rval = (int)*p; - *mul = (int)*q; - } } return rval; } int -main(int argc, char **argv) +max_trans_res( + int dirversion, + int sectorlog, + int blocklog, + int inodelog, + int dirblocklog) { - unsigned int sl, bl, il, dl, dv; - unsigned int i, mul; - xfs_mount_t m; xfs_sb_t *sbp; + xfs_mount_t mount; + int maxres, maxfsb; - progname = basename(argv[0]); - if (argc > 1) { - fprintf(stderr, "Usage: %s\n", progname); - return 1; - } - memset(&m, 0, sizeof(m)); - sbp = &m.m_sb; + memset(&mount, 0, sizeof(mount)); + sbp = &mount.m_sb; sbp->sb_magicnum = XFS_SB_MAGIC; + sbp->sb_sectlog = sectorlog; + sbp->sb_sectsize = 1 << sbp->sb_sectlog; + sbp->sb_blocklog = blocklog; + sbp->sb_blocksize = 1 << blocklog; + sbp->sb_agblocks = XFS_AG_MIN_BYTES / (1 << blocklog); + sbp->sb_inodelog = inodelog; + sbp->sb_inopblog = blocklog - inodelog; + sbp->sb_inodesize = 1 << inodelog; + sbp->sb_inopblock = 1 << (blocklog - inodelog); + sbp->sb_dirblklog = dirblocklog - blocklog; + sbp->sb_versionnum = XFS_SB_VERSION_4 | + (dirversion == 2 ? XFS_SB_VERSION_DIRV2BIT : 0); - for (sl = XFS_MIN_SECTORSIZE_LOG; - sl <= XFS_MAX_SECTORSIZE_LOG; - sl++) { - sbp->sb_sectlog = sl; - sbp->sb_sectsize = 1 << sbp->sb_sectlog; - - for (bl = XFS_MIN_BLOCKSIZE_LOG; - bl <= XFS_MAX_BLOCKSIZE_LOG; - bl++) { - if (bl < sl) - continue; - sbp->sb_blocklog = bl; - sbp->sb_blocksize = 1 << bl; - sbp->sb_agblocks = XFS_AG_MIN_BYTES / (1 << bl); + libxfs_mount(&mount, sbp, 0,0,0,0); + max_attrset_trans_res_adjust(&mount); + maxres = max_trans_res_by_mount(&mount); + maxfsb = XFS_B_TO_FSB(&mount, maxres); + libxfs_umount(&mount); - for (il = XFS_DINODE_MIN_LOG; - il <= XFS_DINODE_MAX_LOG; - il++) { - if ((1< (1<sb_inodelog = il; - sbp->sb_inopblog = bl - il; - sbp->sb_inodesize = 1 << il; - sbp->sb_inopblock = 1 << (bl - il); +#if 0 + printf("#define\tMAXTRRES_S%d_B%d_I%d_D%d_V%d\t%lld\n", + sectorlog, blocklog, inodelog, dirblocklog, dirversion, maxfsb); +#endif - for (dl = bl; - dl <= XFS_MAX_BLOCKSIZE_LOG; - dl++) { - sbp->sb_dirblklog = dl - bl; - for (dv = 1; dv <= 2; dv++) { - if (dv == 1 && dl != bl) - continue; - sbp->sb_versionnum = - XFS_SB_VERSION_4 | - (dv == 2 ? - XFS_SB_VERSION_DIRV2BIT : 0); - libxfs_mount(&m, sbp, 0,0,0,0); - i = max_trans_res(&m, &mul); - printf( - "#define\tMAXTRRES_S%d_B%d_I%d_D%d_V%d\t%lld\t" - "/* LOG_FACTOR %d */\n", sl, bl, il, dl, dv, - (long long) - XFS_B_TO_FSB(&m, i), - mul); - libxfs_umount(&m); - } - } - } - } - } - return 0; + return maxfsb; } diff --git a/mkfs/trtab.c b/mkfs/trtab.c deleted file mode 100644 index 746e28cc0..000000000 --- a/mkfs/trtab.c +++ /dev/null @@ -1,851 +0,0 @@ -/* - * Copyright (c) 2002 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ - */ - -#include -#include "xfs_mkfs.h" -#include "maxtrres.h" - -/* - * Maximum transaction reservation tables - * - * Version 1 directories: - * first dimension log(sectorsize) (base XFS_MIN_SECTORSIZE_LOG) - * second dimension log(blocksize) (base XFS_MIN_BLOCKSIZE_LOG) - * third dimension log(inodesize) (base XFS_DINODE_MIN_LOG) - * - * Version 2 directories: - * first dimension log(sectorsize) (base XFS_MIN_SECTORSIZE_LOG) - * second dimension log(blocksize) (base XFS_MIN_BLOCKSIZE_LOG) - * third dimension log(inodesize) (base XFS_DINODE_MIN_LOG) - * fourth dimension log(dirblocksize) (base XFS_MIN_BLOCKSIZE_LOG) - */ - -const int max_trres_v1[DFL_S][DFL_B][DFL_I] = { - - /* ssize (7) x bsize[==dsize] (8) x isize (4) */ - - { { MAXTRRES_S9_B9_I8_D9_V1, 0, - 0, 0 }, - { MAXTRRES_S9_B10_I8_D10_V1, MAXTRRES_S9_B10_I9_D10_V1, - 0, 0 }, - { MAXTRRES_S9_B11_I8_D11_V1, MAXTRRES_S9_B11_I9_D11_V1, - MAXTRRES_S9_B11_I10_D11_V1, 0 }, - { MAXTRRES_S9_B12_I8_D12_V1, MAXTRRES_S9_B12_I9_D12_V1, - MAXTRRES_S9_B12_I10_D12_V1, MAXTRRES_S9_B12_I11_D12_V1 }, - { MAXTRRES_S9_B13_I8_D13_V1, MAXTRRES_S9_B13_I9_D13_V1, - MAXTRRES_S9_B13_I10_D13_V1, MAXTRRES_S9_B13_I11_D13_V1 }, - { MAXTRRES_S9_B14_I8_D14_V1, MAXTRRES_S9_B14_I9_D14_V1, - MAXTRRES_S9_B14_I10_D14_V1, MAXTRRES_S9_B14_I11_D14_V1 }, - { MAXTRRES_S9_B15_I8_D15_V1, MAXTRRES_S9_B15_I9_D15_V1, - MAXTRRES_S9_B15_I10_D15_V1, MAXTRRES_S9_B15_I11_D15_V1 }, - { MAXTRRES_S9_B16_I8_D16_V1, MAXTRRES_S9_B16_I9_D16_V1, - MAXTRRES_S9_B16_I10_D16_V1, MAXTRRES_S9_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { MAXTRRES_S10_B10_I8_D10_V1, MAXTRRES_S10_B10_I9_D10_V1, - 0, 0 }, - { MAXTRRES_S10_B11_I8_D11_V1, MAXTRRES_S10_B11_I9_D11_V1, - MAXTRRES_S10_B11_I10_D11_V1, 0 }, - { MAXTRRES_S10_B12_I8_D12_V1, MAXTRRES_S10_B12_I9_D12_V1, - MAXTRRES_S10_B12_I10_D12_V1, MAXTRRES_S10_B12_I11_D12_V1 }, - { MAXTRRES_S10_B13_I8_D13_V1, MAXTRRES_S10_B13_I9_D13_V1, - MAXTRRES_S10_B13_I10_D13_V1, MAXTRRES_S10_B13_I11_D13_V1 }, - { MAXTRRES_S10_B14_I8_D14_V1, MAXTRRES_S10_B14_I9_D14_V1, - MAXTRRES_S10_B14_I10_D14_V1, MAXTRRES_S10_B14_I11_D14_V1 }, - { MAXTRRES_S10_B15_I8_D15_V1, MAXTRRES_S10_B15_I9_D15_V1, - MAXTRRES_S10_B15_I10_D15_V1, MAXTRRES_S10_B15_I11_D15_V1 }, - { MAXTRRES_S10_B16_I8_D16_V1, MAXTRRES_S10_B16_I9_D16_V1, - MAXTRRES_S10_B16_I10_D16_V1, MAXTRRES_S10_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { MAXTRRES_S11_B11_I8_D11_V1, MAXTRRES_S11_B11_I9_D11_V1, - MAXTRRES_S11_B11_I10_D11_V1, 0 }, - { MAXTRRES_S11_B12_I8_D12_V1, MAXTRRES_S11_B12_I9_D12_V1, - MAXTRRES_S11_B12_I10_D12_V1, MAXTRRES_S11_B12_I11_D12_V1 }, - { MAXTRRES_S11_B13_I8_D13_V1, MAXTRRES_S11_B13_I9_D13_V1, - MAXTRRES_S11_B13_I10_D13_V1, MAXTRRES_S11_B13_I11_D13_V1 }, - { MAXTRRES_S11_B14_I8_D14_V1, MAXTRRES_S11_B14_I9_D14_V1, - MAXTRRES_S11_B14_I10_D14_V1, MAXTRRES_S11_B14_I11_D14_V1 }, - { MAXTRRES_S11_B15_I8_D15_V1, MAXTRRES_S11_B15_I9_D15_V1, - MAXTRRES_S11_B15_I10_D15_V1, MAXTRRES_S11_B15_I11_D15_V1 }, - { MAXTRRES_S11_B16_I8_D16_V1, MAXTRRES_S11_B16_I9_D16_V1, - MAXTRRES_S11_B16_I10_D16_V1, MAXTRRES_S11_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { MAXTRRES_S12_B12_I8_D12_V1, MAXTRRES_S12_B12_I9_D12_V1, - MAXTRRES_S12_B12_I10_D12_V1, MAXTRRES_S12_B12_I11_D12_V1 }, - { MAXTRRES_S12_B13_I8_D13_V1, MAXTRRES_S12_B13_I9_D13_V1, - MAXTRRES_S12_B13_I10_D13_V1, MAXTRRES_S12_B13_I11_D13_V1 }, - { MAXTRRES_S12_B14_I8_D14_V1, MAXTRRES_S12_B14_I9_D14_V1, - MAXTRRES_S12_B14_I10_D14_V1, MAXTRRES_S12_B14_I11_D14_V1 }, - { MAXTRRES_S12_B15_I8_D15_V1, MAXTRRES_S12_B15_I9_D15_V1, - MAXTRRES_S12_B15_I10_D15_V1, MAXTRRES_S12_B15_I11_D15_V1 }, - { MAXTRRES_S12_B16_I8_D16_V1, MAXTRRES_S12_B16_I9_D16_V1, - MAXTRRES_S12_B16_I10_D16_V1, MAXTRRES_S12_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { MAXTRRES_S13_B13_I8_D13_V1, MAXTRRES_S13_B13_I9_D13_V1, - MAXTRRES_S13_B13_I10_D13_V1, MAXTRRES_S13_B13_I11_D13_V1 }, - { MAXTRRES_S13_B14_I8_D14_V1, MAXTRRES_S13_B14_I9_D14_V1, - MAXTRRES_S13_B14_I10_D14_V1, MAXTRRES_S13_B14_I11_D14_V1 }, - { MAXTRRES_S13_B15_I8_D15_V1, MAXTRRES_S13_B15_I9_D15_V1, - MAXTRRES_S13_B15_I10_D15_V1, MAXTRRES_S13_B15_I11_D15_V1 }, - { MAXTRRES_S13_B16_I8_D16_V1, MAXTRRES_S13_B16_I9_D16_V1, - MAXTRRES_S13_B16_I10_D16_V1, MAXTRRES_S13_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { MAXTRRES_S14_B14_I8_D14_V1, MAXTRRES_S14_B14_I9_D14_V1, - MAXTRRES_S14_B14_I10_D14_V1, MAXTRRES_S14_B14_I11_D14_V1 }, - { MAXTRRES_S14_B15_I8_D15_V1, MAXTRRES_S14_B15_I9_D15_V1, - MAXTRRES_S14_B15_I10_D15_V1, MAXTRRES_S14_B15_I11_D15_V1 }, - { MAXTRRES_S14_B16_I8_D16_V1, MAXTRRES_S14_B16_I9_D16_V1, - MAXTRRES_S14_B16_I10_D16_V1, MAXTRRES_S14_B16_I11_D16_V1 }, - }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { MAXTRRES_S15_B15_I8_D15_V1, MAXTRRES_S15_B15_I9_D15_V1, - MAXTRRES_S15_B15_I10_D15_V1, MAXTRRES_S15_B15_I11_D15_V1 }, - { MAXTRRES_S15_B16_I8_D16_V1, MAXTRRES_S15_B16_I9_D16_V1, - MAXTRRES_S15_B16_I10_D16_V1, MAXTRRES_S15_B16_I11_D16_V1 }, - }, -}; - - -const int max_trres_v2[DFL_S][DFL_B][DFL_I][DFL_D] = { - - /* ssize (7) x bsize (8) x isize (4) x dsize (8) */ - - { { { MAXTRRES_S9_B9_I8_D9_V2, MAXTRRES_S9_B9_I8_D10_V2, - MAXTRRES_S9_B9_I8_D11_V2, MAXTRRES_S9_B9_I8_D12_V2, - MAXTRRES_S9_B9_I8_D13_V2, MAXTRRES_S9_B9_I8_D14_V2, - MAXTRRES_S9_B9_I8_D15_V2, MAXTRRES_S9_B9_I8_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, MAXTRRES_S9_B10_I8_D10_V2, - MAXTRRES_S9_B10_I8_D11_V2, MAXTRRES_S9_B10_I8_D12_V2, - MAXTRRES_S9_B10_I8_D13_V2, MAXTRRES_S9_B10_I8_D14_V2, - MAXTRRES_S9_B10_I8_D15_V2, MAXTRRES_S9_B10_I8_D16_V2 }, - { 0, MAXTRRES_S9_B10_I9_D10_V2, - MAXTRRES_S9_B10_I9_D11_V2, MAXTRRES_S9_B10_I9_D12_V2, - MAXTRRES_S9_B10_I9_D13_V2, MAXTRRES_S9_B10_I9_D14_V2, - MAXTRRES_S9_B10_I9_D15_V2, MAXTRRES_S9_B10_I9_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - MAXTRRES_S9_B11_I8_D11_V2, MAXTRRES_S9_B11_I8_D12_V2, - MAXTRRES_S9_B11_I8_D13_V2, MAXTRRES_S9_B11_I8_D14_V2, - MAXTRRES_S9_B11_I8_D15_V2, MAXTRRES_S9_B11_I8_D16_V2 }, - { 0, 0, - MAXTRRES_S9_B11_I9_D11_V2, MAXTRRES_S9_B11_I9_D12_V2, - MAXTRRES_S9_B11_I9_D13_V2, MAXTRRES_S9_B11_I9_D14_V2, - MAXTRRES_S9_B11_I9_D15_V2, MAXTRRES_S9_B11_I9_D16_V2 }, - { 0, 0, - MAXTRRES_S9_B11_I10_D11_V2, MAXTRRES_S9_B11_I10_D12_V2, - MAXTRRES_S9_B11_I10_D13_V2, MAXTRRES_S9_B11_I10_D14_V2, - MAXTRRES_S9_B11_I10_D15_V2, MAXTRRES_S9_B11_I10_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, MAXTRRES_S9_B12_I8_D12_V2, - MAXTRRES_S9_B12_I8_D13_V2, MAXTRRES_S9_B12_I8_D14_V2, - MAXTRRES_S9_B12_I8_D15_V2, MAXTRRES_S9_B12_I8_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S9_B12_I9_D12_V2, - MAXTRRES_S9_B12_I9_D13_V2, MAXTRRES_S9_B12_I9_D14_V2, - MAXTRRES_S9_B12_I9_D15_V2, MAXTRRES_S9_B12_I9_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S9_B12_I10_D12_V2, - MAXTRRES_S9_B12_I10_D13_V2, MAXTRRES_S9_B12_I10_D14_V2, - MAXTRRES_S9_B12_I10_D15_V2, MAXTRRES_S9_B12_I10_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S9_B12_I11_D12_V2, - MAXTRRES_S9_B12_I11_D13_V2, MAXTRRES_S9_B12_I11_D14_V2, - MAXTRRES_S9_B12_I11_D15_V2, MAXTRRES_S9_B12_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - MAXTRRES_S9_B13_I8_D13_V2, MAXTRRES_S9_B13_I8_D14_V2, - MAXTRRES_S9_B13_I8_D15_V2, MAXTRRES_S9_B13_I8_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S9_B13_I9_D13_V2, MAXTRRES_S9_B13_I9_D14_V2, - MAXTRRES_S9_B13_I9_D15_V2, MAXTRRES_S9_B13_I9_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S9_B13_I10_D13_V2, MAXTRRES_S9_B13_I10_D14_V2, - MAXTRRES_S9_B13_I10_D15_V2, MAXTRRES_S9_B13_I10_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S9_B13_I11_D13_V2, MAXTRRES_S9_B13_I11_D14_V2, - MAXTRRES_S9_B13_I11_D15_V2, MAXTRRES_S9_B13_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S9_B14_I8_D14_V2, - MAXTRRES_S9_B14_I8_D15_V2, MAXTRRES_S9_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S9_B14_I9_D14_V2, - MAXTRRES_S9_B14_I9_D15_V2, MAXTRRES_S9_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S9_B14_I10_D14_V2, - MAXTRRES_S9_B14_I10_D15_V2, MAXTRRES_S9_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S9_B14_I11_D14_V2, - MAXTRRES_S9_B14_I11_D15_V2, MAXTRRES_S9_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S9_B15_I8_D15_V2, MAXTRRES_S9_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S9_B15_I9_D15_V2, MAXTRRES_S9_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S9_B15_I10_D15_V2, MAXTRRES_S9_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S9_B15_I11_D15_V2, MAXTRRES_S9_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S9_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S9_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S9_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S9_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, MAXTRRES_S9_B10_I8_D10_V2, - MAXTRRES_S10_B10_I8_D11_V2, MAXTRRES_S10_B10_I8_D12_V2, - MAXTRRES_S10_B10_I8_D13_V2, MAXTRRES_S10_B10_I8_D14_V2, - MAXTRRES_S10_B10_I8_D15_V2, MAXTRRES_S10_B10_I8_D16_V2 }, - { 0, MAXTRRES_S10_B10_I9_D10_V2, - MAXTRRES_S10_B10_I9_D11_V2, MAXTRRES_S10_B10_I9_D12_V2, - MAXTRRES_S10_B10_I9_D13_V2, MAXTRRES_S10_B10_I9_D14_V2, - MAXTRRES_S10_B10_I9_D15_V2, MAXTRRES_S10_B10_I9_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - MAXTRRES_S10_B11_I8_D11_V2, MAXTRRES_S10_B11_I8_D12_V2, - MAXTRRES_S10_B11_I8_D13_V2, MAXTRRES_S10_B11_I8_D14_V2, - MAXTRRES_S10_B11_I8_D15_V2, MAXTRRES_S10_B11_I8_D16_V2 }, - { 0, 0, - MAXTRRES_S10_B11_I9_D11_V2, MAXTRRES_S10_B11_I9_D12_V2, - MAXTRRES_S10_B11_I9_D13_V2, MAXTRRES_S10_B11_I9_D14_V2, - MAXTRRES_S10_B11_I9_D15_V2, MAXTRRES_S10_B11_I9_D16_V2 }, - { 0, 0, - MAXTRRES_S10_B11_I10_D11_V2, MAXTRRES_S10_B11_I10_D12_V2, - MAXTRRES_S10_B11_I10_D13_V2, MAXTRRES_S10_B11_I10_D14_V2, - MAXTRRES_S10_B11_I10_D15_V2, MAXTRRES_S10_B11_I10_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, MAXTRRES_S10_B12_I8_D12_V2, - MAXTRRES_S10_B12_I8_D13_V2, MAXTRRES_S10_B12_I8_D14_V2, - MAXTRRES_S10_B12_I8_D15_V2, MAXTRRES_S10_B12_I8_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S10_B12_I9_D12_V2, - MAXTRRES_S10_B12_I9_D13_V2, MAXTRRES_S10_B12_I9_D14_V2, - MAXTRRES_S10_B12_I9_D15_V2, MAXTRRES_S10_B12_I9_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S10_B12_I10_D12_V2, - MAXTRRES_S10_B12_I10_D13_V2, MAXTRRES_S10_B12_I10_D14_V2, - MAXTRRES_S10_B12_I10_D15_V2, MAXTRRES_S10_B12_I10_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S10_B12_I11_D12_V2, - MAXTRRES_S10_B12_I11_D13_V2, MAXTRRES_S10_B12_I11_D14_V2, - MAXTRRES_S10_B12_I11_D15_V2, MAXTRRES_S10_B12_I11_D16_V2 }, - }, - - { { 0, 0, - 0, 0, - MAXTRRES_S10_B13_I8_D13_V2, MAXTRRES_S10_B13_I8_D14_V2, - MAXTRRES_S10_B13_I8_D15_V2, MAXTRRES_S10_B13_I8_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S10_B13_I9_D13_V2, MAXTRRES_S10_B13_I9_D14_V2, - MAXTRRES_S10_B13_I9_D15_V2, MAXTRRES_S10_B13_I9_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S10_B13_I10_D13_V2, MAXTRRES_S10_B13_I10_D14_V2, - MAXTRRES_S10_B13_I10_D15_V2, MAXTRRES_S10_B13_I10_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S10_B13_I11_D13_V2, MAXTRRES_S10_B13_I11_D14_V2, - MAXTRRES_S10_B13_I11_D15_V2, MAXTRRES_S10_B13_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S10_B14_I8_D14_V2, - MAXTRRES_S10_B14_I8_D15_V2, MAXTRRES_S10_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S10_B14_I9_D14_V2, - MAXTRRES_S10_B14_I9_D15_V2, MAXTRRES_S10_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S10_B14_I10_D14_V2, - MAXTRRES_S10_B14_I10_D15_V2, MAXTRRES_S10_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S10_B14_I11_D14_V2, - MAXTRRES_S10_B14_I11_D15_V2, MAXTRRES_S10_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S10_B15_I8_D15_V2, MAXTRRES_S10_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S10_B15_I9_D15_V2, MAXTRRES_S10_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S10_B15_I10_D15_V2, MAXTRRES_S10_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S10_B15_I11_D15_V2, MAXTRRES_S10_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S10_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S10_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S10_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S10_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - MAXTRRES_S11_B11_I8_D11_V2, MAXTRRES_S11_B11_I8_D12_V2, - MAXTRRES_S11_B11_I8_D13_V2, MAXTRRES_S11_B11_I8_D14_V2, - MAXTRRES_S11_B11_I8_D15_V2, MAXTRRES_S11_B11_I8_D16_V2 }, - { 0, 0, - MAXTRRES_S11_B11_I9_D11_V2, MAXTRRES_S11_B11_I9_D12_V2, - MAXTRRES_S11_B11_I9_D13_V2, MAXTRRES_S11_B11_I9_D14_V2, - MAXTRRES_S11_B11_I9_D15_V2, MAXTRRES_S11_B11_I9_D16_V2 }, - { 0, 0, - MAXTRRES_S11_B11_I10_D11_V2, MAXTRRES_S11_B11_I10_D12_V2, - MAXTRRES_S11_B11_I10_D13_V2, MAXTRRES_S11_B11_I10_D14_V2, - MAXTRRES_S11_B11_I10_D15_V2, MAXTRRES_S11_B11_I10_D16_V2 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, MAXTRRES_S11_B12_I8_D12_V2, - MAXTRRES_S11_B12_I8_D13_V2, MAXTRRES_S11_B12_I8_D14_V2, - MAXTRRES_S11_B12_I8_D15_V2, MAXTRRES_S11_B12_I8_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S11_B12_I9_D12_V2, - MAXTRRES_S11_B12_I9_D13_V2, MAXTRRES_S11_B12_I9_D14_V2, - MAXTRRES_S11_B12_I9_D15_V2, MAXTRRES_S11_B12_I9_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S11_B12_I10_D12_V2, - MAXTRRES_S11_B12_I10_D13_V2, MAXTRRES_S11_B12_I10_D14_V2, - MAXTRRES_S11_B12_I10_D15_V2, MAXTRRES_S11_B12_I10_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S11_B12_I11_D12_V2, - MAXTRRES_S11_B12_I11_D13_V2, MAXTRRES_S11_B12_I11_D14_V2, - MAXTRRES_S11_B12_I11_D15_V2, MAXTRRES_S11_B12_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - MAXTRRES_S11_B13_I8_D13_V2, MAXTRRES_S11_B13_I8_D14_V2, - MAXTRRES_S11_B13_I8_D15_V2, MAXTRRES_S11_B13_I8_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S11_B13_I9_D13_V2, MAXTRRES_S11_B13_I9_D14_V2, - MAXTRRES_S11_B13_I9_D15_V2, MAXTRRES_S11_B13_I9_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S11_B13_I10_D13_V2, MAXTRRES_S11_B13_I10_D14_V2, - MAXTRRES_S11_B13_I10_D15_V2, MAXTRRES_S11_B13_I10_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S11_B13_I11_D13_V2, MAXTRRES_S11_B13_I11_D14_V2, - MAXTRRES_S11_B13_I11_D15_V2, MAXTRRES_S11_B13_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S11_B14_I8_D14_V2, - MAXTRRES_S11_B14_I8_D15_V2, MAXTRRES_S11_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S11_B14_I9_D14_V2, - MAXTRRES_S11_B14_I9_D15_V2, MAXTRRES_S11_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S11_B14_I10_D14_V2, - MAXTRRES_S11_B14_I10_D15_V2, MAXTRRES_S11_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S11_B14_I11_D14_V2, - MAXTRRES_S11_B14_I11_D15_V2, MAXTRRES_S11_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S11_B15_I8_D15_V2, MAXTRRES_S11_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S11_B15_I9_D15_V2, MAXTRRES_S11_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S11_B15_I10_D15_V2, MAXTRRES_S11_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S11_B15_I11_D15_V2, MAXTRRES_S11_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S11_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S11_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S11_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S11_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, MAXTRRES_S12_B12_I8_D12_V2, - MAXTRRES_S12_B12_I8_D13_V2, MAXTRRES_S12_B12_I8_D14_V2, - MAXTRRES_S12_B12_I8_D15_V2, MAXTRRES_S12_B12_I8_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S12_B12_I9_D12_V2, - MAXTRRES_S12_B12_I9_D13_V2, MAXTRRES_S12_B12_I9_D14_V2, - MAXTRRES_S12_B12_I9_D15_V2, MAXTRRES_S12_B12_I9_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S12_B12_I10_D12_V2, - MAXTRRES_S12_B12_I10_D13_V2, MAXTRRES_S12_B12_I10_D14_V2, - MAXTRRES_S12_B12_I10_D15_V2, MAXTRRES_S12_B12_I10_D16_V2 }, - { 0, 0, - 0, MAXTRRES_S12_B12_I11_D12_V2, - MAXTRRES_S12_B12_I11_D13_V2, MAXTRRES_S12_B12_I11_D14_V2, - MAXTRRES_S12_B12_I11_D15_V2, MAXTRRES_S12_B12_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - MAXTRRES_S12_B13_I8_D13_V2, MAXTRRES_S12_B13_I8_D14_V2, - MAXTRRES_S12_B13_I8_D15_V2, MAXTRRES_S12_B13_I8_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S12_B13_I9_D13_V2, MAXTRRES_S12_B13_I9_D14_V2, - MAXTRRES_S12_B13_I9_D15_V2, MAXTRRES_S12_B13_I9_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S12_B13_I10_D13_V2, MAXTRRES_S12_B13_I10_D14_V2, - MAXTRRES_S12_B13_I10_D15_V2, MAXTRRES_S12_B13_I10_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S12_B13_I11_D13_V2, MAXTRRES_S12_B13_I11_D14_V2, - MAXTRRES_S12_B13_I11_D15_V2, MAXTRRES_S12_B13_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S12_B14_I8_D14_V2, - MAXTRRES_S12_B14_I8_D15_V2, MAXTRRES_S12_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S12_B14_I9_D14_V2, - MAXTRRES_S12_B14_I9_D15_V2, MAXTRRES_S12_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S12_B14_I10_D14_V2, - MAXTRRES_S12_B14_I10_D15_V2, MAXTRRES_S12_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S12_B14_I11_D14_V2, - MAXTRRES_S12_B14_I11_D15_V2, MAXTRRES_S12_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S12_B15_I8_D15_V2, MAXTRRES_S12_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S12_B15_I9_D15_V2, MAXTRRES_S12_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S12_B15_I10_D15_V2, MAXTRRES_S12_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S12_B15_I11_D15_V2, MAXTRRES_S12_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S12_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S12_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S12_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S12_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, 0, - MAXTRRES_S13_B13_I8_D13_V2, MAXTRRES_S13_B13_I8_D14_V2, - MAXTRRES_S13_B13_I8_D15_V2, MAXTRRES_S13_B13_I8_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S13_B13_I9_D13_V2, MAXTRRES_S13_B13_I9_D14_V2, - MAXTRRES_S13_B13_I9_D15_V2, MAXTRRES_S13_B13_I9_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S13_B13_I10_D13_V2, MAXTRRES_S13_B13_I10_D14_V2, - MAXTRRES_S13_B13_I10_D15_V2, MAXTRRES_S13_B13_I10_D16_V2 }, - { 0, 0, - 0, 0, - MAXTRRES_S13_B13_I11_D13_V2, MAXTRRES_S13_B13_I11_D14_V2, - MAXTRRES_S13_B13_I11_D15_V2, MAXTRRES_S13_B13_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S13_B14_I8_D14_V2, - MAXTRRES_S13_B14_I8_D15_V2, MAXTRRES_S13_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S13_B14_I9_D14_V2, - MAXTRRES_S13_B14_I9_D15_V2, MAXTRRES_S13_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S13_B14_I10_D14_V2, - MAXTRRES_S13_B14_I10_D15_V2, MAXTRRES_S13_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S13_B14_I11_D14_V2, - MAXTRRES_S13_B14_I11_D15_V2, MAXTRRES_S13_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S13_B15_I8_D15_V2, MAXTRRES_S13_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S13_B15_I9_D15_V2, MAXTRRES_S13_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S13_B15_I10_D15_V2, MAXTRRES_S13_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S13_B15_I11_D15_V2, MAXTRRES_S13_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S13_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S13_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S13_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S13_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, 0, - 0, MAXTRRES_S14_B14_I8_D14_V2, - MAXTRRES_S14_B14_I8_D15_V2, MAXTRRES_S14_B14_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S14_B14_I9_D14_V2, - MAXTRRES_S14_B14_I9_D15_V2, MAXTRRES_S14_B14_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S14_B14_I10_D14_V2, - MAXTRRES_S14_B14_I10_D15_V2, MAXTRRES_S14_B14_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, MAXTRRES_S14_B14_I11_D14_V2, - MAXTRRES_S14_B14_I11_D15_V2, MAXTRRES_S14_B14_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S14_B15_I8_D15_V2, MAXTRRES_S14_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S14_B15_I9_D15_V2, MAXTRRES_S14_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S14_B15_I10_D15_V2, MAXTRRES_S14_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S14_B15_I11_D15_V2, MAXTRRES_S14_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S14_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S14_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S14_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S14_B16_I11_D16_V2 }, - }, - }, - - { { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S15_B15_I8_D15_V2, MAXTRRES_S15_B15_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S15_B15_I9_D15_V2, MAXTRRES_S15_B15_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S15_B15_I10_D15_V2, MAXTRRES_S15_B15_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - MAXTRRES_S15_B15_I11_D15_V2, MAXTRRES_S15_B15_I11_D16_V2 }, - }, - { { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S15_B16_I8_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S15_B16_I9_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S15_B16_I10_D16_V2 }, - { 0, 0, - 0, 0, - 0, 0, - 0, MAXTRRES_S15_B16_I11_D16_V2 }, - }, - }, -}; diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 10ca6ebcf..6d7531d90 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -45,7 +45,6 @@ static void reqval(char opt, char *tab[], int idx); static void respec(char opt, char *tab[], int idx); static void unknown(char opt, char *s); static int ispow2(unsigned int i); -static int max_trans_res(xfs_mount_t *mp); /* * option tables for getsubopt calls @@ -350,6 +349,29 @@ fixup_log_stripe( return logstart; } +void +validate_log_size(__uint64_t logblocks, int blocklog, int min_logblocks) +{ + if (logblocks < min_logblocks) { + fprintf(stderr, + _("log size %lld blocks too small, minimum size is %d blocks\n"), + (long long)logblocks, min_logblocks); + usage(); + } + if (logblocks > XFS_MAX_LOG_BLOCKS) { + fprintf(stderr, + _("log size %lld blocks too large, maximum size is %d blocks\n"), + (long long)logblocks, XFS_MAX_LOG_BLOCKS); + usage(); + } + if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) { + fprintf(stderr, + _("log size %lld bytes too large, maximum size is %d bytes\n"), + (long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES); + usage(); + } +} + void calc_default_ag_geometry( int blocklog, @@ -513,7 +535,6 @@ main( int dswidth; int extent_flagging; int force_overwrite; - int i; int iaflag; int ilflag; int imaxpct; @@ -543,6 +564,7 @@ main( int lssflag; int lsu; int lsunit; + int max_tr_res; int min_logblocks; xfs_mount_t *mp; xfs_mount_t mbuf; @@ -753,10 +775,10 @@ main( case D_UNWRITTEN: if (!value) reqval('d', dopts, D_UNWRITTEN); - i = atoi(value); - if (i < 0 || i > 1) + c = atoi(value); + if (c < 0 || c > 1) illegal(value, "d unwritten"); - extent_flagging = i; + extent_flagging = c; break; case D_SECTLOG: if (!value) @@ -1538,17 +1560,11 @@ reported by the device (%u).\n"), sectorsize, xi.rtbsize); } - if (dirversion == 1) - i = max_trres_v1[sectorlog - XFS_MIN_SECTORSIZE_LOG] - [blocklog - XFS_MIN_BLOCKSIZE_LOG] - [inodelog - XFS_DINODE_MIN_LOG]; - else - i = max_trres_v2[sectorlog - XFS_MIN_SECTORSIZE_LOG] - [blocklog - XFS_MIN_BLOCKSIZE_LOG] - [inodelog - XFS_DINODE_MIN_LOG] - [dirblocklog - XFS_MIN_BLOCKSIZE_LOG]; - ASSERT(i); - min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, i * XFS_MIN_LOG_FACTOR); + max_tr_res = max_trans_res(dirversion, + sectorlog, blocklog, inodelog, dirblocklog); + ASSERT(max_tr_res); + min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR; + min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks); if (!logsize && dblocks >= (1024*1024*1024) >> blocklog) min_logblocks = MAX(min_logblocks, (10*1024*1024)>>blocklog); if (logsize && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) { @@ -1556,9 +1572,9 @@ reported by the device (%u).\n"), _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), logsize, (long long)DTOBT(xi.logBBsize)); usage(); - } else if (!logsize && xi.logBBsize > 0) + } else if (!logsize && xi.logBBsize > 0) { logblocks = DTOBT(xi.logBBsize); - else if (logsize && !xi.logdev && !loginternal) { + } else if (logsize && !xi.logdev && !loginternal) { fprintf(stderr, _("size specified for non-existent log subvolume\n")); usage(); @@ -1566,9 +1582,9 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), fprintf(stderr, _("size %lld too large for internal log\n"), (long long)logblocks); usage(); - } else if (!loginternal && !xi.logdev) + } else if (!loginternal && !xi.logdev) { logblocks = 0; - else if (loginternal && !logsize) { + } else if (loginternal && !logsize) { /* * logblocks grows from min_logblocks to XFS_MAX_LOG_BLOCKS * at 128GB @@ -1579,30 +1595,15 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), logblocks = logblocks >> blocklog; logblocks = MAX(min_logblocks, logblocks); logblocks = MAX(logblocks, - MAX(XFS_DFL_LOG_SIZE, i * XFS_DFL_LOG_FACTOR)); + MAX(XFS_DFL_LOG_SIZE, + max_tr_res * XFS_DFL_LOG_FACTOR)); logblocks = MIN(logblocks, XFS_MAX_LOG_BLOCKS); if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) { logblocks = XFS_MAX_LOG_BYTES >> blocklog; } - } - if (logblocks < min_logblocks) { - fprintf(stderr, - _("log size %lld blocks too small, minimum size is %d blocks\n"), - (long long)logblocks, min_logblocks); - usage(); - } - if (logblocks > XFS_MAX_LOG_BLOCKS) { - fprintf(stderr, - _("log size %lld blocks too large, maximum size is %d blocks\n"), - (long long)logblocks, XFS_MAX_LOG_BLOCKS); - usage(); - } - if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) { - fprintf(stderr, - _("log size %lld bytes too large, maximum size is %d bytes\n"), - (long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES); - usage(); } + validate_log_size(logblocks, blocklog, min_logblocks); + if (rtsize && xi.rtsize > 0 && rtblocks > DTOBT(xi.rtsize)) { fprintf(stderr, _("size %s specified for rt subvolume is too large, " @@ -1851,6 +1852,9 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), agsize, dsunit, &logblocks, blocklog, &lalign); } + min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR; + min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BLOCKS); + validate_log_size(logblocks, blocklog, min_logblocks); } else logstart = 0; @@ -1994,14 +1998,6 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), progname); exit(1); } - if (xi.logdev && - XFS_FSB_TO_B(mp, logblocks) < - XFS_MIN_LOG_FACTOR * max_trans_res(mp)) { - fprintf(stderr, - _("%s: log size (%lld) is too small for transaction reservations\n"), - progname, (long long)logblocks); - exit(1); - } for (agno = 0; agno < agcount; agno++) { /* @@ -2068,8 +2064,8 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), INT_SET(agi->agi_freecount, ARCH_CONVERT, 0); INT_SET(agi->agi_newino, ARCH_CONVERT, NULLAGINO); INT_SET(agi->agi_dirino, ARCH_CONVERT, NULLAGINO); - for (i = 0; i < XFS_AGI_UNLINKED_BUCKETS; i++) - INT_SET(agi->agi_unlinked[i], ARCH_CONVERT, NULLAGINO); + for (c = 0; c < XFS_AGI_UNLINKED_BUCKETS; c++) + INT_SET(agi->agi_unlinked[c], ARCH_CONVERT, NULLAGINO); libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE); /* @@ -2206,8 +2202,8 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), args.agno = agno; args.alignment = 1; args.pag = &mp->m_perag[agno]; - if ((i = libxfs_trans_reserve(tp, worst_freelist, 0, 0, 0, 0))) - res_failed(i); + if ((c = libxfs_trans_reserve(tp, worst_freelist, 0, 0, 0, 0))) + res_failed(c); libxfs_alloc_fix_freelist(&args, 0); libxfs_trans_commit(tp, 0, NULL); } @@ -2275,23 +2271,6 @@ an AG size that is one stripe unit smaller, for example %llu.\n"), return 0; } -static int -max_trans_res( - xfs_mount_t *mp) -{ - uint *p; - int rval; - xfs_trans_reservations_t *tr; - - tr = &mp->m_reservations; - - for (rval = 0, p = (uint *)tr; p < (uint *)(tr + 1); p++) { - if ((int)*p > rval) - rval = (int)*p; - } - return rval; -} - static void conflict( char opt, diff --git a/mkfs/xfs_mkfs.h b/mkfs/xfs_mkfs.h index 8236a1ef8..79387f984 100644 --- a/mkfs/xfs_mkfs.h +++ b/mkfs/xfs_mkfs.h @@ -67,13 +67,8 @@ extern char *setup_proto (char *fname); extern void parseproto (xfs_mount_t *mp, xfs_inode_t *pip, char **pp, char *n); extern void res_failed (int err); -#define DFL_S (XFS_MAX_SECTORSIZE_LOG + 1 - XFS_MIN_SECTORSIZE_LOG) /* 7 */ -#define DFL_B (XFS_MAX_BLOCKSIZE_LOG + 1 - XFS_MIN_BLOCKSIZE_LOG) /* 8 */ -#define DFL_I (XFS_DINODE_MAX_LOG + 1 - XFS_DINODE_MIN_LOG) /* 4 */ -#define DFL_D (XFS_MAX_BLOCKSIZE_LOG + 1 - XFS_MIN_BLOCKSIZE_LOG) /* 8 */ - -/* trtab.c */ -extern const int max_trres_v1[DFL_S][DFL_B][DFL_I]; -extern const int max_trres_v2[DFL_S][DFL_B][DFL_I][DFL_D]; +/* maxtrres.c */ +extern int max_trans_res (int dirversion, + int sectorlog, int blocklog, int inodelog, int dirblocklog); #endif /* __XFS_MKFS_H__ */