From: Nathan Scott Date: Fri, 19 Sep 2003 05:37:49 +0000 (+0000) Subject: xfsprogs update - fix db to display new inode flags, sync user/kernel code. X-Git-Tag: v2.6.0~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b288ccff0146b3aca8dd5c5b47543ce7c523211;p=thirdparty%2Fxfsprogs-dev.git xfsprogs update - fix db to display new inode flags, sync user/kernel code. --- diff --git a/VERSION b/VERSION index 869cdc5f3..4b1c5f23c 100644 --- a/VERSION +++ b/VERSION @@ -3,5 +3,5 @@ # PKG_MAJOR=2 PKG_MINOR=5 -PKG_REVISION=8 +PKG_REVISION=9 PKG_BUILD=0 diff --git a/db/check.c b/db/check.c index e81fdce4e..b910fafe0 100644 --- a/db/check.c +++ b/db/check.c @@ -2679,15 +2679,19 @@ process_inode( if (verbose || id->ilist || CHECK_BLIST(bno)) dbprintf("inode %lld mode %#o fmt %s " "afmt %s " - "nex %d anex %d nblk %lld sz %lld%s%s\n", + "nex %d anex %d nblk %lld sz %lld%s%s%s%s%s%s%s\n", id->ino, dic->di_mode, fmtnames[(int)dic->di_format], fmtnames[(int)dic->di_aformat], dic->di_nextents, dic->di_anextents, dic->di_nblocks, dic->di_size, dic->di_flags & XFS_DIFLAG_REALTIME ? " rt" : "", - dic->di_flags & XFS_DIFLAG_PREALLOC ? " pre" : "" - ); + dic->di_flags & XFS_DIFLAG_PREALLOC ? " pre" : "", + dic->di_flags & XFS_DIFLAG_IMMUTABLE? " imm" : "", + dic->di_flags & XFS_DIFLAG_APPEND ? " app" : "", + dic->di_flags & XFS_DIFLAG_SYNC ? " syn" : "", + dic->di_flags & XFS_DIFLAG_NOATIME ? " noa" : "", + dic->di_flags & XFS_DIFLAG_NODUMP ? " nod" : ""); security = 0; switch (dic->di_mode & IFMT) { case IFDIR: diff --git a/db/inode.c b/db/inode.c index e69e39c26..c15eb83c2 100644 --- a/db/inode.c +++ b/db/inode.c @@ -122,6 +122,21 @@ const field_t inode_core_flds[] = { { "realtime", FLDT_UINT1, OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_REALTIME_BIT - 1), C1, 0, TYP_NONE }, + { "immutable", FLDT_UINT1, + OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_IMMUTABLE_BIT-1), C1, + 0, TYP_NONE }, + { "append", FLDT_UINT1, + OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_APPEND_BIT - 1), C1, + 0, TYP_NONE }, + { "sync", FLDT_UINT1, + OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_SYNC_BIT - 1), C1, + 0, TYP_NONE }, + { "noatime", FLDT_UINT1, + OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_NOATIME_BIT - 1), C1, + 0, TYP_NONE }, + { "nodump", FLDT_UINT1, + OI(COFF(flags) + bitsz(__uint16_t) - XFS_DIFLAG_NODUMP_BIT - 1), C1, + 0, TYP_NONE }, { "gen", FLDT_UINT32D, OI(COFF(gen)), C1, 0, TYP_NONE }, { NULL } }; diff --git a/debian/changelog b/debian/changelog index a51249af0..1fa27495c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -xfsprogs (2.5.8-1) unstable; urgency=low +xfsprogs (2.5.9-1) unstable; urgency=low * New upstream release. - -- Nathan Scott Fri, 12 Sep 2003 13:49:46 +1000 + -- Nathan Scott Fri, 19 Sep 2003 14:15:16 +1000 xfsprogs (2.5.6-1) unstable; urgency=low diff --git a/doc/CHANGES b/doc/CHANGES index 61f2dd125..277b621b8 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,7 @@ +xfsprogs-2.5.9 (19 September 2003) + - Sync up user/kernel source in libxfs, libxlog and headers. + - Add new inode flags into xfs_db too. + xfsprogs-2.5.8 (12 September 2003) - Add missing options to xfs_db frag command one-line summary. - Add xfs_io commands for setting and clearing new inode flags diff --git a/include/builddefs.in b/include/builddefs.in index 3f535f6fb..6ff453a42 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -94,8 +94,6 @@ ENABLE_EDITLINE = @enable_editline@ ENABLE_READLINE = @enable_readline@ HAVE_ZIPPED_MANPAGES = @have_zipped_manpages@ -LCFLAGS += -DXFS_BIG_FILES=1 -DXFS_BIG_FILESYSTEMS=1 - ifeq ($(PKG_PLATFORM),linux) PCFLAGS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 endif diff --git a/include/libxfs.h b/include/libxfs.h index d77ce718e..12cc5954a 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -32,6 +32,9 @@ #ifndef __LIBXFS_H__ #define __LIBXFS_H__ +#define XFS_BIG_INUMS 1 +#define XFS_BIG_BLKNOS 1 + #include #include diff --git a/include/xfs_arch.h b/include/xfs_arch.h index d22e57c76..017d607d9 100644 --- a/include/xfs_arch.h +++ b/include/xfs_arch.h @@ -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__ @@ -41,10 +41,10 @@ #include #ifdef __LITTLE_ENDIAN -#define __BYTE_ORDER __LITTLE_ENDIAN +# define __BYTE_ORDER __LITTLE_ENDIAN #endif #ifdef __BIG_ENDIAN -#define __BYTE_ORDER __BIG_ENDIAN +# define __BYTE_ORDER __BIG_ENDIAN #endif #endif /* __KERNEL__ */ @@ -60,11 +60,9 @@ /* generic swapping macros */ -#ifndef HAVE_SWABMACROS #define INT_SWAP16(type,var) ((typeof(type))(__swab16((__u16)(var)))) #define INT_SWAP32(type,var) ((typeof(type))(__swab32((__u32)(var)))) #define INT_SWAP64(type,var) ((typeof(type))(__swab64((__u64)(var)))) -#endif #define INT_SWAP(type, var) \ ((sizeof(type) == 8) ? INT_SWAP64(type,var) : \ @@ -241,7 +239,7 @@ (INT_GET_UNALIGNED_32_BE(pointer)) \ ) -#if XFS_BIG_FILESYSTEMS +#if XFS_BIG_INUMS #define DIRINO_GET_ARCH(pointer,arch) \ ( ((arch) == ARCH_NOCONVERT) \ ? \ diff --git a/include/xfs_bmap_btree.h b/include/xfs_bmap_btree.h index d9af87b4b..875bc91e8 100644 --- a/include/xfs_bmap_btree.h +++ b/include/xfs_bmap_btree.h @@ -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) diff --git a/include/xfs_dinode.h b/include/xfs_dinode.h index 0af61bc72..86968706b 100644 --- a/include/xfs_dinode.h +++ b/include/xfs_dinode.h @@ -471,13 +471,21 @@ xfs_dinode_t *xfs_buf_to_dinode(struct xfs_buf *bp); * There should be a one-to-one correspondence between these flags and the * XFS_XFLAG_s. */ -#define XFS_DIFLAG_REALTIME_BIT 0 /* file's blocks come from rt area */ -#define XFS_DIFLAG_PREALLOC_BIT 1 /* file space has been preallocated */ -#define XFS_DIFLAG_NEWRTBM_BIT 2 /* for rtbitmap inode, new format */ -#define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT) -#define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT) -#define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT) -#define XFS_DIFLAG_ALL \ - (XFS_DIFLAG_REALTIME|XFS_DIFLAG_PREALLOC|XFS_DIFLAG_NEWRTBM) +#define XFS_DIFLAG_REALTIME_BIT 0 /* file's blocks come from rt area */ +#define XFS_DIFLAG_PREALLOC_BIT 1 /* file space has been preallocated */ +#define XFS_DIFLAG_NEWRTBM_BIT 2 /* for rtbitmap inode, new format */ +#define XFS_DIFLAG_IMMUTABLE_BIT 3 /* inode is immutable */ +#define XFS_DIFLAG_APPEND_BIT 4 /* inode is append-only */ +#define XFS_DIFLAG_SYNC_BIT 5 /* inode is written synchronously */ +#define XFS_DIFLAG_NOATIME_BIT 6 /* do not update atime */ +#define XFS_DIFLAG_NODUMP_BIT 7 /* do not dump */ +#define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT) +#define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT) +#define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT) +#define XFS_DIFLAG_IMMUTABLE (1 << XFS_DIFLAG_IMMUTABLE_BIT) +#define XFS_DIFLAG_APPEND (1 << XFS_DIFLAG_APPEND_BIT) +#define XFS_DIFLAG_SYNC (1 << XFS_DIFLAG_SYNC_BIT) +#define XFS_DIFLAG_NOATIME (1 << XFS_DIFLAG_NOATIME_BIT) +#define XFS_DIFLAG_NODUMP (1 << XFS_DIFLAG_NODUMP_BIT) #endif /* __XFS_DINODE_H__ */ diff --git a/include/xfs_inode.h b/include/xfs_inode.h index 47ae63348..9994dd607 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -264,8 +264,6 @@ typedef struct xfs_inode { sema_t i_flock; /* inode flush lock */ atomic_t i_pincount; /* inode pin count */ wait_queue_head_t i_ipin_wait; /* inode pinning wait queue */ - struct xfs_inode **i_refcache; /* ptr to entry in ref cache */ - struct xfs_inode *i_release; /* inode to unref */ /* I/O state */ xfs_iocore_t i_iocore; /* I/O core */ diff --git a/include/xfs_inum.h b/include/xfs_inum.h index 044306dc4..a3af2d5a6 100644 --- a/include/xfs_inum.h +++ b/include/xfs_inum.h @@ -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 diff --git a/include/xfs_log.h b/include/xfs_log.h index 7e2c9eb37..1bb245229 100644 --- a/include/xfs_log.h +++ b/include/xfs_log.h @@ -53,8 +53,8 @@ * endian issues in treating two 32 bit numbers as one 64 bit number */ static -#if defined(__GNUC__) && (__GNUC__ == 2) && ( (__GNUC_MINOR__ == 95) || (__GNUC_MINOR__ == 96)) -__attribute__((unused)) /* gcc 2.95, 2.96 miscompile this when inlined */ +#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 95) +__attribute__((unused)) /* gcc 2.95 miscompiles this when inlined */ #else __inline__ #endif diff --git a/include/xfs_mount.h b/include/xfs_mount.h index c835205a2..efe1fa311 100644 --- a/include/xfs_mount.h +++ b/include/xfs_mount.h @@ -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 @@ -413,10 +411,11 @@ typedef struct xfs_mount { #define XFS_MOUNT_DFLT_IOSIZE 0x00001000 /* set default i/o size */ #define XFS_MOUNT_OSYNCISOSYNC 0x00002000 /* o_sync is REALLY o_sync */ /* osyncisdsync is now default*/ -#define XFS_MOUNT_NOUUID 0x00004000 /* ignore uuid during mount */ -#define XFS_MOUNT_32BITINODES 0x00008000 /* do not create inodes above +#define XFS_MOUNT_32BITINODES 0x00004000 /* do not create inodes above * 32 bits in size */ -#define XFS_MOUNT_NOLOGFLUSH 0x00010000 +#define XFS_MOUNT_32BITINOOPT 0x00008000 /* saved mount option state */ +#define XFS_MOUNT_NOUUID 0x00010000 /* ignore uuid during mount */ +#define XFS_MOUNT_NOLOGFLUSH 0x00020000 /* * Default minimum read and write sizes. diff --git a/include/xfs_rtalloc.h b/include/xfs_rtalloc.h index 1e0f0a7cc..e2710264c 100644 --- a/include/xfs_rtalloc.h +++ b/include/xfs_rtalloc.h @@ -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) diff --git a/include/xfs_types.h b/include/xfs_types.h index 38c28e921..554f909b4 100644 --- a/include/xfs_types.h +++ b/include/xfs_types.h @@ -75,31 +75,26 @@ typedef __uint64_t __psunsigned_t; #error BITS_PER_LONG must be 32 or 64 #endif -#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. */ - #if defined(CONFIG_LBD) || (defined(HAVE_SECTOR_T) && (BITS_PER_LONG == 64)) -# ifndef XFS_BIG_FILESYSTEMS -# define XFS_BIG_FILESYSTEMS 1 -# endif +# define XFS_BIG_BLKNOS 1 +# if BITS_PER_LONG == 64 +# define XFS_BIG_INUMS 1 +# else +# define XFS_BIG_INUMS 0 +# endif #else -# ifndef XFS_BIG_FILESYSTEMS -# define XFS_BIG_FILESYSTEMS 0 -# endif +# define XFS_BIG_BLKNOS 0 +# define XFS_BIG_INUMS 0 #endif +#endif /* __KERNEL__ */ + typedef __uint32_t xfs_agblock_t; /* blockno in alloc. group */ typedef __uint32_t xfs_extlen_t; /* extent length in blocks */ typedef __uint32_t xfs_agnumber_t; /* allocation group number */ @@ -132,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 */ @@ -216,6 +211,6 @@ typedef enum { #define XFS_MKDEV(major,minor) ((xfs_dev_t)(((major)<m_dev = dev; mp->m_rtdev = rtdev; mp->m_logdev = logdev; - mp->m_flags = XFS_MOUNT_32BITINODES; + mp->m_flags = (XFS_MOUNT_32BITINODES|XFS_MOUNT_32BITINOOPT); mp->m_sb = *sb; sbp = &(mp->m_sb); manage_zones(0); diff --git a/libxfs/xfs.h b/libxfs/xfs.h index 5c3ca99d0..de54800e9 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -263,6 +263,7 @@ typedef struct { dev_t dev; } xfs_buftarg_t; #define XFS_MOUNT_WSYNC 0 /* ignored in userspace */ #define XFS_MOUNT_NOALIGN 0 /* ignored in userspace */ #define XFS_MOUNT_32BITINODES 0x1 /* enforce in userspace */ +#define XFS_MOUNT_32BITINOOPT 0x2 /* enforce in userspace */ #define XFS_ILOCK_EXCL 0 #define down_read(a) ((void) 0) #define up_read(a) ((void) 0) diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c index bc7f46e21..233204d48 100644 --- a/libxfs/xfs_bmap_btree.c +++ b/libxfs/xfs_bmap_btree.c @@ -1564,7 +1564,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 @@ -1580,7 +1580,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) { @@ -1641,7 +1641,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 @@ -1655,7 +1655,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 */ } /* @@ -1712,7 +1712,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 @@ -1726,7 +1726,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 */ } /* @@ -2137,17 +2137,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) | @@ -2163,7 +2161,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 */ } /* @@ -2183,17 +2181,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) | @@ -2209,7 +2205,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 @@ -2228,17 +2224,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) | @@ -2254,7 +2248,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 */ } /* @@ -2274,17 +2268,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) | @@ -2300,7 +2292,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 @@ -2325,15 +2317,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) | @@ -2344,7 +2334,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 */ } /* diff --git a/libxfs/xfs_dir2_sf.c b/libxfs/xfs_dir2_sf.c index 76c9a5077..ab55ac38a 100644 --- a/libxfs/xfs_dir2_sf.c +++ b/libxfs/xfs_dir2_sf.c @@ -90,7 +90,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 @@ -278,7 +278,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? */ @@ -294,10 +295,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; @@ -337,7 +335,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 @@ -391,7 +389,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 @@ -480,7 +478,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 @@ -557,7 +555,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; } @@ -611,9 +609,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) + @@ -816,7 +812,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? */ @@ -841,10 +837,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 */ @@ -865,7 +861,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. */ @@ -903,7 +899,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 @@ -919,7 +915,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); @@ -934,14 +930,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. */ @@ -974,7 +970,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. @@ -1127,4 +1123,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 */ diff --git a/libxfs/xfs_dir_leaf.c b/libxfs/xfs_dir_leaf.c index 3f532f5c4..41bb89712 100644 --- a/libxfs/xfs_dir_leaf.c +++ b/libxfs/xfs_dir_leaf.c @@ -1593,7 +1593,6 @@ xfs_dir_leaf_moveents(xfs_dir_leafblock_t *leaf_s, int start_s, entry_d = &leaf_d->entries[start_d]; for (i = 0; i < count; entry_s++, entry_d++, i++) { ASSERT(INT_GET(entry_s->nameidx, ARCH_CONVERT) >= INT_GET(hdr_s->firstused, ARCH_CONVERT)); - ASSERT(entry_s->namelen < MAXNAMELEN); tmp = XFS_DIR_LEAF_ENTSIZE_BYENTRY(entry_s); INT_MOD(hdr_d->firstused, ARCH_CONVERT, -(tmp)); entry_d->hashval = entry_s->hashval; /* INT_: direct copy */ diff --git a/libxfs/xfs_mount.c b/libxfs/xfs_mount.c index 3c1258f8a..4f471ff9a 100644 --- a/libxfs/xfs_mount.c +++ b/libxfs/xfs_mount.c @@ -242,9 +242,11 @@ xfs_initialize_perag(xfs_mount_t *mp, int agcount) ino = XFS_AGINO_TO_INO(mp, agcount - 1, agino); /* Clear the mount flag if no inode can overflow 32 bits - * on this filesystem. + * on this filesystem, or if specifically requested.. */ - if (ino <= max_inum) { + if ((mp->m_flags & XFS_MOUNT_32BITINOOPT) && ino > max_inum) { + mp->m_flags |= XFS_MOUNT_32BITINODES; + } else { mp->m_flags &= ~XFS_MOUNT_32BITINODES; } diff --git a/libxlog/xfs_log_recover.c b/libxlog/xfs_log_recover.c index 214c3f202..e7de0e88b 100644 --- a/libxlog/xfs_log_recover.c +++ b/libxlog/xfs_log_recover.c @@ -987,7 +987,7 @@ xlog_recover_add_item( { xlog_recover_item_t *item; - item = kmem_zalloc(sizeof(xlog_recover_item_t), 0); + item = kmem_zalloc(sizeof(xlog_recover_item_t), KM_SLEEP); xlog_recover_insert_item_backq(itemq, item); } @@ -1071,7 +1071,7 @@ xlog_recover_add_to_trans( item->ri_total = in_f->ilf_size; ASSERT(item->ri_total <= XLOG_MAX_REGIONS_IN_ITEM); item->ri_buf = kmem_zalloc((item->ri_total * - sizeof(xfs_log_iovec_t)), 0); + sizeof(xfs_log_iovec_t)), KM_SLEEP); } ASSERT(item->ri_total > item->ri_cnt); /* Description region is ri_buf[0] */