]> git.hungrycats.org Git - linux/commitdiff
[XFS] Separate the big filesystems macro out into separate big inums and blknos macro...
authorNathan Scott <nathans@sgi.com>
Mon, 15 Sep 2003 07:58:34 +0000 (02:58 -0500)
committerStephen Lord <lord@kernel.bkbits.net>
Mon, 15 Sep 2003 07:58:34 +0000 (02:58 -0500)
SGI Modid: 2.5.x-xfs:slinx:158361a

16 files changed:
fs/xfs/linux/xfs_super.h
fs/xfs/xfs_arch.h
fs/xfs/xfs_bmap_btree.c
fs/xfs/xfs_bmap_btree.h
fs/xfs/xfs_dir2_block.c
fs/xfs/xfs_dir2_leaf.c
fs/xfs/xfs_dir2_sf.c
fs/xfs/xfs_dir_leaf.c
fs/xfs/xfs_inum.h
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h
fs/xfs/xfs_rtalloc.h
fs/xfs/xfs_types.h
fs/xfs/xfs_vfsops.c
fs/xfs/xfs_vnodeops.c
fs/xfs/xfsidbg.c

index 26929ff1ba6e44de5372cca85e25162283d96fe5..02c8aa221b653b3ca38b571f430953438fc96e52 100644 (file)
 # define XFS_REALTIME_STRING
 #endif
 
-#if XFS_BIG_FILESYSTEMS
-# define XFS_BIGFS_STRING      "big filesystems, "
+#if XFS_BIG_BLKNOS
+# if XFS_BIG_INUMS
+#  define XFS_BIGFS_STRING     "large block/inode numbers, "
+# else
+#  define XFS_BIGFS_STRING     "large block numbers, "
+# endif
 #else
 # define XFS_BIGFS_STRING
 #endif
index c0f911a2042de36bbc1c29d42a70e6b2ef32777e..017d607d978f3ac50d4aa8ecf7e5bc93ec1b089b 100644 (file)
@@ -32,8 +32,8 @@
 #ifndef __XFS_ARCH_H__
 #define __XFS_ARCH_H__
 
