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;



Reply via email to