#
PKG_MAJOR=1
PKG_MINOR=3
-PKG_REVISION=13
+PKG_REVISION=14
PKG_BUILD=0
+xfsprogs (1.3.14-1) unstable; urgency=low
+
+ * Fix minor package version numbering issue (closes: #117545)
+ * Fix bug in mkfs.xfs device size cross-check for realtime device
+
+ -- Nathan Scott <nathans@debian.org> Wed, 5 Dec 2001 17:13:06 +1100
+
xfsprogs (1.3.13-0) unstable; urgency=low
* New upstream release
+xfsprogs-1.3.14 (05 December 2001)
+ - fix minor debian package version numbering issue
+ - add documentation for xfs_db(8) label/uuid commands
+ - automatic inode sizing code in mkfs.xfs has been removed
+ (restricting inodes to 32 bits) - Steve's recent kernel
+ changes mean this is no longer an issue
+ - fix bug in mkfs.xfs size cross-check for realtime device
+
xfsprogs-1.3.13 (25 October 2001)
- fix bug in mkfs for 1Tbyte + filesystems
- sync with recent kernel changes - this does not affect
int dirversion,
int isint)
{
-
- int inodebits;
-
- inodebits = (libxfs_highbit32(geo.blocksize/geo.inodesize - 1) + 1)
- + (libxfs_highbit64(geo.agblocks - 1) + 1)
- + (libxfs_highbit64(geo.agcount - 1) + 1);
-
printf("meta-data=%-22s isize=%-6d agcount=%d, agsize=%d blks\n"
"data =%-22s bsize=%-6d blocks=%lld, imaxpct=%d\n"
" =%-22s sunit=%-6d swidth=%d blks, unwritten=%d\n"
- " =%-22s imaxbits=%-6d\n"
"naming =version %-14d bsize=%-6d\n"
"log =%-22s bsize=%-6d blocks=%d\n"
"realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n",
mntpoint, geo.inodesize, geo.agcount, geo.agblocks,
"", geo.blocksize, (long long)geo.datablocks, geo.imaxpct,
"", geo.sunit, geo.swidth, unwritten,
- "", inodebits,
dirversion, geo.dirblocksize,
isint ? "internal" : "external", geo.blocksize, geo.logblocks,
geo.rtblocks ? "external" : "none",
long esize; /* new rt extent size */
int ffd; /* mount point file descriptor */
xfs_fsop_geom_t geo; /* current fs geometry */
- int Iflag; /* force flag for big inode numbers */
int iflag; /* -i flag */
int isint; /* log is currently internal */
int lflag; /* -l flag */
mtab = MOUNTED;
progname = basename(argv[0]);
- aflag = dflag = Iflag = iflag = lflag = mflag = nflag = rflag = xflag = 0;
+ aflag = dflag = iflag = lflag = mflag = nflag = rflag = xflag = 0;
maxpct = esize = 0;
dsize = lsize = rsize = 0LL;
- while ((c = getopt(argc, argv, "dD:e:IilL:m:np:rR:t:xV")) != EOF) {
+ while ((c = getopt(argc, argv, "dD:e:ilL:m:np:rR:t:xV")) != EOF) {
switch (c) {
case 'D':
dsize = atoll(optarg);
esize = atol(optarg);
rflag = 1;
break;
- case 'I':
- Iflag = 1;
- break;
case 'i':
lflag = iflag = 1;
break;
error = 0;
if (dflag | aflag) {
xfs_growfs_data_t in;
- int inodebits;
__uint64_t new_agcount;
if (!mflag)
new_agcount = dsize / geo.agblocks
+ (dsize % geo.agblocks != 0);
- inodebits = (libxfs_highbit32(geo.blocksize/geo.inodesize - 1) + 1)
- + (libxfs_highbit64(geo.agblocks - 1) + 1)
- + (libxfs_highbit64(new_agcount - 1) + 1);
-
if (!error && dsize < geo.datablocks) {
fprintf(stderr, "data size %lld too small,"
" old size is %lld\n",
if (mflag)
fprintf(stderr,
"inode max pct unchanged, skipping\n");
- } else if (!error && !Iflag
- && inodebits > XFS_MAX_INODE_SIG_BITS) {
- fprintf(stderr,
- "warning: inode numbers would exceed %d "
- "significant bits (%d)\n"
- " Use -I option to allow this\n",
- XFS_MAX_INODE_SIG_BITS, inodebits);
- error = 1;
} else if (!error && !nflag) {
in.newblocks = (__u64)dsize;
in.imaxpct = (__u32)maxpct;
progname, strerror(errno));
error = 1;
}
- if (inodebits > XFS_MAX_INODE_SIG_BITS) {
- fprintf(stderr,
- "inode numbers exceed %d "
- "significant bits (%d)\n",
- XFS_MAX_INODE_SIG_BITS, inodebits);
- }
}
}
int m_bsize; /* fs logical block size */
xfs_agnumber_t m_agfrotor; /* last ag where space found */
xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */
+ xfs_agnumber_t m_maxagi; /* highest inode alloc group */
int m_ihsize; /* size of next field */
struct xfs_ihash *m_ihash; /* fs private inode hash table*/
struct xfs_inode *m_inodes; /* active inode list */
buftarg_t m_logdev_targ; /* ptr to log device */
buftarg_t m_rtdev_targ; /* ptr to rt device */
buftarg_t *m_ddev_targp; /* saves taking the address */
+#define m_rtdev_targp(m)(&(m)->m_rtdev_targ)
#define m_dev m_ddev_targ.dev
#define m_logdev m_logdev_targ.dev
#define m_rtdev m_rtdev_targ.dev
#define XFS_MOUNT_DFLT_IOSIZE 0x00001000 /* set default i/o size */
#define XFS_MOUNT_OSYNCISDSYNC 0x00002000 /* treat o_sync like o_dsync */
#define XFS_MOUNT_NOUUID 0x00004000 /* ignore uuid during mount */
+#define XFS_MOUNT_32BITINODES 0x00008000 /* do not create inodes above
+ * 32 bits in size */
/*
* Flags for m_cxfstype
void xfs_freesb(xfs_mount_t *);
void _xfs_force_shutdown(struct xfs_mount *, int, char *, int);
int xfs_syncsub(xfs_mount_t *, int, int, int *);
+void xfs_initialize_perag(xfs_mount_t *, int);
void xfs_xlatesb(void *, struct xfs_sb *, int, xfs_arch_t, __int64_t);
/*
#define xfs_buf_item_log_debug(bip,a,b) ((void) 0) /* debug only */
#define xfs_validate_extents(e,n,f) ((void) 0) /* debug only */
#define xfs_buf_relse(bp) libxfs_putbuf(bp)
-#define xfs_read_buf(mp,x,blkno,len,f,bpp) \
- ( *(bpp) = libxfs_readbuf( (mp)->m_dev, (blkno), (len), 1), 0 )
+#define xfs_read_buf(mp,devp,blkno,len,f,bpp) \
+ ( *(bpp) = libxfs_readbuf( *(dev_t*)devp, (blkno), (len), 1), 0 )
/* transaction management */
#define EFSCORRUPTED 990 /* Filesystem is corrupted */
#define ktrace_t void
#define m_ddev_targp m_dev
+#define m_rtdev_targp(m)(&(m)->m_rtdev)
#define KERN_WARNING
#define XFS_ERROR(e) (e)
#define XFS_TEST_ERROR(expr,a,b,c) ( expr )
(unsigned long long) mp->m_sb.sb_rblocks);
return XFS_ERROR(E2BIG);
}
- error = xfs_read_buf(mp, &mp->m_rtdev_targ, d - 1, 1, 0, &bp);
+ error = xfs_read_buf(mp, m_rtdev_targp(mp), d - 1, 1, 0, &bp);
if (error) {
printk(KERN_WARNING
"XFS: RT mount - xfs_read_buf returned %d\n", error);
xfs_growfs, xfs_info \- expand an XFS filesystem
.SH SYNOPSIS
.nf
-\f3xfs_growfs\f1 [ \f3\-dIilnrxV\f1 ] [ \f3\-D\f1 size ] [ \f3\-e\f1 rtextsize ]
+\f3xfs_growfs\f1 [ \f3\-dilnrxV\f1 ] [ \f3\-D\f1 size ] [ \f3\-e\f1 rtextsize ]
[ \f3\-L\f1 size ] [ \f3\-m\f1 maxpct ] [ \f3-t\f1 mtab ]
[ \f3\-R\f1 size ] mount-point
\f3xfs_info\f1 [ \f3-t\f1 mtab ] mount-point
.B \-r
.BI extsize= nnnn.
.TP
-.B \-I
-Allow new inode numbers to exceed 32 significant bits.
-(See CONSIDERATIONS below.)
-.TP
.B \-i
The new log is an internal log
(inside the data section).
reside.
In order to grow a filesystem, it is necessary to provide added
space for it to occupy.
-Therefore there must be at least one spare new
-disk partition available.
-Adding the space is done through the mechanism of
-logical volumes.
-.SH CONSIDERATIONS
-XFS uses 64-bit inode numbers internally; however, the number of
-significant bits in an inode number is
-affected by filesystem geometry. In
-practice, filesystem size and inode size are the predominant factors.
-The Linux kernel and most applications cannot currently handle
-inode numbers greater than 32 significant bits, so
-.I xfs_growfs
-will issue a warning and fail if growing the filesystem will
-cause the significant bits in inode numbers to exceed 32 bits.
-This can be overwritten with the
-.B \-I
-option.
-.PP
-If you anticipate significantly growing filesystems after using
-.I mkfs.xfs
-you should take into consideration this inode number growth
-as well,
-and keep the number of significant digits sufficiently small
-to allow for future growth. On average, doubling the size
-of the inode will reduce significant bits by one, and doubling
-the size of the filesystem will increase significant bits
-by one.
+Therefore there must be at least one spare new disk partition available.
+Adding the space is often done through the use of a logical volume manager.
.SH SEE ALSO
mkfs.xfs(8),
lvm(8),
int imaxpct;
int imflag;
int inodelog;
- int inodebits;
int inopblock;
int ipflag;
int isflag;
}
}
-#if 0
- /*
- * Check to see if inode number will be > 32 significant bits
- * Note that libxfs_highbitXX returns 0 -> XX-1,
- * so to get the bit count, add one to what we get.
- */
-
- inodebits = (libxfs_highbit32(blocksize/isize - 1) + 1)
- + (libxfs_highbit64(agsize - 1) + 1)
- + (libxfs_highbit64(agcount - 1) + 1);
-
- if (inodebits > XFS_MAX_INODE_SIG_BITS) {
-
- int new_isize;
- int new_isize_ok;
-
- new_isize = isize << (inodebits - XFS_MAX_INODE_SIG_BITS);
-
- new_isize_ok = (new_isize <= blocksize / XFS_MIN_INODE_PERBLOCK
- && new_isize <= XFS_DINODE_MAX_SIZE);
-
- if (ilflag + ipflag + isflag == 0) {
- /*
- * If we didn't specify inode size, just bump it up
- * unless we can't go far enough.
- */
-
- if (new_isize_ok) {
- isize = new_isize;
- /* re-calc inodebits */
- inodebits = (libxfs_highbit32(blocksize/isize - 1) + 1)
- + (libxfs_highbit64(agsize - 1) + 1)
- + (libxfs_highbit64(agcount - 1) + 1);
- inodelog = libxfs_highbit32(isize);
- /* Let's not get too chatty, no fprintf here */
- } else {
- /*
- * Can't do nothin' for ya, man!
- * Don't bother changing isize at all,
- * one bit over is as bad as 20.
- */
- fprintf(stderr,
- "warning: inode numbers exceed %d "
- " significant bits (%d)\n",
- XFS_MAX_INODE_SIG_BITS, inodebits);
- }
- } else {
- /* if isize specified, just warn the user */
- fprintf(stderr,
- "warning: inode numbers exceed %d "
- "significant bits (%d)\n",
- XFS_MAX_INODE_SIG_BITS, inodebits);
- if (new_isize_ok) {
- fprintf(stderr,
- " increase inode size to %d to "
- "avoid this\n", new_isize);
- }
- }
- }
-#endif
-
protostring = setup_proto(protofile);
bsize = 1 << (blocklog - BBSHIFT);
buf = libxfs_getbuf(xi.ddev, XFS_SB_DADDR, 1);
"meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
"data =%-22s bsize=%-6d blocks=%lld, imaxpct=%d\n"
" =%-22s sunit=%-6d swidth=%d blks, unwritten=%d\n"
- " =%-22s imaxbits=%-6d\n"
"naming =version %-14d bsize=%-6d\n"
"log =%-22s bsize=%-6d blocks=%lld\n"
"realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n",
dfile, isize, (long long)agcount, (long long)agsize,
"", blocksize, (long long)dblocks, sbp->sb_imax_pct,
"", dsunit, dswidth, extent_flagging,
- "", inodebits,
dirversion, dirversion == 1 ? blocksize : dirblocksize,
logfile, 1 << blocklog, (long long)logblocks,
rtfile, rtextblocks << blocklog,