-#ifndef XFS_BIG_FILESYSTEMS
-#error XFS_BIG_FILESYSTEMS must be defined true or false
+#ifndef XFS_BIG_INUMS
+# error XFS_BIG_INUMS must be defined true or false
 #endif
 
 #ifdef __KERNEL__
            (INT_GET_UNALIGNED_32_BE(pointer)) \
     )
 
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
 #define DIRINO_GET_ARCH(pointer,arch) \
     ( ((arch) == ARCH_NOCONVERT) \
        ? \
index a10c27fff030c402359c073afa1ab330026c8251..cbf2fb4e994256c0832475a17f09af2d2fd59cba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -1899,7 +1899,7 @@ __xfs_bmbt_get_all(
        ext_flag = (int)(l0 >> (64 - BMBT_EXNTFLAG_BITLEN));
        s->br_startoff = ((xfs_fileoff_t)l0 &
                           XFS_MASK64LO(64 - BMBT_EXNTFLAG_BITLEN)) >> 9;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        s->br_startblock = (((xfs_fsblock_t)l0 & XFS_MASK64LO(9)) << 43) |
                           (((xfs_fsblock_t)l1) >> 21);
 #else
@@ -1915,7 +1915,7 @@ __xfs_bmbt_get_all(
 #else  /* !DEBUG */
        s->br_startblock = (xfs_fsblock_t)(((xfs_dfsbno_t)l1) >> 21);
 #endif /* DEBUG */
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
        s->br_blockcount = (xfs_filblks_t)(l1 & XFS_MASK64LO(21));
        /* This is xfs_extent_state() in-line */
        if (ext_flag) {
@@ -1976,7 +1976,7 @@ xfs_fsblock_t
 xfs_bmbt_get_startblock(
        xfs_bmbt_rec_t  *r)
 {
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        return (((xfs_fsblock_t)r->l0 & XFS_MASK64LO(9)) << 43) |
               (((xfs_fsblock_t)r->l1) >> 21);
 #else
@@ -1990,7 +1990,7 @@ xfs_bmbt_get_startblock(
 #else  /* !DEBUG */
        return (xfs_fsblock_t)(((xfs_dfsbno_t)r->l1) >> 21);
 #endif /* DEBUG */
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 /*
@@ -2047,7 +2047,7 @@ xfs_fsblock_t
 xfs_bmbt_disk_get_startblock(
        xfs_bmbt_rec_t  *r)
 {
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        return (((xfs_fsblock_t)INT_GET(r->l0, ARCH_CONVERT) & XFS_MASK64LO(9)) << 43) |
               (((xfs_fsblock_t)INT_GET(r->l1, ARCH_CONVERT)) >> 21);
 #else
@@ -2061,7 +2061,7 @@ xfs_bmbt_disk_get_startblock(
 #else  /* !DEBUG */
        return (xfs_fsblock_t)(((xfs_dfsbno_t)INT_GET(r->l1, ARCH_CONVERT)) >> 21);
 #endif /* DEBUG */
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 /*
@@ -2472,17 +2472,15 @@ xfs_bmbt_set_all(
        extent_flag = (s->br_state == XFS_EXT_NORM) ? 0 : 1;
        ASSERT((s->br_startoff & XFS_MASK64HI(9)) == 0);
        ASSERT((s->br_blockcount & XFS_MASK64HI(43)) == 0);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        ASSERT((s->br_startblock & XFS_MASK64HI(12)) == 0);
-#endif /* XFS_BIG_FILESYSTEMS */
-#if XFS_BIG_FILESYSTEMS
        r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                 ((xfs_bmbt_rec_base_t)s->br_startoff << 9) |
                 ((xfs_bmbt_rec_base_t)s->br_startblock >> 43);
        r->l1 = ((xfs_bmbt_rec_base_t)s->br_startblock << 21) |
                 ((xfs_bmbt_rec_base_t)s->br_blockcount &
                 (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
-#else  /* !XFS_BIG_FILESYSTEMS */
+#else  /* !XFS_BIG_BLKNOS */
        if (ISNULLSTARTBLOCK(s->br_startblock)) {
                r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                        ((xfs_bmbt_rec_base_t)s->br_startoff << 9) |
@@ -2498,7 +2496,7 @@ xfs_bmbt_set_all(
                          ((xfs_bmbt_rec_base_t)s->br_blockcount &
                           (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
        }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 /*
@@ -2518,17 +2516,15 @@ xfs_bmbt_set_allf(
        extent_flag = (v == XFS_EXT_NORM) ? 0 : 1;
        ASSERT((o & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0);
        ASSERT((c & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        ASSERT((b & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0);
-#endif /* XFS_BIG_FILESYSTEMS */
-#if XFS_BIG_FILESYSTEMS
        r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                ((xfs_bmbt_rec_base_t)o << 9) |
                ((xfs_bmbt_rec_base_t)b >> 43);
        r->l1 = ((xfs_bmbt_rec_base_t)b << 21) |
                ((xfs_bmbt_rec_base_t)c &
                (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
-#else  /* !XFS_BIG_FILESYSTEMS */
+#else  /* !XFS_BIG_BLKNOS */
        if (ISNULLSTARTBLOCK(b)) {
                r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                        ((xfs_bmbt_rec_base_t)o << 9) |
@@ -2544,7 +2540,7 @@ xfs_bmbt_set_allf(
                         ((xfs_bmbt_rec_base_t)c &
                         (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
        }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 #if ARCH_CONVERT != ARCH_NOCONVERT
@@ -2563,17 +2559,15 @@ xfs_bmbt_disk_set_all(
        extent_flag = (s->br_state == XFS_EXT_NORM) ? 0 : 1;
        ASSERT((s->br_startoff & XFS_MASK64HI(9)) == 0);
        ASSERT((s->br_blockcount & XFS_MASK64HI(43)) == 0);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        ASSERT((s->br_startblock & XFS_MASK64HI(12)) == 0);
-#endif /* XFS_BIG_FILESYSTEMS */
-#if XFS_BIG_FILESYSTEMS
        INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                  ((xfs_bmbt_rec_base_t)s->br_startoff << 9) |
                  ((xfs_bmbt_rec_base_t)s->br_startblock >> 43));
        INT_SET(r->l1, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)s->br_startblock << 21) |
                  ((xfs_bmbt_rec_base_t)s->br_blockcount &
                   (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
-#else  /* !XFS_BIG_FILESYSTEMS */
+#else  /* !XFS_BIG_BLKNOS */
        if (ISNULLSTARTBLOCK(s->br_startblock)) {
                INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                        ((xfs_bmbt_rec_base_t)s->br_startoff << 9) |
@@ -2589,7 +2583,7 @@ xfs_bmbt_disk_set_all(
                          ((xfs_bmbt_rec_base_t)s->br_blockcount &
                           (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
        }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 /*
@@ -2609,17 +2603,15 @@ xfs_bmbt_disk_set_allf(
        extent_flag = (v == XFS_EXT_NORM) ? 0 : 1;
        ASSERT((o & XFS_MASK64HI(64-BMBT_STARTOFF_BITLEN)) == 0);
        ASSERT((c & XFS_MASK64HI(64-BMBT_BLOCKCOUNT_BITLEN)) == 0);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        ASSERT((b & XFS_MASK64HI(64-BMBT_STARTBLOCK_BITLEN)) == 0);
-#endif /* XFS_BIG_FILESYSTEMS */
-#if XFS_BIG_FILESYSTEMS
        INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                ((xfs_bmbt_rec_base_t)o << 9) |
                ((xfs_bmbt_rec_base_t)b >> 43));
        INT_SET(r->l1, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)b << 21) |
                  ((xfs_bmbt_rec_base_t)c &
                   (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
-#else  /* !XFS_BIG_FILESYSTEMS */
+#else  /* !XFS_BIG_BLKNOS */
        if (ISNULLSTARTBLOCK(b)) {
                INT_SET(r->l0, ARCH_CONVERT, ((xfs_bmbt_rec_base_t)extent_flag << 63) |
                        ((xfs_bmbt_rec_base_t)o << 9) |
@@ -2635,7 +2627,7 @@ xfs_bmbt_disk_set_allf(
                          ((xfs_bmbt_rec_base_t)c &
                           (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)));
        }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 #endif
 
@@ -2660,15 +2652,13 @@ xfs_bmbt_set_startblock(
        xfs_bmbt_rec_t  *r,
        xfs_fsblock_t   v)
 {
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
        ASSERT((v & XFS_MASK64HI(12)) == 0);
-#endif /* XFS_BIG_FILESYSTEMS */
-#if XFS_BIG_FILESYSTEMS
        r->l0 = (r->l0 & (xfs_bmbt_rec_base_t)XFS_MASK64HI(55)) |
                  (xfs_bmbt_rec_base_t)(v >> 43);
        r->l1 = (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)) |
                  (xfs_bmbt_rec_base_t)(v << 21);
-#else  /* !XFS_BIG_FILESYSTEMS */
+#else  /* !XFS_BIG_BLKNOS */
        if (ISNULLSTARTBLOCK(v)) {
                r->l0 |= (xfs_bmbt_rec_base_t)XFS_MASK64LO(9);
                r->l1 = (xfs_bmbt_rec_base_t)XFS_MASK64HI(11) |
@@ -2679,7 +2669,7 @@ xfs_bmbt_set_startblock(
                r->l1 = ((xfs_bmbt_rec_base_t)v << 21) |
                          (r->l1 & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21));
        }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_BLKNOS */
 }
 
 /*
index d9af87b4b8be140a449e55119138e337f46e0e4d..875bc91e839a40eb70b3eb8af9a0595b5488f9a2 100644 (file)
@@ -108,7 +108,7 @@ typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t, xfs_bmdr_rec_t;
  * Values and macros for delayed-allocation startblock fields.
  */
 #define STARTBLOCKVALBITS      17
-#define STARTBLOCKMASKBITS     (15 + XFS_BIG_FILESYSTEMS * 20)
+#define STARTBLOCKMASKBITS     (15 + XFS_BIG_BLKNOS * 20)
 #define DSTARTBLOCKMASKBITS    (15 + 20)
 #define STARTBLOCKMASK         \
        (((((xfs_fsblock_t)1) << STARTBLOCKMASKBITS) - 1) << STARTBLOCKVALBITS)
index 6e5c5c6365e8512bbce333ce3e3ccc3181083fcd..696f77da9445966df29de10fdf4f1ea8919db1eb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -530,10 +530,9 @@ xfs_dir2_block_getdents(
 
                p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk,
                                                    ptr - (char *)block);
-#if XFS_BIG_FILESYSTEMS
-               p.ino = INT_GET(dep->inumber, ARCH_CONVERT) + mp->m_inoadd;
-#else
                p.ino = INT_GET(dep->inumber, ARCH_CONVERT);
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = (char *)dep->name;
 
index 3ebcdeb5c35cd1f50d85ac95665de728fcbfa049..c75d54f3fda7c72e3d86208fef78dfd5c065d187 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -1118,10 +1118,9 @@ xfs_dir2_leaf_getdents(
 
                p.cook = XFS_DIR2_BYTE_TO_DATAPTR(mp, curoff + length);
 
-#if XFS_BIG_FILESYSTEMS
-               p.ino = INT_GET(dep->inumber, ARCH_CONVERT) + mp->m_inoadd;
-#else
                p.ino = INT_GET(dep->inumber, ARCH_CONVERT);
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = (char *)dep->name;
 
index 81cbda8ffec437506395d7d122f6a89ce838975e..9e9b3836eb27ff032f9ae781366356d431376c65 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -79,10 +79,10 @@ static void xfs_dir2_sf_check(xfs_da_args_t *args);
 #else
 #define        xfs_dir2_sf_check(args)
 #endif /* DEBUG */
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
 static void xfs_dir2_sf_toino4(xfs_da_args_t *args);
 static void xfs_dir2_sf_toino8(xfs_da_args_t *args);
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_INUMS */
 
 /*
  * Given a block directory (dp/block), calculate its size as a shortform (sf)
@@ -136,7 +136,7 @@ xfs_dir2_block_sfsize(
                isdotdot =
                        dep->namelen == 2 &&
                        dep->name[0] == '.' && dep->name[1] == '.';
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
                if (!isdot)
                        i8count += INT_GET(dep->inumber, ARCH_CONVERT) > XFS_DIR2_MAX_SHORT_INUM;
 #endif
@@ -324,7 +324,8 @@ xfs_dir2_sf_addname(
         */
        add_entsize = XFS_DIR2_SF_ENTSIZE_BYNAME(sfp, args->namelen);
        incr_isize = add_entsize;
-#if XFS_BIG_FILESYSTEMS
+       objchange = 0;
+#if XFS_BIG_INUMS
        /*
         * Do we have to change to 8 byte inodes?
         */
@@ -340,10 +341,7 @@ xfs_dir2_sf_addname(
                        ((uint)sizeof(xfs_dir2_ino8_t) -
                         (uint)sizeof(xfs_dir2_ino4_t));
                objchange = 1;
-       } else
-               objchange = 0;
-#else
-       objchange = 0;
+       }
 #endif
        old_isize = (int)dp->i_d.di_size;
        new_isize = old_isize + incr_isize;
@@ -383,7 +381,7 @@ xfs_dir2_sf_addname(
         */
        else {
                ASSERT(pick == 2);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
                if (objchange)
                        xfs_dir2_sf_toino8(args);
 #endif
@@ -437,7 +435,7 @@ xfs_dir2_sf_addname_easy(
         * Update the header and inode.
         */
        sfp->hdr.count++;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        if (args->inumber > XFS_DIR2_MAX_SHORT_INUM)
                sfp->hdr.i8count++;
 #endif
@@ -526,7 +524,7 @@ xfs_dir2_sf_addname_hard(
        XFS_DIR2_SF_PUT_INUMBER_ARCH(sfp, &args->inumber,
                XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT);
        sfp->hdr.count++;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        if (args->inumber > XFS_DIR2_MAX_SHORT_INUM && !objchange)
                sfp->hdr.i8count++;
 #endif
@@ -603,7 +601,7 @@ xfs_dir2_sf_addname_pick(
        /*
         * If changing the inode number size, do it the hard way.
         */
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        if (objchange) {
                return 2;
        }
@@ -657,9 +655,7 @@ xfs_dir2_sf_check(
                        XFS_DIR2_DATA_ENTSIZE(sfep->namelen);
        }
        ASSERT(i8count == sfp->hdr.i8count);
-#if !XFS_BIG_FILESYSTEMS
-       ASSERT(i8count == 0);
-#endif
+       ASSERT(XFS_BIG_INUMS || i8count == 0);
        ASSERT((char *)sfep - (char *)sfp == dp->i_d.di_size);
        ASSERT(offset +
               (sfp->hdr.count + 2) * (uint)sizeof(xfs_dir2_leaf_entry_t) +
@@ -779,10 +775,9 @@ xfs_dir2_sf_getdents(
                                               XFS_DIR2_DATA_DOT_OFFSET)) {
                p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, 0,
                                                XFS_DIR2_DATA_DOTDOT_OFFSET);
-#if XFS_BIG_FILESYSTEMS
-               p.ino = dp->i_ino + mp->m_inoadd;
-#else
                p.ino = dp->i_ino;
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = ".";
                p.namelen = 1;
@@ -805,11 +800,10 @@ xfs_dir2_sf_getdents(
                                               XFS_DIR2_DATA_DOTDOT_OFFSET)) {
                p.cook = XFS_DIR2_DB_OFF_TO_DATAPTR(mp, mp->m_dirdatablk,
                                                XFS_DIR2_DATA_FIRST_OFFSET);
-#if XFS_BIG_FILESYSTEMS
-               p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT) +
-                       mp->m_inoadd;
-#else
-               p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT);
+               p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent,
+                                               ARCH_CONVERT);
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = "..";
                p.namelen = 2;
@@ -843,13 +837,10 @@ xfs_dir2_sf_getdents(
                        XFS_DIR2_SF_GET_OFFSET_ARCH(sfep, ARCH_CONVERT) +
                        XFS_DIR2_DATA_ENTSIZE(p.namelen));
 
-#if XFS_BIG_FILESYSTEMS
-               p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp,
-                               XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT) +
-                       mp->m_inoadd;
-#else
                p.ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp,
                                XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT);
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = (char *)sfep->name;
 
@@ -1014,7 +1005,7 @@ xfs_dir2_sf_removename(
         */
        xfs_idata_realloc(dp, newsize - oldsize, XFS_DATA_FORK);
        sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        /*
         * Are we changing inode number size?
         */
@@ -1039,10 +1030,10 @@ xfs_dir2_sf_replace(
 {
        xfs_inode_t             *dp;            /* incore directory inode */
        int                     i;              /* entry index */
-#if XFS_BIG_FILESYSTEMS || defined(DEBUG)
+#if XFS_BIG_INUMS || defined(DEBUG)
        xfs_ino_t               ino=0;          /* entry old inode number */
 #endif
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        int                     i8elevated;     /* sf_toino8 set i8count=1 */
 #endif
        xfs_dir2_sf_entry_t     *sfep;          /* shortform directory entry */
@@ -1063,7 +1054,7 @@ xfs_dir2_sf_replace(
        ASSERT(dp->i_df.if_u1.if_data != NULL);
        sfp = (xfs_dir2_sf_t *)dp->i_df.if_u1.if_data;
        ASSERT(dp->i_d.di_size >= XFS_DIR2_SF_HDR_SIZE(sfp->hdr.i8count));
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        /*
         * New inode number is large, and need to convert to 8-byte inodes.
         */
@@ -1101,7 +1092,7 @@ xfs_dir2_sf_replace(
         */
        if (args->namelen == 2 &&
            args->name[0] == '.' && args->name[1] == '.') {
-#if XFS_BIG_FILESYSTEMS || defined(DEBUG)
+#if XFS_BIG_INUMS || defined(DEBUG)
                ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp, &sfp->hdr.parent, ARCH_CONVERT);
                ASSERT(args->inumber != ino);
 #endif
@@ -1117,7 +1108,7 @@ xfs_dir2_sf_replace(
                        if (sfep->namelen == args->namelen &&
                            sfep->name[0] == args->name[0] &&
                            memcmp(args->name, sfep->name, args->namelen) == 0) {
-#if XFS_BIG_FILESYSTEMS || defined(DEBUG)
+#if XFS_BIG_INUMS || defined(DEBUG)
                                ino = XFS_DIR2_SF_GET_INUMBER_ARCH(sfp,
                                        XFS_DIR2_SF_INUMBERP(sfep), ARCH_CONVERT);
                                ASSERT(args->inumber != ino);
@@ -1132,14 +1123,14 @@ xfs_dir2_sf_replace(
                 */
                if (i == sfp->hdr.count) {
                        ASSERT(args->oknoent);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
                        if (i8elevated)
                                xfs_dir2_sf_toino4(args);
 #endif
                        return XFS_ERROR(ENOENT);
                }
        }
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        /*
         * See if the old number was large, the new number is small.
         */
@@ -1172,7 +1163,7 @@ xfs_dir2_sf_replace(
        return 0;
 }
 
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
 /*
  * Convert from 8-byte inode numbers to 4-byte inode numbers.
  * The last 8-byte inode number is gone, but the count is still 1.
@@ -1325,4 +1316,4 @@ xfs_dir2_sf_toino8(
        dp->i_d.di_size = newsize;
        xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_DDATA);
 }
-#endif /* XFS_BIG_FILESYSTEMS */
+#endif /* XFS_BIG_INUMS */
index 6369b034d075d8b54e7ea371fa2ac5e6081245fa..e9587e3ef9f437ed2c2e74d4a0add74b47a383e3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -561,10 +561,9 @@ xfs_dir_shortform_getdents(xfs_inode_t *dp, uio_t *uio, int *eofp,
                if (sbp->seqno == 0 || sbp == sbuf)
                        lastresid = uio->uio_resid;
                XFS_PUT_COOKIE(p.cook, mp, 0, sbp[1].seqno, sbp[1].hash);
-#if XFS_BIG_FILESYSTEMS
-               p.ino = sbp->ino + mp->m_inoadd;
-#else
                p.ino = sbp->ino;
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = sbp->name;
                p.namelen = sbp->namelen;
@@ -2142,10 +2141,9 @@ xfs_dir_leaf_getdents_int(
                 * then restore the UIO to the first entry in the current
                 * run of equal-hashval entries (probably one 1 entry long).
                 */
-#if XFS_BIG_FILESYSTEMS
-               p.ino = XFS_GET_DIR_INO_ARCH(mp, namest->inumber, ARCH_CONVERT) + mp->m_inoadd;
-#else
                p.ino = XFS_GET_DIR_INO_ARCH(mp, namest->inumber, ARCH_CONVERT);
+#if XFS_BIG_INUMS
+               p.ino += mp->m_inoadd;
 #endif
                p.name = (char *)namest->name;
                p.namelen = entry->namelen;
index 044306dc428ecb96c06e836a25b23f7b55145d32..a3af2d5a6eb7a501e0f66bde2a1f49ece5ef6672 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003 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
@@ -47,7 +47,7 @@ typedef       __uint32_t      xfs_agino_t;    /* within allocation grp inode number */
  * Used in some places where having 64-bits in the 32-bit kernels
  * costs too much.
  */
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
 typedef        xfs_ino_t       xfs_intino_t;
 #else
 typedef        __uint32_t      xfs_intino_t;
@@ -162,7 +162,7 @@ xfs_agino_t xfs_offbno_to_agino(struct xfs_mount *mp, xfs_agblock_t b, int o);
        ((xfs_agino_t)(((b) << XFS_INO_OFFSET_BITS(mp)) | (o)))
 #endif
 
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
 #define        XFS_MAXINUMBER          ((xfs_ino_t)((1ULL << 56) - 1ULL))
 #define        XFS_INO64_OFFSET        ((xfs_ino_t)(1ULL << 32))
 #else
index d43d387b92a5628d10a516d00a89071446f0085d..27e6f9b7e91a60f725a6032843b129a5aca94cbe 100644 (file)
@@ -222,15 +222,21 @@ xfs_mount_validate_sb(
                return XFS_ERROR(EWRONGFS);
        }
 
-       if (unlikely(sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) {
-               cmn_err(CE_WARN, "XFS: filesystem is marked as having an external log; specify logdev on the\nmount command line.");
+       if (unlikely(
+           sbp->sb_logstart == 0 && mp->m_logdev_targp == mp->m_ddev_targp)) {
+               cmn_err(CE_WARN,
+       "XFS: filesystem is marked as having an external log; "
+       "specify logdev on the\nmount command line.");
                XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(1)",
                                     XFS_ERRLEVEL_HIGH, mp, sbp);
                return XFS_ERROR(EFSCORRUPTED);
        }
 
-       if (unlikely(sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) {
-               cmn_err(CE_WARN, "XFS: filesystem is marked as having an internal log; don't specify logdev on\nthe mount command line.");
+       if (unlikely(
+           sbp->sb_logstart != 0 && mp->m_logdev_targp != mp->m_ddev_targp)) {
+               cmn_err(CE_WARN,
+       "XFS: filesystem is marked as having an internal log; "
+       "don't specify logdev on\nthe mount command line.");
                XFS_CORRUPTION_ERROR("xfs_mount_validate_sb(2)",
                                     XFS_ERRLEVEL_HIGH, mp, sbp);
                return XFS_ERROR(EFSCORRUPTED);
@@ -276,10 +282,14 @@ xfs_mount_validate_sb(
                return XFS_ERROR(EFSCORRUPTED);
        }
 
-#if !XFS_BIG_FILESYSTEMS
-       if (sbp->sb_dblocks > INT_MAX || sbp->sb_rblocks > INT_MAX)  {
+#if !XFS_BIG_BLKNOS
+       if (unlikely(
+           (sbp->sb_dblocks << (__uint64_t)(sbp->sb_blocklog - BBSHIFT))
+               > INT_MAX ||
+           (sbp->sb_rblocks << (__uint64_t)(sbp->sb_blocklog - BBSHIFT))
+               > INT_MAX)) {
                cmn_err(CE_WARN,
-"XFS:  File systems greater than 1TB not supported on this system.");
+       "XFS: File system is too large to be mounted on this system.");
                return XFS_ERROR(E2BIG);
        }
 #endif
@@ -294,7 +304,7 @@ xfs_mount_validate_sb(
        /*
         * Until this is fixed only page-sized or smaller data blocks work.
         */
-       if (sbp->sb_blocksize > PAGE_SIZE) {
+       if (unlikely(sbp->sb_blocksize > PAGE_SIZE)) {
                cmn_err(CE_WARN,
                "XFS: Attempted to mount file system with blocksize %d bytes",
                        sbp->sb_blocksize);
index da9530da18d1c4e9fa8ef0f44f691c5e2f84a598..a7c5179bbd4df6eb7b3497b7e34cbf723b1a2d7b 100644 (file)
@@ -354,7 +354,7 @@ typedef struct xfs_mount {
        __uint64_t              m_maxioffset;   /* maximum inode offset */
        __uint64_t              m_resblks;      /* total reserved blocks */
        __uint64_t              m_resblks_avail;/* available reserved blocks */
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        xfs_ino_t               m_inoadd;       /* add value for ino64_offset */
 #endif
        int                     m_dalign;       /* stripe unit */
@@ -392,9 +392,7 @@ typedef struct xfs_mount {
 #define        XFS_MOUNT_WSYNC         0x00000001      /* for nfs - all metadata ops
                                                   must be synchronous except
                                                   for space allocations */
-#if XFS_BIG_FILESYSTEMS
 #define        XFS_MOUNT_INO64         0x00000002
-#endif
                             /* 0x00000004      -- currently unused */
                             /* 0x00000008      -- currently unused */
 #define XFS_MOUNT_FS_SHUTDOWN  0x00000010      /* atomic stop of all filesystem
index 1e0f0a7cca0a6429eb61eb16dba6963bef446364..e2710264c0544ae16b1a62f0cb82c0f4bd849e46 100644 (file)
@@ -77,7 +77,7 @@ struct xfs_trans;
 #define        XFS_RTLOBIT(w)  xfs_lowbit32(w)
 #define        XFS_RTHIBIT(w)  xfs_highbit32(w)
 
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
 #define        XFS_RTBLOCKLOG(b)       xfs_highbit64(b)
 #else
 #define        XFS_RTBLOCKLOG(b)       xfs_highbit32(b)
index 3c163b46160e6469288b86b0d9352078f6509ce5..9ddf5a692c9c463037e30dc2c423e1707326f1c8 100644 (file)
@@ -78,20 +78,21 @@ typedef __uint64_t __psunsigned_t;
 #endif /* __KERNEL__ */
 
 /*
- * Some types are conditional based on the selected configuration.
- * Set XFS_BIG_FILESYSTEMS=1 or 0 depending on the desired configuration.
- * XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits
- *
- * On linux right now we are limited to 2^32 512 byte blocks in a
- * filesystem, Once this limit is changed, setting this to 1
- * will allow XFS to go larger. With BIG_FILESYSTEMS set to 0
- * a 4K block filesystem could still theoretically be 16Gbytes
- * long, so on an ia32 box the 32 bit page index will then be
- * the limiting factor.
+ * Some types are conditional depending on the target system.
+ * XFS_BIG_BLKNOS needs block layer disk addresses to be 64 bits.
+ * XFS_BIG_INUMS needs the VFS inode number to be 64 bits, as well
+ * as requiring XFS_BIG_BLKNOS to be set.
  */
-
-#ifndef XFS_BIG_FILESYSTEMS
-#define XFS_BIG_FILESYSTEMS    0
+#if defined(CONFIG_LBD) || (defined(HAVE_SECTOR_T) && (BITS_PER_LONG == 64))
+# define XFS_BIG_BLKNOS        1
+# if BITS_PER_LONG == 64
+#  define XFS_BIG_INUMS        1
+# else
+#  define XFS_BIG_INUMS        0
+# endif
+#else
+# define XFS_BIG_BLKNOS        0
+# define XFS_BIG_INUMS 0
 #endif
 
 typedef __uint32_t     xfs_agblock_t;  /* blockno in alloc. group */
@@ -126,7 +127,7 @@ typedef     __uint64_t      xfs_dfilblks_t; /* number of blocks in a file */
 /*
  * Memory based types are conditional.
  */
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_BLKNOS
 typedef        __uint64_t      xfs_fsblock_t;  /* blockno in filesystem (agno|agbno) */
 typedef __uint64_t     xfs_rfsblock_t; /* blockno in filesystem (raw) */
 typedef __uint64_t     xfs_rtblock_t;  /* extent (block) in realtime area */
index 5d9eda3a3e5d3d5e9d011d87e365f1b837704e27..60c08799dcd40e1e3c782874d9c93cc787fd9b75 100644 (file)
@@ -264,7 +264,7 @@ xfs_start_flags(
         */
        if (ap->flags & XFSMNT_WSYNC)
                mp->m_flags |= XFS_MOUNT_WSYNC;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        if (ap->flags & XFSMNT_INO64) {
                mp->m_flags |= XFS_MOUNT_INO64;
                mp->m_inoadd = XFS_INO64_OFFSET;
@@ -769,13 +769,13 @@ xfs_statvfs(
        statp->f_blocks = sbp->sb_dblocks - lsize;
        statp->f_bfree = statp->f_bavail = sbp->sb_fdblocks;
        fakeinos = statp->f_bfree << sbp->sb_inopblog;
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        fakeinos += mp->m_inoadd;
 #endif
        statp->f_files =
            MIN(sbp->sb_icount + fakeinos, (__uint64_t)XFS_MAXINUMBER);
        if (mp->m_maxicount)
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
                if (!mp->m_inoadd)
 #endif
                        statp->f_files =
@@ -1674,7 +1674,7 @@ xfs_parseargs(
                        args->flags |= XFSMNT_NORECOVERY;
                } else if (!strcmp(this_char, MNTOPT_INO64)) {
                        args->flags |= XFSMNT_INO64;
-#ifndef XFS_BIG_FILESYSTEMS
+#if !XFS_BIG_INUMS
                        printk("XFS: %s option not allowed on this system\n",
                                MNTOPT_INO64);
                        return EINVAL;
@@ -1697,7 +1697,7 @@ xfs_parseargs(
                        dswidth = simple_strtoul(value, &eov, 10);
                } else if (!strcmp(this_char, MNTOPT_64BITINODE)) {
                        args->flags &= ~XFSMNT_32BITINODES;
-#ifndef XFS_BIG_FILESYSTEMS
+#if !XFS_BIG_INUMS
                        printk("XFS: %s option not allowed on this system\n",
                                MNTOPT_64BITINODE);
                        return EINVAL;
index 3cfba4d9f4f712b36fd4bb3160dd6afa5f920cc4..309edbe95287904447208bdd4752e13a40349879 100644 (file)
@@ -152,10 +152,9 @@ xfs_getattr(
        vap->va_nblocks =
                XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks);
        vap->va_fsid = mp->m_dev;
-#if XFS_BIG_FILESYSTEMS
-       vap->va_nodeid = ip->i_ino + mp->m_inoadd;
-#else
        vap->va_nodeid = ip->i_ino;
+#if XFS_BIG_INUMS
+       vap->va_nodeid += mp->m_inoadd;
 #endif
        vap->va_nlink = ip->i_d.di_nlink;
 
index 1f7daff612f4ae7ba9bbeef7d2b4a4329ff8a7b3..6ed6742b9666670aae42b2b505b9838fa04937c8 100644 (file)
@@ -4692,7 +4692,7 @@ xfsidbg_xmount(xfs_mount_t *mp)
                mp->m_attroffset, mp->m_maxicount, mp->m_inoalign_mask);
        kdb_printf("resblks %Ld resblks_avail %Ld\n", mp->m_resblks,
                mp->m_resblks_avail);
-#if XFS_BIG_FILESYSTEMS
+#if XFS_BIG_INUMS
        kdb_printf(" inoadd %llx\n", (unsigned long long) mp->m_inoadd);
 #else
        kdb_printf("\n");