Hello community, here is the log from the commit of package xfsprogs for openSUSE:Factory checked in at 2015-07-16 17:16:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xfsprogs (Old) and /work/SRC/openSUSE:Factory/.xfsprogs.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xfsprogs" Changes: -------- --- /work/SRC/openSUSE:Factory/xfsprogs/xfsprogs.changes 2015-03-23 12:15:33.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.xfsprogs.new/xfsprogs.changes 2015-07-16 17:16:11.000000000 +0200 @@ -1,0 +2,34 @@ +Sat Jul 11 21:36:04 UTC 2015 - [email protected] + +- Update to 3.2.3 + * xfs_repair: handle speciall atribute names correctly + * xfs_repair: handle v5 format feature flags correctly + * xfs_repair: Better v5 format validation for directories + * mkfs.xfs: enable metadata CRCs by default + * mkfs.xfs: enable free inode btrees by default + * build: glibc support updates + * man page updates + * xfs_admin: Changing UUIDs disable for CRC enabled filesystems + * xfs_repair: Separate pquota inode fixes + * xfs_db: inode alignment fixes + * mkfs.xfs: fix failures creating file images + * libxfs: zero new buffers before use + * xfs_repair: handle directory leaf CRC errors gracefully + * xfs_repair: validate and repair inode CRCs + * xfs_repair: lots of broken directory repair fixes + * xfs_db: handle v3 inodes properly + * xfs_db: allow writing corrupted metadata on CRC enabled + filesystems + * xfs_repair: gracefully handle > 512 byte sector superblocks + * mkfs.xfs: take into acocunt log stripe unit when sizing log + * xfs_metadump: inode alignment and null inode fixes + * xfs_io: FALLOC_FL_INSERT_RANGE support + * build: libtool static library build fixes + * mkfs.xfs: large block size inode alignment fixes + * xfs_repair: secondary superblock scan fixes + * xfs_repair: don't care about symlink compenent lengths +- Rebase patches + * xfsprogs-docdir.diff + * xfsprogs-ppc64.diff + +------------------------------------------------------------------- Old: ---- xfsprogs-3.2.2.tar.gz xfsprogs-3.2.2.tar.gz.sig New: ---- xfsprogs-3.2.3.tar.gz xfsprogs-3.2.3.tar.gz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xfsprogs.spec ++++++ --- /var/tmp/diff_new_pack.0HW5VE/_old 2015-07-16 17:16:12.000000000 +0200 +++ /var/tmp/diff_new_pack.0HW5VE/_new 2015-07-16 17:16:12.000000000 +0200 @@ -17,7 +17,7 @@ Name: xfsprogs -Version: 3.2.2 +Version: 3.2.3 Release: 0 Summary: Utilities for managing the XFS file system License: GPL-2.0+ ++++++ xfsprogs-3.2.2.tar.gz -> xfsprogs-3.2.3.tar.gz ++++++ ++++ 14775 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/VERSION new/xfsprogs-3.2.3/VERSION --- old/xfsprogs-3.2.2/VERSION 2014-12-03 21:38:41.000000000 +0100 +++ new/xfsprogs-3.2.3/VERSION 2015-06-10 02:10:43.000000000 +0200 @@ -3,5 +3,5 @@ # PKG_MAJOR=3 PKG_MINOR=2 -PKG_REVISION=2 +PKG_REVISION=3 PKG_BUILD=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/copy/Makefile new/xfsprogs-3.2.3/copy/Makefile --- old/xfsprogs-3.2.2/copy/Makefile 2010-01-24 10:28:06.000000000 +0100 +++ new/xfsprogs-3.2.3/copy/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -11,7 +11,7 @@ LLDLIBS = $(LIBXFS) $(LIBUUID) $(LIBPTHREAD) $(LIBRT) LTDEPENDENCIES = $(LIBXFS) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs default: depend $(LTCOMMAND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/Makefile new/xfsprogs-3.2.3/db/Makefile --- old/xfsprogs-3.2.2/db/Makefile 2014-06-10 06:42:53.000000000 +0200 +++ new/xfsprogs-3.2.3/db/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -18,7 +18,7 @@ LLDLIBS = $(LIBXFS) $(LIBXLOG) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES = $(LIBXFS) $(LIBXLOG) -LLDFLAGS += -static +LLDFLAGS += -static-libtool-libs ifeq ($(ENABLE_READLINE),yes) LLDLIBS += $(LIBREADLINE) $(LIBTERMCAP) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/check.c new/xfsprogs-3.2.3/db/check.c --- old/xfsprogs-3.2.2/db/check.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/db/check.c 2015-06-10 02:08:50.000000000 +0200 @@ -1832,7 +1832,13 @@ error = sbver_err = serious_error = 0; fdblocks = frextents = icount = ifree = 0; sbversion = XFS_SB_VERSION_4; - if (mp->m_sb.sb_inoalignmt) + /* + * Note that inoalignmt == 0 is valid when fsb size is large enough for + * at least one full inode record per block. Check this case explicitly. + */ + if (mp->m_sb.sb_inoalignmt || + (xfs_sb_version_hasalign(&mp->m_sb) && + mp->m_sb.sb_inopblock >= XFS_INODES_PER_CHUNK)) sbversion |= XFS_SB_VERSION_ALIGNBIT; if ((mp->m_sb.sb_uquotino && mp->m_sb.sb_uquotino != NULLFSINO) || (mp->m_sb.sb_gquotino && mp->m_sb.sb_gquotino != NULLFSINO) || diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/inode.c new/xfsprogs-3.2.3/db/inode.c --- old/xfsprogs-3.2.2/db/inode.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/db/inode.c 2015-06-10 02:08:50.000000000 +0200 @@ -369,7 +369,7 @@ ASSERT(startoff == 0); ASSERT(obj == iocur_top->data); dic = obj; - return dic->di_version == 2; + return dic->di_version >= 2; } static int @@ -382,7 +382,7 @@ ASSERT(startoff == 0); ASSERT(obj == iocur_top->data); dic = obj; - return dic->di_version == 2; + return dic->di_version >= 2; } static int @@ -395,7 +395,7 @@ ASSERT(startoff == 0); ASSERT(obj == iocur_top->data); dic = obj; - return dic->di_version == 2; + return dic->di_version >= 2; } static int @@ -684,13 +684,22 @@ numblks, DB_RING_IGN, NULL); off_cur(offset << mp->m_sb.sb_inodelog, mp->m_sb.sb_inodesize); dip = iocur_top->data; - iocur_top->ino_crc_ok = libxfs_dinode_verify(mp, ino, dip); iocur_top->ino_buf = 1; iocur_top->ino = ino; iocur_top->mode = be16_to_cpu(dip->di_mode); if ((iocur_top->mode & S_IFMT) == S_IFDIR) iocur_top->dirino = ino; + if (xfs_sb_version_hascrc(&mp->m_sb)) { + iocur_top->ino_crc_ok = libxfs_verify_cksum((char *)dip, + mp->m_sb.sb_inodesize, + XFS_DINODE_CRC_OFF); + if (!iocur_top->ino_crc_ok) + dbprintf( +_("Metadata CRC error detected for ino %lld\n"), + ino); + } + /* track updated info in ring */ ring_add(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/io.c new/xfsprogs-3.2.3/db/io.c --- old/xfsprogs-3.2.2/db/io.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/db/io.c 2015-06-10 02:08:50.000000000 +0200 @@ -457,6 +457,13 @@ } void +xfs_dummy_verify( + struct xfs_buf *bp) +{ + return; +} + +void write_cur(void) { if (iocur_sp < 0) { @@ -464,8 +471,10 @@ return; } - if (iocur_top->ino_buf) + if (xfs_sb_version_hascrc(&mp->m_sb) && iocur_top->ino_buf) { libxfs_dinode_calc_crc(mp, iocur_top->data); + iocur_top->ino_crc_ok = 1; + } if (iocur_top->dquot_buf) xfs_update_cksum(iocur_top->data, sizeof(struct xfs_dqblk), XFS_DQUOT_CRC_OFF); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/io.h new/xfsprogs-3.2.3/db/io.h --- old/xfsprogs-3.2.2/db/io.h 2014-05-05 00:54:30.000000000 +0200 +++ new/xfsprogs-3.2.3/db/io.h 2015-06-05 02:08:17.000000000 +0200 @@ -63,6 +63,7 @@ bbmap_t *bbmap); extern void ring_add(void); extern void set_iocur_type(const struct typ *t); +extern void xfs_dummy_verify(struct xfs_buf *bp); /* * returns -1 for unchecked, 0 for bad and 1 for good diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/metadump.c new/xfsprogs-3.2.3/db/metadump.c --- old/xfsprogs-3.2.2/db/metadump.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/db/metadump.c 2015-06-10 02:08:50.000000000 +0200 @@ -1865,6 +1865,7 @@ (mp->m_sb.sb_inopblock > XFS_INODES_PER_CHUNK && off % XFS_INODES_PER_CHUNK != 0) || (xfs_sb_version_hasalign(&mp->m_sb) && + mp->m_sb.sb_inoalignmt != 0 && agbno % mp->m_sb.sb_inoalignmt != 0)) { if (show_warnings) print_warning("badly aligned inode (start = %llu)", @@ -2112,7 +2113,7 @@ int offset; int rval = 0; - if (ino == 0) + if (ino == 0 || ino == NULLFSINO) return 1; agno = XFS_INO_TO_AGNO(mp, ino); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/sb.c new/xfsprogs-3.2.3/db/sb.c --- old/xfsprogs-3.2.2/db/sb.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/db/sb.c 2015-06-10 02:08:50.000000000 +0200 @@ -363,6 +363,18 @@ return 0; } + /* + * For now, changing the UUID of V5 superblock filesystems is + * not supported; we do not have the infrastructure to fix all + * other metadata when a new superblock UUID is generated. + */ + if (xfs_sb_version_hascrc(&mp->m_sb) && + strcasecmp(argv[1], "rewrite")) { + dbprintf(_("%s: only 'rewrite' supported on V5 fs\n"), + progname); + return 0; + } + if (!strcasecmp(argv[1], "generate")) { platform_uuid_generate(&uu); } else if (!strcasecmp(argv[1], "nil")) { @@ -646,6 +658,8 @@ strcat(s, ",CRC"); if (xfs_sb_version_hasftype(sbp)) strcat(s, ",FTYPE"); + if (xfs_sb_version_hasfinobt(sbp)) + strcat(s, ",FINOBT"); return s; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/db/write.c new/xfsprogs-3.2.3/db/write.c --- old/xfsprogs-3.2.2/db/write.c 2014-12-02 03:31:11.000000000 +0100 +++ new/xfsprogs-3.2.3/db/write.c 2015-06-05 02:08:17.000000000 +0200 @@ -38,7 +38,7 @@ static void write_help(void); static const cmdinfo_t write_cmd = - { "write", NULL, write_f, 0, -1, 0, N_("[field or value]..."), + { "write", NULL, write_f, 0, -1, 0, N_("[-c] [field or value]..."), N_("write value to disk"), write_help }; void @@ -79,6 +79,7 @@ " String mode: 'write \"This_is_a_filename\" - write null terminated string.\n" "\n" " In data mode type 'write' by itself for a list of specific commands.\n\n" +" Specifying the -c option will allow writes of invalid (corrupt) data.\n\n" )); } @@ -90,6 +91,10 @@ { pfunc_t pf; extern char *progname; + int c; + int corrupt = 0; /* Allow write of corrupt data; skip verification */ + struct xfs_buf_ops nowrite_ops; + const struct xfs_buf_ops *stashed_ops = NULL; if (x.isreadonly & LIBXFS_ISREADONLY) { dbprintf(_("%s started in read only mode, writing disabled\n"), @@ -109,12 +114,34 @@ return 0; } - /* move past the "write" command */ - argc--; - argv++; + while ((c = getopt(argc, argv, "c")) != EOF) { + switch (c) { + case 'c': + corrupt = 1; + break; + default: + dbprintf(_("bad option for write command\n")); + return 0; + } + } + + argc -= optind; + argv += optind; + + if (iocur_top->bp->b_ops && corrupt) { + /* Temporarily remove write verifier to write bad data */ + stashed_ops = iocur_top->bp->b_ops; + nowrite_ops.verify_read = stashed_ops->verify_read; + nowrite_ops.verify_write = xfs_dummy_verify; + iocur_top->bp->b_ops = &nowrite_ops; + dbprintf(_("Allowing write of corrupted data\n")); + } (*pf)(DB_WRITE, cur_typ->fields, argc, argv); + if (stashed_ops) + iocur_top->bp->b_ops = stashed_ops; + return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/debian/changelog new/xfsprogs-3.2.3/debian/changelog --- old/xfsprogs-3.2.2/debian/changelog 2014-12-02 03:31:11.000000000 +0100 +++ new/xfsprogs-3.2.3/debian/changelog 2015-06-10 02:09:20.000000000 +0200 @@ -1,3 +1,9 @@ +xfsprogs (3.2.3) unstable; urgency=low + + * New upstream release + + -- Nathan Scott <[email protected]> Mon, 01 Jun 2015 11:35:02 +1000 + xfsprogs (3.2.2) unstable; urgency=low * New upstream release diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/doc/CHANGES new/xfsprogs-3.2.3/doc/CHANGES --- old/xfsprogs-3.2.2/doc/CHANGES 2014-12-03 21:56:43.000000000 +0100 +++ new/xfsprogs-3.2.3/doc/CHANGES 2015-06-10 02:11:59.000000000 +0200 @@ -1,3 +1,39 @@ +xfsprogs-3.2.3 (10 Jun 2015) + - Debian packaging updates (Nathan Scott) + +xfsprogs-3.2.3-rc2 (1 Jun 2015) + - xfs_repair: handle speciall atribute names correctly (Eric Sandeen) + - xfs_repair: handle v5 format feature flags correctly (Darrick Wong) + - xfs_repair: Better v5 format validation for directories (Darrick Wong) + +xfsprogs-3.2.3-rc1 (11 May 2015) + - mkfs.xfs: enable metadata CRCs by default + - mkfs.xfs: enable free inode btrees by default + - build: glibc support updates (Jan Tulak) + - man page updates (Sage Weil, Namjae Jeon, Eric Sandeen) + - xfs_admin: Changing UUIDs disable for CRC enabled filesystems + (Eric Sandeen) + - xfs_repair: Separate pquota inode fixes (Brian Foster) + - xfs_db: inode alignment fixes (Brian Foster) + - mkfs.xfs: fix failures creating file images (Brian Foster) + - libxfs: zero new buffers before use (Darrick J. Wong) + - xfs_repair: handle directory leaf CRC errors gracefully + (Darrick J. Wong) + - xfs_repair: validate and repair inode CRCs (Eric Sandeen) + - xfs_repair: lots of broken directory repair fixes (Eric Sandeen) + - xfs_db: handle v3 inodes properly (Eric Sandeen) + - xfs_db: allow writing corrupted metadata on CRC enabled filesystems + (Eric Sandeen) + - xfs_repair: gracefully handle > 512 byte sector superblocks + - mkfs.xfs: take into acocunt log stripe unit when sizing log + - xfs_metadump: inode alignment and null inode fixes (Brian Foster) + - xfs_io: FALLOC_FL_INSERT_RANGE support (Namjae Jeon) + - build: libtool static library build fixes (Romain Naour) + - mkfs.xfs: large block size inode alignment fixes (Brian Foster) + - xfs_repair: secondary superblock scan fixes (Brian Foster) + - xfs_repair: don't care about symlink compenent lengths + (Eric Sandeen) + xfsprogs-3.2.2 (4 December 2014) - Debian packaging updates (Nathan Scott) - xfs_repair, mkfs.xfs stripe geometry fixes (Eric Sandeen) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/growfs/Makefile new/xfsprogs-3.2.3/growfs/Makefile --- old/xfsprogs-3.2.2/growfs/Makefile 2010-01-24 10:28:06.000000000 +0100 +++ new/xfsprogs-3.2.3/growfs/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -19,7 +19,7 @@ endif LTDEPENDENCIES = $(LIBXFS) $(LIBXCMD) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs LSRCFILES = xfs_info.sh default: depend $(LTCOMMAND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/builddefs.in new/xfsprogs-3.2.3/include/builddefs.in --- old/xfsprogs-3.2.2/include/builddefs.in 2014-01-28 07:19:44.000000000 +0100 +++ new/xfsprogs-3.2.3/include/builddefs.in 2015-06-05 02:08:27.000000000 +0200 @@ -109,7 +109,7 @@ # -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-decl ifeq ($(PKG_PLATFORM),linux) -PCFLAGS = -D_GNU_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=500 -D_FILE_OFFSET_BITS=64 $(GCCFLAGS) +PCFLAGS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 $(GCCFLAGS) ifeq ($(HAVE_UMODE_T),yes) PCFLAGS += -DHAVE_UMODE_T endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/handle.h new/xfsprogs-3.2.3/include/handle.h --- old/xfsprogs-3.2.2/include/handle.h 2009-12-30 23:30:13.000000000 +0100 +++ new/xfsprogs-3.2.3/include/handle.h 2015-06-05 02:08:17.000000000 +0200 @@ -28,6 +28,7 @@ extern int path_to_handle (char *__path, void **__hanp, size_t *__hlen); extern int path_to_fshandle (char *__path, void **__fshanp, size_t *__fshlen); +extern int fd_to_handle (int fd, void **hanp, size_t *hlen); extern int handle_to_fshandle (void *__hanp, size_t __hlen, void **__fshanp, size_t *__fshlen); extern void free_handle (void *__hanp, size_t __hlen); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/libxfs.h new/xfsprogs-3.2.3/include/libxfs.h --- old/xfsprogs-3.2.2/include/libxfs.h 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/include/libxfs.h 2015-06-10 02:08:50.000000000 +0200 @@ -782,6 +782,8 @@ #include <xfs/xfs_cksum.h> +#define libxfs_verify_cksum xfs_verify_cksum + static inline int xfs_buf_verify_cksum(struct xfs_buf *bp, unsigned long cksum_offset) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/xfs_da_format.h new/xfsprogs-3.2.3/include/xfs_da_format.h --- old/xfsprogs-3.2.2/include/xfs_da_format.h 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/include/xfs_da_format.h 2015-06-10 02:08:50.000000000 +0200 @@ -561,7 +561,6 @@ if (xfs_sb_version_hasftype(&mp->m_sb)) { __uint8_t type = dep->name[dep->namelen]; - ASSERT(type < XFS_DIR3_FT_MAX); if (type < XFS_DIR3_FT_MAX) return type; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/xfs_dir2.h new/xfsprogs-3.2.3/include/xfs_dir2.h --- old/xfsprogs-3.2.2/include/xfs_dir2.h 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/include/xfs_dir2.h 2015-06-10 02:08:59.000000000 +0200 @@ -100,6 +100,8 @@ extern struct xfs_dir2_data_free *xfs_dir2_data_freefind( struct xfs_dir2_data_hdr *hdr, struct xfs_dir2_data_unused *dup); +extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); + extern const struct xfs_buf_ops xfs_dir3_block_buf_ops; extern const struct xfs_buf_ops xfs_dir3_leafn_buf_ops; extern const struct xfs_buf_ops xfs_dir3_leaf1_buf_ops; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/include/xfs_types.h new/xfsprogs-3.2.3/include/xfs_types.h --- old/xfsprogs-3.2.2/include/xfs_types.h 2014-06-10 06:42:53.000000000 +0200 +++ new/xfsprogs-3.2.3/include/xfs_types.h 2015-06-10 02:08:50.000000000 +0200 @@ -100,11 +100,14 @@ * Minimum and maximum blocksize and sectorsize. * The blocksize upper limit is pretty much arbitrary. * The sectorsize upper limit is due to sizeof(sb_sectsize). + * CRC enable filesystems use 512 byte inodes, meaning 512 byte block sizes + * cannot be used. */ #define XFS_MIN_BLOCKSIZE_LOG 9 /* i.e. 512 bytes */ #define XFS_MAX_BLOCKSIZE_LOG 16 /* i.e. 65536 bytes */ #define XFS_MIN_BLOCKSIZE (1 << XFS_MIN_BLOCKSIZE_LOG) #define XFS_MAX_BLOCKSIZE (1 << XFS_MAX_BLOCKSIZE_LOG) +#define XFS_MIN_CRC_BLOCKSIZE (1 << (XFS_MIN_BLOCKSIZE_LOG + 1)) #define XFS_MIN_SECTORSIZE_LOG 9 /* i.e. 512 bytes */ #define XFS_MAX_SECTORSIZE_LOG 15 /* i.e. 32768 bytes */ #define XFS_MIN_SECTORSIZE (1 << XFS_MIN_SECTORSIZE_LOG) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/io/Makefile new/xfsprogs-3.2.3/io/Makefile --- old/xfsprogs-3.2.2/io/Makefile 2014-12-02 03:31:11.000000000 +0100 +++ new/xfsprogs-3.2.3/io/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -15,7 +15,7 @@ LLDLIBS = $(LIBXCMD) $(LIBHANDLE) LTDEPENDENCIES = $(LIBXCMD) $(LIBHANDLE) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs ifeq ($(HAVE_FADVISE),yes) CFILES += fadvise.c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/io/prealloc.c new/xfsprogs-3.2.3/io/prealloc.c --- old/xfsprogs-3.2.2/io/prealloc.c 2014-03-03 07:01:30.000000000 +0100 +++ new/xfsprogs-3.2.3/io/prealloc.c 2015-06-05 02:08:17.000000000 +0200 @@ -37,6 +37,10 @@ #define FALLOC_FL_ZERO_RANGE 0x10 #endif +#ifndef FALLOC_FL_INSERT_RANGE +#define FALLOC_FL_INSERT_RANGE 0x20 +#endif + static cmdinfo_t allocsp_cmd; static cmdinfo_t freesp_cmd; static cmdinfo_t resvsp_cmd; @@ -46,6 +50,7 @@ static cmdinfo_t falloc_cmd; static cmdinfo_t fpunch_cmd; static cmdinfo_t fcollapse_cmd; +static cmdinfo_t finsert_cmd; static cmdinfo_t fzero_cmd; #endif @@ -169,11 +174,14 @@ int mode = 0; int c; - while ((c = getopt(argc, argv, "ckp")) != EOF) { + while ((c = getopt(argc, argv, "cikp")) != EOF) { switch (c) { case 'c': mode = FALLOC_FL_COLLAPSE_RANGE; break; + case 'i': + mode = FALLOC_FL_INSERT_RANGE; + break; case 'k': mode = FALLOC_FL_KEEP_SIZE; break; @@ -237,6 +245,25 @@ } static int +finsert_f( + int argc, + char **argv) +{ + xfs_flock64_t segment; + int mode = FALLOC_FL_INSERT_RANGE; + + if (!offset_length(argv[1], argv[2], &segment)) + return 0; + + if (fallocate(file->fd, mode, + segment.l_start, segment.l_len)) { + perror("fallocate"); + return 0; + } + return 0; +} + +static int fzero_f( int argc, char **argv) @@ -345,6 +372,16 @@ _("de-allocates space and eliminates the hole by shifting extents"); add_command(&fcollapse_cmd); + finsert_cmd.name = "finsert"; + finsert_cmd.cfunc = finsert_f; + finsert_cmd.argmin = 2; + finsert_cmd.argmax = 2; + finsert_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK; + finsert_cmd.args = _("off len"); + finsert_cmd.oneline = + _("creates new space for writing within file by shifting extents"); + add_command(&finsert_cmd); + fzero_cmd.name = "fzero"; fzero_cmd.cfunc = fzero_f; fzero_cmd.argmin = 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/libxfs/rdwr.c new/xfsprogs-3.2.3/libxfs/rdwr.c --- old/xfsprogs-3.2.2/libxfs/rdwr.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/libxfs/rdwr.c 2015-06-10 02:08:50.000000000 +0200 @@ -411,6 +411,7 @@ strerror(errno)); exit(1); } + memset(bp->b_addr, 0, bytes); #ifdef XFS_BUF_TRACING list_head_init(&bp->b_lock_list); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/libxfs/util.c new/xfsprogs-3.2.3/libxfs/util.c --- old/xfsprogs-3.2.2/libxfs/util.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/libxfs/util.c 2015-06-10 02:08:50.000000000 +0200 @@ -700,8 +700,6 @@ if (error) return error; } - if (!ip) - error = ENOSPC; *ipp = ip; return error; @@ -718,6 +716,7 @@ va_start(ap, fmt); vfprintf(stderr, fmt, ap); fprintf(stderr, " This is a bug.\n"); + fprintf(stderr, "%s version %s\n", progname, VERSION); fprintf(stderr, "Please capture the filesystem metadata with " "xfs_metadump and\nreport it to [email protected].\n"); va_end(ap); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/libxfs/xfs_dir2_priv.h new/xfsprogs-3.2.3/libxfs/xfs_dir2_priv.h --- old/xfsprogs-3.2.2/libxfs/xfs_dir2_priv.h 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/libxfs/xfs_dir2_priv.h 2015-06-10 02:08:59.000000000 +0200 @@ -21,7 +21,6 @@ struct dir_context; /* xfs_dir2.c */ -extern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); extern int xfs_dir2_grow_inode(struct xfs_da_args *args, int space, xfs_dir2_db_t *dbp); extern int xfs_dir_cilookup_result(struct xfs_da_args *args, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/logprint/Makefile new/xfsprogs-3.2.3/logprint/Makefile --- old/xfsprogs-3.2.2/logprint/Makefile 2010-01-24 10:28:06.000000000 +0100 +++ new/xfsprogs-3.2.3/logprint/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -14,7 +14,7 @@ LLDLIBS = $(LIBXFS) $(LIBXLOG) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES = $(LIBXFS) $(LIBXLOG) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs default: depend $(LTCOMMAND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/man/man8/mkfs.xfs.8 new/xfsprogs-3.2.3/man/man8/mkfs.xfs.8 --- old/xfsprogs-3.2.2/man/man8/mkfs.xfs.8 2014-07-09 03:00:54.000000000 +0200 +++ new/xfsprogs-3.2.3/man/man8/mkfs.xfs.8 2015-06-10 02:08:50.000000000 +0200 @@ -150,7 +150,7 @@ .IP By default, .B mkfs.xfs -will not enable metadata CRCs. +will enable metadata CRCs. .TP .BI finobt= value This option enables the use of a separate free inode btree index in each @@ -164,10 +164,11 @@ .IP By default, .B mkfs.xfs -will not create free inode btrees. This feature is also currently only available -for filesystems created with the +will create free inode btrees for filesystems created with the (default) .B \-m crc=1 -option set. +option set. When the option +.B \-m crc=0 +is used, the free inode btree feature is not supported and is disabled. .RE .TP .BI \-d " data_section_options" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/man/man8/xfs_db.8 new/xfsprogs-3.2.3/man/man8/xfs_db.8 --- old/xfsprogs-3.2.2/man/man8/xfs_db.8 2014-06-10 06:42:53.000000000 +0200 +++ new/xfsprogs-3.2.3/man/man8/xfs_db.8 2015-06-05 02:08:17.000000000 +0200 @@ -711,7 +711,7 @@ bits respectively, and their string equivalent reported (but no modifications are made). .TP -.BI "write [" "field value" "] ..." +.BI "write [\-c] [" "field value" "] ..." Write a value to disk. Specific fields can be set in structures (struct mode), or a block can be set to data values (data mode), @@ -729,6 +729,12 @@ with a sequence, a constant value, or a random value. In this mode .B write with no arguments gives more information on the allowed commands. +.RS 1.0i +.TP 0.4i +.B \-c +Skip write verifiers and CRC recalculation; allows invalid data to be written +to disk. +.RE .SH TYPES This section gives the fields in each structure type and their meanings. Note that some types of block cover multiple actual structures, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/man/man8/xfs_io.8 new/xfsprogs-3.2.3/man/man8/xfs_io.8 --- old/xfsprogs-3.2.2/man/man8/xfs_io.8 2014-12-02 03:31:11.000000000 +0100 +++ new/xfsprogs-3.2.3/man/man8/xfs_io.8 2015-06-05 02:08:17.000000000 +0200 @@ -404,6 +404,11 @@ manual page to de-allocates blocks and eliminates the hole created in this process by shifting data blocks into the hole. .TP +.BI finsert " offset length" +Call fallocate with FALLOC_FL_INSERT_RANGE flag as described in the +.BR fallocate (2) +manual page to create the hole by shifting data blocks. +.TP .BI fpunch " offset length" Punches (de-allocates) blocks in the file by calling fallocate with the FALLOC_FL_PUNCH_HOLE flag as described in the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/man/man8/xfs_quota.8 new/xfsprogs-3.2.3/man/man8/xfs_quota.8 --- old/xfsprogs-3.2.2/man/man8/xfs_quota.8 2014-01-20 23:47:46.000000000 +0100 +++ new/xfsprogs-3.2.3/man/man8/xfs_quota.8 2015-06-05 02:08:17.000000000 +0200 @@ -324,7 +324,7 @@ list entry (the current path is used by many of the commands described here, it identifies the filesystem toward which a command is directed). -The patch list can come from several places \- the command line, +The path list can come from several places \- the command line, the mount table, and the .I /etc/projects file. @@ -565,12 +565,7 @@ .I name ] .br -Without arguments, this command lists known project names and identifiers -(based on entries in the -.I /etc/projects -and -.I /etc/projid -files). The +The .BR \-c , .BR \-C , and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/mkfs/Makefile new/xfsprogs-3.2.3/mkfs/Makefile --- old/xfsprogs-3.2.2/mkfs/Makefile 2014-02-05 06:12:06.000000000 +0100 +++ new/xfsprogs-3.2.3/mkfs/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -21,7 +21,7 @@ LLDLIBS += $(LIBXFS) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES += $(LIBXFS) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs LSRCFILES = $(FSTYP).c LDIRT = $(FSTYP) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/mkfs/xfs_mkfs.c new/xfsprogs-3.2.3/mkfs/xfs_mkfs.c --- old/xfsprogs-3.2.2/mkfs/xfs_mkfs.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/mkfs/xfs_mkfs.c 2015-06-10 02:08:50.000000000 +0200 @@ -817,6 +817,13 @@ __uint32_t bsize; int i; xfs_off_t off; + int tmp; + + /* + * We open regular files with O_TRUNC|O_CREAT. Nothing to do here... + */ + if (xi->disfile && xi->dcreat) + return; /* * read in existing filesystem superblock, use its geometry @@ -830,11 +837,16 @@ } memset(buf, 0, new_sb->sb_sectsize); - if (pread(xi->dfd, buf, new_sb->sb_sectsize, 0) != new_sb->sb_sectsize) { + tmp = pread(xi->dfd, buf, new_sb->sb_sectsize, 0); + if (tmp < 0) { fprintf(stderr, _("existing superblock read failed: %s\n"), strerror(errno)); - free(buf); - return; + goto done; + } + if (tmp != new_sb->sb_sectsize) { + fprintf(stderr, + _("warning: could not read existing superblock, skip zeroing\n")); + goto done; } libxfs_sb_from_disk(&sb, buf); @@ -992,6 +1004,7 @@ int lazy_sb_counters; int crcs_enabled; int finobt; + bool finobtflag; progname = basename(argv[0]); setlocale(LC_ALL, ""); @@ -1024,8 +1037,9 @@ force_overwrite = 0; worst_freelist = 0; lazy_sb_counters = 1; - crcs_enabled = 0; - finobt = 0; + crcs_enabled = 1; + finobt = 1; + finobtflag = false; memset(&fsx, 0, sizeof(fsx)); memset(&xi, 0, sizeof(xi)); @@ -1526,6 +1540,7 @@ if (c < 0 || c > 1) illegal(value, "m finobt"); finobt = c; + finobtflag = true; break; default: unknown('m', value); @@ -1743,6 +1758,12 @@ fprintf(stderr, _("illegal block size %d\n"), blocksize); usage(); } + if (crcs_enabled && blocksize < XFS_MIN_CRC_BLOCKSIZE) { + fprintf(stderr, +_("Minimum block size for CRC enabled filesystems is %d bytes.\n"), + XFS_MIN_CRC_BLOCKSIZE); + usage(); + } memset(&ft, 0, sizeof(ft)); get_topology(&xi, &ft, force_overwrite); @@ -1866,15 +1887,19 @@ _("32 bit Project IDs always enabled on CRC enabled filesytems\n")); usage(); } - } - - /* - * The kernel doesn't currently support crc=0,finobt=1 filesystems. - * Catch it here, disable finobt and warn the user. - */ - if (finobt && !crcs_enabled) { - fprintf(stderr, + } else { + /* + * The kernel doesn't currently support crc=0,finobt=1 + * filesystems. If crcs are not enabled and the user has + * explicitly turned them off then silently turn them off + * to avoid an unnecessary warning. If the user explicitly + * tried to use crc=0,finobt=1, then issue a warning before + * turning them off. + */ + if (finobt && finobtflag) { + fprintf(stderr, _("warning: finobt not supported without CRC support, disabled.\n")); + } finobt = 0; } @@ -2441,9 +2466,11 @@ */ logblocks = (dblocks << blocklog) / 2048; logblocks = logblocks >> blocklog; - logblocks = MAX(min_logblocks, logblocks); } + /* Ensure the chosen size meets minimum log size requirements */ + logblocks = MAX(min_logblocks, logblocks); + /* make sure the log fits wholly within an AG */ if (logblocks >= agsize) logblocks = min_logblocks; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/Makefile new/xfsprogs-3.2.3/repair/Makefile --- old/xfsprogs-3.2.2/repair/Makefile 2014-10-29 03:36:35.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/Makefile 2015-06-05 02:08:17.000000000 +0200 @@ -22,7 +22,7 @@ LLDLIBS = $(LIBXFS) $(LIBXLOG) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) LTDEPENDENCIES = $(LIBXFS) $(LIBXLOG) -LLDFLAGS = -static +LLDFLAGS = -static-libtool-libs default: depend $(LTCOMMAND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/agheader.c new/xfsprogs-3.2.3/repair/agheader.c --- old/xfsprogs-3.2.2/repair/agheader.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/agheader.c 2015-06-10 02:08:50.000000000 +0200 @@ -377,7 +377,13 @@ rval |= XR_AG_SB_SEC; } - if (sb->sb_inprogress == 1 && sb->sb_pquotino != NULLFSINO) { + /* + * Note that sb_pquotino is not considered a valid sb field for pre-v5 + * superblocks. If it is anything other than 0 it is considered garbage + * data beyond the valid sb and explicitly zeroed above. + */ + if (xfs_sb_version_has_pquotino(&mp->m_sb) && + sb->sb_inprogress == 1 && sb->sb_pquotino != NULLFSINO) { if (!no_modify) { sb->sb_pquotino = 0; dsb->sb_pquotino = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/attr_repair.c new/xfsprogs-3.2.3/repair/attr_repair.c --- old/xfsprogs-3.2.2/repair/attr_repair.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/attr_repair.c 2015-06-10 02:08:59.000000000 +0200 @@ -746,9 +746,10 @@ void *valuep; int clearit = 0; - if ((strncmp(namevalue, SGI_ACL_FILE, SGI_ACL_FILE_SIZE) == 0) || - (strncmp(namevalue, SGI_ACL_DEFAULT, - SGI_ACL_DEFAULT_SIZE) == 0)) { + if ((namelen == SGI_ACL_FILE_SIZE && + strncmp(namevalue, SGI_ACL_FILE, SGI_ACL_FILE_SIZE) == 0) || + (namelen == SGI_ACL_DEFAULT_SIZE && + strncmp(namevalue, SGI_ACL_DEFAULT, SGI_ACL_DEFAULT_SIZE) == 0)) { if (value == NULL) { valuep = malloc(valuelen); if (!valuep) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/dinode.c new/xfsprogs-3.2.3/repair/dinode.c --- old/xfsprogs-3.2.2/repair/dinode.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/dinode.c 2015-06-10 02:08:50.000000000 +0200 @@ -667,12 +667,14 @@ irec.br_startoff); goto done; } - if (irec.br_startoff >= fs_max_file_offset) { - do_warn( -_("inode %" PRIu64 " - extent offset too large - start %" PRIu64 ", " - "count %" PRIu64 ", offset %" PRIu64 "\n"), - ino, irec.br_startblock, irec.br_blockcount, - irec.br_startoff); + /* Ensure this extent does not extend beyond the max offset */ + if (irec.br_startoff + irec.br_blockcount - 1 > + fs_max_file_offset) { + do_warn( +_("inode %" PRIu64 " - extent exceeds max offset - start %" PRIu64 ", " + "count %" PRIu64 ", physical block %" PRIu64 "\n"), + ino, irec.br_startoff, irec.br_blockcount, + irec.br_startblock); goto done; } @@ -1333,7 +1335,7 @@ xfs_dinode_t *dino, blkmap_t *blkmap) { - char *symlink, *cptr; + char *symlink; char data[MAXPATHLEN]; /* @@ -1380,31 +1382,6 @@ return(1); } - /* - * check for any component being too long - */ - if (be64_to_cpu(dino->di_size) >= MAXNAMELEN) { - cptr = strchr(symlink, '/'); - - while (cptr != NULL) { - if (cptr - symlink >= MAXNAMELEN) { - do_warn( -_("component of symlink in inode %" PRIu64 " too long\n"), - lino); - return(1); - } - symlink = cptr + 1; - cptr = strchr(symlink, '/'); - } - - if (strlen(symlink) >= MAXNAMELEN) { - do_warn( -_("component of symlink in inode %" PRIu64 " too long\n"), - lino); - return(1); - } - } - return(0); } @@ -2314,6 +2291,30 @@ */ ASSERT(uncertain == 0 || verify_mode != 0); + /* + * This is the only valid point to check the CRC; after this we may have + * made changes which invalidate it, and the CRC is only updated again + * when it gets written out. + * + * Of course if we make any modifications after this, the inode gets + * rewritten, and the CRC is updated automagically. + */ + if (xfs_sb_version_hascrc(&mp->m_sb) && + !xfs_verify_cksum((char *)dino, mp->m_sb.sb_inodesize, + XFS_DINODE_CRC_OFF)) { + retval = 1; + if (!uncertain) + do_warn(_("bad CRC for inode %" PRIu64 "%c"), + lino, verify_mode ? '\n' : ','); + if (!verify_mode) { + if (!no_modify) { + do_warn(_(" will rewrite\n")); + *dirty = 1; + } else + do_warn(_(" would rewrite\n")); + } + } + if (be16_to_cpu(dino->di_magic) != XFS_DINODE_MAGIC) { retval = 1; if (!uncertain) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/dir2.c new/xfsprogs-3.2.3/repair/dir2.c --- old/xfsprogs-3.2.2/repair/dir2.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/dir2.c 2015-06-10 02:08:59.000000000 +0200 @@ -198,6 +198,13 @@ da_cursor->ino, bno); goto error_out; } + /* corrupt node; rebuild the dir. */ + if (bp->b_error == EFSBADCRC || bp->b_error == EFSCORRUPTED) { + do_warn( +_("corrupt tree block %u for directory inode %" PRIu64 "\n"), + bno, da_cursor->ino); + goto error_out; + } btree = xfs_da3_node_tree_p(node); if (nodehdr.count > mp->m_dir_node_ents) { libxfs_putbuf(bp); @@ -861,94 +868,33 @@ _("entry \"%*.*s\" in shortform directory %" PRIu64 " references %s inode %" PRIu64 "\n"), namelen, namelen, sfep->name, ino, junkreason, lino); - if (namelen == 0) { - /* - * if we're really lucky, this is - * the last entry in which case we - * can use the dir size to set the - * namelen value. otherwise, forget - * it because we're not going to be - * able to find the next entry. - */ - bad_sfnamelen = 1; - if (i == num_entries - 1) { - namelen = ino_dir_size - - ((__psint_t) &sfep->name[0] - - (__psint_t) sfp); - if (!no_modify) { - do_warn( -_("zero length entry in shortform dir %" PRIu64 ", resetting to %d\n"), - ino, namelen); - sfep->namelen = namelen; - } else { - do_warn( -_("zero length entry in shortform dir %" PRIu64 ", would set to %d\n"), - ino, namelen); - } - } else { - do_warn( -_("zero length entry in shortform dir %" PRIu64 ""), - ino); - if (!no_modify) - do_warn(_(", junking %d entries\n"), - num_entries - i); - else - do_warn(_(", would junk %d entries\n"), - num_entries - i); - /* - * don't process the rest of the directory, - * break out of processing looop - */ - break; - } + /* is dir namelen 0 or does this entry extend past dir size? */ + if (namelen == 0) { + junkreason = _("is zero length"); + bad_sfnamelen = 1; } else if ((__psint_t) sfep - (__psint_t) sfp + xfs_dir3_sf_entsize(mp, sfp, sfep->namelen) > ino_dir_size) { + junkreason = _("extends past end of dir"); bad_sfnamelen = 1; + } - if (i == num_entries - 1) { - namelen = ino_dir_size - - ((__psint_t) &sfep->name[0] - - (__psint_t) sfp); - do_warn( -_("size of last entry overflows space left in in shortform dir %" PRIu64 ", "), - ino); - if (!no_modify) { - do_warn(_("resetting to %d\n"), - namelen); - sfep->namelen = namelen; - *dino_dirty = 1; - } else { - do_warn(_("would reset to %d\n"), - namelen); - } - } else { - do_warn( -_("size of entry #%d overflows space left in in shortform dir %" PRIu64 "\n"), - i, ino); - if (!no_modify) { - if (i == num_entries - 1) - do_warn( - _("junking entry #%d\n"), - i); - else - do_warn( - _("junking %d entries\n"), - num_entries - i); - } else { - if (i == num_entries - 1) - do_warn( - _("would junk entry #%d\n"), - i); - else - do_warn( - _("would junk %d entries\n"), - num_entries - i); - } - - break; - } + if (bad_sfnamelen) { + do_warn( +_("entry #%d %s in shortform dir %" PRIu64), + i, junkreason, ino); + if (!no_modify) + do_warn(_(", junking %d entries\n"), + num_entries - i); + else + do_warn(_(", would junk %d entries\n"), + num_entries - i); + /* + * don't process the rest of the directory, + * break out of processing loop + */ + break; } /* @@ -1379,6 +1325,18 @@ dep->namelen, dep->namelen, dep->name, da_bno, (intptr_t)ptr - (intptr_t)d, ino, clearreason, ent_ino); + + /* + * We have a special dot & dotdot fixer-upper below which can + * sort out the proper inode number, so don't clear it. + */ + if ((dep->namelen == 1 && dep->name[0] == '.') || + (dep->namelen == 2 && + dep->name[0] == '.' && dep->name[1] == '.')) { + clearino = 0; + clearreason = NULL; + } + /* * If the name length is 0 (illegal) make it 1 and blast * the entry. @@ -1468,6 +1426,7 @@ } else { do_warn(_("would correct\n")); } + *parent = ino; } } /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/globals.h new/xfsprogs-3.2.3/repair/globals.h --- old/xfsprogs-3.2.2/repair/globals.h 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/globals.h 2015-06-10 02:08:50.000000000 +0200 @@ -57,7 +57,6 @@ #define XR_LOG2BSIZE_MIN 9 /* min/max fs blocksize (log2) */ #define XR_LOG2BSIZE_MAX 16 /* 2^XR_* == blocksize */ -#define NUM_SBS 8 /* max # of sbs to verify */ #define NUM_AGH_SECTS 4 /* # of components in an ag header */ /* @@ -88,7 +87,6 @@ EXTERN int iobuf_size; EXTERN char *smallbuf; /* small (1-4 page) buffer */ EXTERN int smallbuf_size; -EXTERN char *sb_bufs[NUM_SBS]; /* superblock buffers */ EXTERN int sbbuf_size; /* direct I/O info */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/phase6.c new/xfsprogs-3.2.3/repair/phase6.c --- old/xfsprogs-3.2.2/repair/phase6.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/phase6.c 2015-06-10 02:08:59.000000000 +0200 @@ -1321,7 +1321,8 @@ * for the libxfs_dir_init() call). */ pip.i_ino = get_inode_parent(irec, ino_offset); - if (pip.i_ino == NULLFSINO) + if (pip.i_ino == NULLFSINO || + xfs_dir_ino_validate(mp, pip.i_ino)) pip.i_ino = mp->m_sb.sb_rootino; xfs_bmap_init(&flist, &firstblock); @@ -1348,12 +1349,19 @@ ASSERT(done); - libxfs_dir_init(tp, ip, &pip); + error = libxfs_dir_init(tp, ip, &pip); + if (error) { + do_warn(_("xfs_dir_init failed -- error - %d\n"), error); + goto out_bmap_cancel; + } error = libxfs_bmap_finish(&tp, &flist, &committed); libxfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_SYNC); + if (ino == mp->m_sb.sb_rootino) + need_root_dotdot = 0; + /* go through the hash list and re-add the inodes */ for (p = hashtab->first; p; p = p->nextbyorder) { @@ -1922,6 +1930,66 @@ freetab->ents[db].s = 0; } +/* check v5 metadata */ +static int +__check_dir3_header( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t ino, + __be64 owner, + __be64 blkno, + uuid_t *uuid) +{ + + /* verify owner */ + if (be64_to_cpu(owner) != ino) { + do_warn( +_("expected owner inode %" PRIu64 ", got %llu, directory block %" PRIu64 "\n"), + ino, be64_to_cpu(owner), bp->b_bn); + return 1; + } + /* verify block number */ + if (be64_to_cpu(blkno) != bp->b_bn) { + do_warn( +_("expected block %" PRIu64 ", got %llu, directory inode %" PRIu64 "\n"), + bp->b_bn, be64_to_cpu(blkno), ino); + return 1; + } + /* verify uuid */ + if (platform_uuid_compare(uuid, &mp->m_sb.sb_uuid) != 0) { + do_warn( +_("wrong FS UUID, directory inode %" PRIu64 " block %" PRIu64 "\n"), + ino, bp->b_bn); + return 1; + } + + return 0; +} + +static int +check_da3_header( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t ino) +{ + struct xfs_da3_blkinfo *info = bp->b_addr; + + return __check_dir3_header(mp, bp, ino, info->owner, info->blkno, + &info->uuid); +} + +static int +check_dir3_header( + struct xfs_mount *mp, + struct xfs_buf *bp, + xfs_ino_t ino) +{ + struct xfs_dir3_blk_hdr *info = bp->b_addr; + + return __check_dir3_header(mp, bp, ino, info->owner, info->blkno, + &info->uuid); +} + /* * Check contents of leaf-form block. */ @@ -1948,7 +2016,12 @@ da_bno = mp->m_dirleafblk; error = dir_read_buf(ip, da_bno, -1, &bp, &xfs_dir3_leaf1_buf_ops, &fixit); - if (error) { + if (error == EFSBADCRC || error == EFSCORRUPTED || fixit) { + do_warn( + _("leaf block %u for directory inode %" PRIu64 " bad CRC\n"), + da_bno, ip->i_ino); + return 1; + } else if (error) { do_error( _("can't read block %u for directory inode %" PRIu64 ", error %d\n"), da_bno, ip->i_ino, error); @@ -1973,6 +2046,15 @@ libxfs_putbuf(bp); return 1; } + + if (leafhdr.magic == XFS_DIR3_LEAF1_MAGIC) { + error = check_da3_header(mp, bp, ip->i_ino); + if (error) { + libxfs_putbuf(bp); + return error; + } + } + seeval = dir_hash_see_all(hashtab, ents, leafhdr.count, leafhdr.stale); if (dir_hash_check(hashtab, ip, seeval)) { libxfs_putbuf(bp); @@ -2047,12 +2129,9 @@ xfs_dir3_leaf_hdr_from_disk(&leafhdr, leaf); ents = xfs_dir3_leaf_ents_p(leaf); if (!(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC || - leafhdr.magic == XFS_DIR3_LEAFN_MAGIC)) { - if (leafhdr.magic == XFS_DA_NODE_MAGIC || - leafhdr.magic == XFS_DA3_NODE_MAGIC) { - libxfs_putbuf(bp); - continue; - } + leafhdr.magic == XFS_DIR3_LEAFN_MAGIC || + leafhdr.magic == XFS_DA_NODE_MAGIC || + leafhdr.magic == XFS_DA3_NODE_MAGIC)) { do_warn( _("unknown magic number %#x for block %u in directory inode %" PRIu64 "\n"), leafhdr.magic, da_bno, ip->i_ino); @@ -2060,6 +2139,23 @@ return 1; } + /* check v5 metadata */ + if (leafhdr.magic == XFS_DIR3_LEAFN_MAGIC || + leafhdr.magic == XFS_DA3_NODE_MAGIC) { + error = check_da3_header(mp, bp, ip->i_ino); + if (error) { + libxfs_putbuf(bp); + return error; + } + } + + /* ignore nodes */ + if (leafhdr.magic == XFS_DA_NODE_MAGIC || + leafhdr.magic == XFS_DA3_NODE_MAGIC) { + libxfs_putbuf(bp); + continue; + } + /* * If there's a validator error, we need to ensure that we got * the right ops on the buffer for when we write it back out. @@ -2113,6 +2209,14 @@ libxfs_putbuf(bp); return 1; } + + if (freehdr.magic == XFS_DIR3_FREE_MAGIC) { + error = check_dir3_header(mp, bp, ip->i_ino); + if (error) { + libxfs_putbuf(bp); + return error; + } + } for (i = used = 0; i < freehdr.nvalid; i++) { if (i + freehdr.firstdb >= freetab->nents || freetab->ents[i + freehdr.firstdb].v != @@ -2204,6 +2308,7 @@ da_bno = (xfs_dablk_t)next_da_bno) { const struct xfs_buf_ops *ops; int error; + struct xfs_dir2_data_hdr *d; next_da_bno = da_bno + mp->m_dirblkfsbs - 1; if (bmap_next_offset(NULL, ip, &next_da_bno, XFS_DATA_FORK)) { @@ -2252,6 +2357,20 @@ } continue; } + + /* check v5 metadata */ + d = bplist[db]->b_addr; + if (be32_to_cpu(d->magic) == XFS_DIR3_BLOCK_MAGIC || + be32_to_cpu(d->magic) == XFS_DIR3_DATA_MAGIC) { + struct xfs_buf *bp = bplist[db]; + + error = check_dir3_header(mp, bp, ino); + if (error) { + fixit++; + continue; + } + } + longform_dir2_entry_check_data(mp, ip, num_illegal, need_dot, irec, ino_offset, &bplist[db], hashtab, &freetab, da_bno, isblock); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/sb.c new/xfsprogs-3.2.3/repair/sb.c --- old/xfsprogs-3.2.2/repair/sb.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/sb.c 2015-06-10 02:08:50.000000000 +0200 @@ -196,7 +196,8 @@ if (!xfs_sb_version_hascrc(sb)) return false; - align *= sb->sb_inodesize / XFS_DINODE_MIN_SIZE; + align = (XFS_INODE_BIG_CLUSTER_SIZE * + sb->sb_inodesize / XFS_DINODE_MIN_SIZE) >> sb->sb_blocklog; if (align == sb->sb_inoalignmt) return true; @@ -702,20 +703,11 @@ xfs_sb_t *sb; fs_geo_list_t *list; fs_geo_list_t *current; - char *checked; xfs_agnumber_t agno; int num_sbs; - int skip; int size; int num_ok; int retval; - int round; - - /* - * select the number of secondaries to try for - */ - num_sbs = MIN(NUM_SBS, rsb->sb_agcount); - skip = howmany(num_sbs, rsb->sb_agcount); /* * We haven't been able to validate the sector size yet properly @@ -724,61 +716,48 @@ * sector size rather than the sector size in @rsb. */ size = NUM_AGH_SECTS * (1 << (XFS_MAX_SECTORSIZE_LOG)); - retval = 0; list = NULL; num_ok = 0; *sb_modified = 0; + num_sbs = rsb->sb_agcount; sb = (xfs_sb_t *) alloc_ag_buf(size); - checked = calloc(rsb->sb_agcount, sizeof(char)); - if (!checked) { - do_error(_("calloc failed in verify_set_primary_sb\n")); - exit(1); - } /* * put the primary sb geometry info onto the geometry list */ - checked[sb_index] = 1; get_sb_geometry(&geo, rsb); list = add_geo(list, &geo, sb_index); /* - * grab N secondaries. check them off as we get them - * so we only process each one once + * scan the secondaries and check them off as we get them so we only + * process each one once */ - for (round = 0; round < skip; round++) { - for (agno = round; agno < rsb->sb_agcount; agno += skip) { - if (checked[agno]) - continue; - - off = (xfs_off_t)agno * rsb->sb_agblocks << rsb->sb_blocklog; - - checked[agno] = 1; - retval = get_sb(sb, off, size, agno); - if (retval == XR_EOF) - goto out_free_list; - - if (retval == XR_OK) { - /* - * save away geometry info. - * don't bother checking the sb - * against the agi/agf as the odds - * of the sb being corrupted in a way - * that it is internally consistent - * but not consistent with the rest - * of the filesystem is really really low. - */ - get_sb_geometry(&geo, sb); - list = add_geo(list, &geo, agno); - num_ok++; - } + for (agno = 1; agno < rsb->sb_agcount; agno++) { + off = (xfs_off_t)agno * rsb->sb_agblocks << rsb->sb_blocklog; + + retval = get_sb(sb, off, size, agno); + if (retval == XR_EOF) + goto out_free_list; + + if (retval == XR_OK) { + /* + * save away geometry info. don't bother checking the + * sb against the agi/agf as the odds of the sb being + * corrupted in a way that it is internally consistent + * but not consistent with the rest of the filesystem is + * really really low. + */ + get_sb_geometry(&geo, sb); + list = add_geo(list, &geo, agno); + num_ok++; } } /* * see if we have enough superblocks to bother with */ + retval = 0; if (num_ok < num_sbs / 2) { retval = XR_INSUFF_SEC_SB; goto out_free_list; @@ -867,6 +846,5 @@ out_free_list: free_geo(list); free(sb); - free(checked); - return(retval); + return retval; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/scan.c new/xfsprogs-3.2.3/repair/scan.c --- old/xfsprogs-3.2.2/repair/scan.c 2014-12-02 03:31:11.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/scan.c 2015-06-10 02:08:59.000000000 +0200 @@ -225,7 +225,24 @@ do_warn( _("expected owner inode %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"), ino, be64_to_cpu(block->bb_u.l.bb_owner), bno); - return(1); + return 1; + } + /* verify block number */ + if (be64_to_cpu(block->bb_u.l.bb_blkno) != + XFS_FSB_TO_DADDR(mp, bno)) { + do_warn( +_("expected block %" PRIu64 ", got %llu, bmbt block %" PRIu64 "\n"), + XFS_FSB_TO_DADDR(mp, bno), + be64_to_cpu(block->bb_u.l.bb_blkno), bno); + return 1; + } + /* verify uuid */ + if (platform_uuid_compare(&block->bb_u.l.bb_uuid, + &mp->m_sb.sb_uuid) != 0) { + do_warn( +_("wrong FS UUID, bmbt block %" PRIu64 "\n"), + bno); + return 1; } } @@ -770,7 +787,8 @@ (inodes_per_block <= XFS_INODES_PER_CHUNK && off != 0) || (inodes_per_block > XFS_INODES_PER_CHUNK && off % XFS_INODES_PER_CHUNK != 0) || - (fs_aligned_inodes && agbno % fs_ino_alignment != 0)) { + (fs_aligned_inodes && fs_ino_alignment && + agbno % fs_ino_alignment != 0)) { do_warn( _("badly aligned inode rec (starting inode = %" PRIu64 ")\n"), lino); @@ -929,7 +947,8 @@ (inodes_per_block <= XFS_INODES_PER_CHUNK && off != 0) || (inodes_per_block > XFS_INODES_PER_CHUNK && off % XFS_INODES_PER_CHUNK != 0) || - (fs_aligned_inodes && agbno % fs_ino_alignment != 0)) { + (fs_aligned_inodes && fs_ino_alignment && + agbno % fs_ino_alignment != 0)) { do_warn( _("badly aligned finobt inode rec (starting inode = %" PRIu64 ")\n"), lino); @@ -1483,7 +1502,7 @@ int status; char *objname = NULL; - sb = (struct xfs_sb *)calloc(BBSIZE, 1); + sb = (struct xfs_sb *)calloc(BBTOB(XFS_FSS_TO_BB(mp, 1)), 1); if (!sb) { do_error(_("can't allocate memory for superblock\n")); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/xfsprogs-3.2.2/repair/versions.c new/xfsprogs-3.2.3/repair/versions.c --- old/xfsprogs-3.2.2/repair/versions.c 2014-12-03 21:36:27.000000000 +0100 +++ new/xfsprogs-3.2.3/repair/versions.c 2015-06-10 02:08:59.000000000 +0200 @@ -175,6 +175,20 @@ } } + /* Look for V5 feature flags we don't know about */ + if (XFS_SB_VERSION_NUM(sb) >= XFS_SB_VERSION_5 && + (xfs_sb_has_compat_feature(sb, XFS_SB_FEAT_COMPAT_UNKNOWN) || + xfs_sb_has_ro_compat_feature(sb, XFS_SB_FEAT_RO_COMPAT_UNKNOWN) || + xfs_sb_has_incompat_feature(sb, XFS_SB_FEAT_INCOMPAT_UNKNOWN))) { + do_warn( +_("Superblock has unknown compat/rocompat/incompat features (0x%x/0x%x/0x%x).\n" + "Using a more recent xfs_repair is recommended.\n"), + sb->sb_features_compat & XFS_SB_FEAT_COMPAT_UNKNOWN, + sb->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_UNKNOWN, + sb->sb_features_incompat & XFS_SB_FEAT_INCOMPAT_UNKNOWN); + return 1; + } + if (xfs_sb_version_hasattr(sb)) { if (!fs_attributes_allowed) { if (!no_modify) { ++++++ xfsprogs-docdir.diff ++++++ --- /var/tmp/diff_new_pack.0HW5VE/_old 2015-07-16 17:16:12.000000000 +0200 +++ /var/tmp/diff_new_pack.0HW5VE/_new 2015-07-16 17:16:12.000000000 +0200 @@ -2,9 +2,7 @@ =================================================================== --- include/builddefs.in.orig +++ include/builddefs.in -@@ -56,11 +56,11 @@ PKG_ROOT_SBIN_DIR = @root_sbindir@ - PKG_ROOT_LIB_DIR= @root_libdir@@libdirsuffix@ - PKG_LIB_DIR = @libdir@@libdirsuffix@ +@@ -60,7 +60,7 @@ PKG_LIB_DIR = @libdir@@libdirsuffix@ PKG_INC_DIR = @includedir@/xfs DK_INC_DIR = @includedir@/disk PKG_MAN_DIR = @mandir@ @@ -13,5 +11,3 @@ PKG_LOCALE_DIR = @datadir@/locale CC = @cc@ - AWK = @awk@ - SED = @sed@ ++++++ xfsprogs-ppc64.diff ++++++ --- /var/tmp/diff_new_pack.0HW5VE/_old 2015-07-16 17:16:12.000000000 +0200 +++ /var/tmp/diff_new_pack.0HW5VE/_new 2015-07-16 17:16:12.000000000 +0200 @@ -2,9 +2,11 @@ include/platform_defs.h.in | 5 +++++ 1 file changed, 5 insertions(+) +Index: include/platform_defs.h.in +=================================================================== --- include/platform_defs.h.in.orig +++ include/platform_defs.h.in -@@ -44,9 +44,14 @@ typedef unsigned short __u16; +@@ -46,9 +46,14 @@ typedef unsigned short __u16; typedef signed short __s16; typedef unsigned int __u32; typedef signed int __s32;
