]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/log
thirdparty/xfsprogs-dev.git
8 years agoplatform: Add statvfs64 for OS X
Jan Tulak [Tue, 13 Oct 2015 23:58:24 +0000 (10:58 +1100)] 
platform: Add statvfs64 for OS X

Simply rename statvfs64 to statfs with a #define.
OSX version of statvfs is missing some members, so if the renaming
is in effect (stavfs64 is defined), don't try to use them and go
directly for the other member value.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoplatform: Add a timer implementation for OS X
Jan Tulak [Tue, 13 Oct 2015 23:58:23 +0000 (10:58 +1100)] 
platform: Add a timer implementation for OS X

OS X does not have the timer used in xfs_repair.
Add a simple implementation providing the required
capabilities.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_estimate: change nftw64 to nftw
Jan Tulak [Tue, 13 Oct 2015 23:58:23 +0000 (10:58 +1100)] 
xfs_estimate: change nftw64 to nftw

There is only one usage of nftw64 in entire xfsprogs, but
multiple usages of nftw. It seems the 64 variant has no reason,
and causes difficulties with some other platforms which has
only nftw call.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoplatform: Remove conflicting define for OS X
Jan Tulak [Tue, 13 Oct 2015 23:58:17 +0000 (10:58 +1100)] 
platform: Remove conflicting define for OS X

ENOATTR already exists in OS X.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoplatform: uuid changes for OS X
Jan Tulak [Tue, 13 Oct 2015 23:58:15 +0000 (10:58 +1100)] 
platform: uuid changes for OS X

UUID API changed in OS X in last few years, so fix the platform_ calls.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild: Add autoconf check for fsetxattr call
Jan Tulak [Tue, 13 Oct 2015 23:58:03 +0000 (10:58 +1100)] 
build: Add autoconf check for fsetxattr call

OS X has fsetxattr() in another header and with different arguments.
For now, check for the Linux variant and if not available, skip
the code using the call.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild: Add includes required for OS X
Jan Tulak [Tue, 13 Oct 2015 23:58:00 +0000 (10:58 +1100)] 
build: Add includes required for OS X

Delta patch, an older version missing 3 includes was merged
into 4.2.0-rc2.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: prefix XATTR_LIST_MAX with XFS_
Jan Tulak [Tue, 13 Oct 2015 23:57:57 +0000 (10:57 +1100)] 
libxfs: prefix XATTR_LIST_MAX with XFS_

As we depends on XATTR_ value that is available only on some
platforms, prefix it with XFS_ and allow for an alternative value
in future.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: avoid dependency on Linux XATTR_SIZE_MAX
Jan Tulak [Tue, 13 Oct 2015 23:57:54 +0000 (10:57 +1100)] 
libxfs: avoid dependency on Linux XATTR_SIZE_MAX

Currently, we depends on Linux XATTR value for on disk
definitions. Which causes trouble on other platforms and
maybe also if this value was to change.

Fix it by creating a custom definition independent from
those in Linux (although with the same values), so it is OK
with the be16 fields used for holding these attributes.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoplatform: Add XATTR_LIST_MAX to OS X headers
Jan Tulak [Tue, 13 Oct 2015 23:57:52 +0000 (10:57 +1100)] 
platform: Add XATTR_LIST_MAX to OS X headers

OS X has no XATTR_LIST_MAX value. So add it to the platform header.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild: make libblkid usage optional
Jan Tulak [Tue, 13 Oct 2015 23:57:39 +0000 (10:57 +1100)] 
build: make libblkid usage optional

Because not all platforms have up-to-date blkid with required
functions, allow at least partial functionality by adding
--enable-blkid=yes/no optional configure argument.

When blkid is disabled, signature detection and device geometry
detection doesn't work.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: Fix up warning strings in da_util.c
Eric Sandeen [Tue, 13 Oct 2015 23:33:19 +0000 (10:33 +1100)] 
xfs_repair: Fix up warning strings in da_util.c

Switch the warning messages based on which fork has
encountered the problem.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: move common dir2 and attr_repair code to da_util.c
Eric Sandeen [Tue, 13 Oct 2015 23:33:07 +0000 (10:33 +1100)] 
xfs_repair: move common dir2 and attr_repair code to da_util.c

Now that dir2.c and attr_repair.c are functionally identical,
move the duplicate code into a new file da_util.c, with da_util.h
as a header file for the common functions.

Last step will be to fix up comments and printfs' to be appropriate
for code that checks both dirs and attrs.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: whitespace & comments
Eric Sandeen [Tue, 13 Oct 2015 23:32:23 +0000 (10:32 +1100)] 
xfs_repair: whitespace & comments

This patch does nothing but fix up whitespace and comments
to match across dir2.c and attr_repair.c

At this point, a diff of repair/dir2.c and attr_repair.c
show them to be identical in function.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: Remove more differences between attr & dir2
Eric Sandeen [Tue, 13 Oct 2015 23:32:16 +0000 (10:32 +1100)] 
xfs_repair: Remove more differences between attr & dir2

This is a hodgepodge of unrelated but not-completely-trivial
chagnes to both the dir2 and attr code to make their common
code more similar.

* It removes the whichfork checking in attr_repair, because we
  only get there with XFS_ATTR_FORK.
* It changes the magic-checking logic slightly to match.
* It swaps some (bp == NULL) tests for (!bp)

These should be purely cosmetic changes.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: better checking of v5 attributes
Eric Sandeen [Tue, 13 Oct 2015 23:31:48 +0000 (10:31 +1100)] 
xfs_repair: better checking of v5 attributes

The commit:

0519f66 xfs_repair: better checking of v5 metadata fields

added new corruption checks to dir2.c but missed the similar
code in attr_repair.c; add that here.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: catch bad level/depth in da node
Eric Sandeen [Tue, 13 Oct 2015 23:31:17 +0000 (10:31 +1100)] 
xfs_repair: catch bad level/depth in da node

Two tests added some time ago to dir2.c:

44dae5e xfs_repair: test for bad level in dir2 node
28148f6 xfs_repair: catch bad depth in traverse_int_dir2block

never made it to the similar tree-walking code in attr_repair.c;
fix that up here.  The error string details will be fixed up
later.

Signed-off-by; Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: Remove BUF_PTR from attr_repair.c
Eric Sandeen [Tue, 13 Oct 2015 23:31:08 +0000 (10:31 +1100)] 
xfs_repair: Remove BUF_PTR from attr_repair.c

The BUF_PTR macro was removed from kernelspace a while ago
(6292604 xfs: Remove the macro XFS_BUF_PTR) but it lives
on in some parts of xfsprogs.  dir2.c doesn't use it,
but similar code in attr_repair.c does.  remove it from
attr_repair.c to converge the code.

Remove a related but unnecessary cast from a *void b_addr
in dir2.c while we're at it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: add XR_DIR_TRACE to dir2.c
Eric Sandeen [Tue, 13 Oct 2015 23:31:00 +0000 (10:31 +1100)] 
xfs_repair: add XR_DIR_TRACE to dir2.c

attr_repair.c has many printf-tracepoints under
#ifdef XR_DIR_TRACE, but the similar code in dir2.c does not.

Add these same tracepoints to remove more differences between
these two pieces of code.

Not all messages are quite correct; those will be fixed up last.
For now we just make the code more obviously similar.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: fix use-after-free in verify_final_dir2_path
Eric Sandeen [Tue, 13 Oct 2015 23:30:52 +0000 (10:30 +1100)] 
xfs_repair: fix use-after-free in verify_final_dir2_path

Way back in 2002, commit 948ce18 fixed a potential use-after-free
in verify_final_da_path, but the same fix was not applied to
verify_final_dir2_path; apply it now.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: use multibuffer read routines in attr_repair.c
Eric Sandeen [Tue, 13 Oct 2015 23:30:26 +0000 (10:30 +1100)] 
xfs_repair: use multibuffer read routines in attr_repair.c

verify_da_path and traverse_int_dablock are similar to
verify_dir2_path and traverse_int_dir2block, but one
difference is that the dir2 code reads using the
multibuffer capable da_read_buf() routine, whereas
the attr code doesn't need to, and just calls
libxfs_readbuf.

The multibuffer code falls back just fine when the
geometry indicates that it's not needed, so use that
same code in the attribute routines, and remove
another dir2 / da difference.  We make da_read_buf()
non-static to facilitate this.

Finally, add a local *geo to these routines,
to make the code even more similar at this point.
The geometry will get passed in later in the series.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: make CRC checking consistent in path verification
Eric Sandeen [Tue, 13 Oct 2015 23:29:32 +0000 (10:29 +1100)] 
xfs_repair: make CRC checking consistent in path verification

verify_da_path and verify_dir2_path both take steps to
re-compute the CRC of the block if it otherwise looks
ok and no other changes are needed.  They do this inside
a loop, but the approach differs; verify_da_path expects
its caller to check the first buffer prior to the loop,
and verify_dir2_path expects its caller to check the last
buffer after the loop.

Make this consistent by semi-arbitrarily choosing to make
verify_da_path (and its caller) match the method used by
verify_dir2_path, and check the last buffer after the
loop is done.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: remove type from da & dir2 cursors
Eric Sandeen [Tue, 13 Oct 2015 23:29:20 +0000 (10:29 +1100)] 
xfs_repair: remove type from da & dir2 cursors

The type field in these cursors is only set (and only
in the attr code), and it's never read; just remove
it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: remove trace-only 'n' member from da_level_state
Eric Sandeen [Tue, 13 Oct 2015 23:28:43 +0000 (10:28 +1100)] 
xfs_repair: remove trace-only 'n' member from da_level_state

The da_level_state structure contains an 'n' member
when XR_DIR_TRACE is enabled, which is a) write only, and
b) set by a macro which doesn't exist (XFS_BUF_TO_DA_INTNODE)

Removing this structure member fixes compilation with
XR_DIR_TRACE enabled, and also makes da_level_state identical
to dir2_level_state, so the two can be combined later.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_db: enable blockget for v5 filesystems
Darrick J. Wong [Tue, 13 Oct 2015 23:25:37 +0000 (10:25 +1100)] 
xfs_db: enable blockget for v5 filesystems

Plumb in the necessary magic number checks and other fixups required
to handle v5 filesystems.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_db: trash the block at the top of the cursor stack
Darrick J. Wong [Tue, 13 Oct 2015 23:25:23 +0000 (10:25 +1100)] 
xfs_db: trash the block at the top of the cursor stack

Add a new -z option to blocktrash to make it trash the block that's at
the top of the stack, so that we can perform targeted fuzzing.  While
we're at it, prevent fuzzing off the end of the buffer and add a -o
parameter so that we can specify an offset to start fuzzing from.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_db: enable blocktrash for checksummed filesystems
Darrick J. Wong [Tue, 13 Oct 2015 23:24:47 +0000 (10:24 +1100)] 
xfs_db: enable blocktrash for checksummed filesystems

Disable the write verifiers when we're trashing a block.  With this
in place, create a xfs fuzzer script that formats, populates, corrupts,
tries to use, repairs, and tries again to use a crash test xfs image.
Hopefully this will shake out some v5 filesystem bugs.

This allow trashing of log blocks and symlinks, and require the
caller to explicitly ask for trashing of log blocks and super
blocks.  Allowing log blocks by default skews the trashing heavily
in favor of (probably unused) log blocks, which doesn't help us with
fuzzing.  Furthermore, trashing the superblock results in a time
consuming sector by sector superblock hunt.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_io: support reflinking and deduping file ranges
Darrick J. Wong [Tue, 13 Oct 2015 23:23:38 +0000 (10:23 +1100)] 
xfs_io: support reflinking and deduping file ranges

Wire up xfs_io to use the XFS range clone and dedupe ioctls to make
files share data blocks.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Release v4.2.0 v4.2.0
Dave Chinner [Mon, 7 Sep 2015 00:14:31 +0000 (10:14 +1000)] 
xfsprogs: Release v4.2.0

Update all the release files for a 4.2.0 release.

Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: release corrupt directory node buffer
Darrick J. Wong [Mon, 7 Sep 2015 00:13:41 +0000 (10:13 +1000)] 
xfs_repair: release corrupt directory node buffer

If repair encounters a dir node block that fails checksum or
verification, free the buffer before the directory gets rebuilt.

Reported-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: update btree ptr when attr node level moves to next buffer
Brian Foster [Wed, 2 Sep 2015 22:43:23 +0000 (08:43 +1000)] 
xfs_repair: update btree ptr when attr node level moves to next buffer

xfs_repair walks the attribute fork btree for files with a significant
number of extended attributes. It creates a cursor, walks the leaf
blocks, and verifies the path from each leaf block back to the root of
the tree. Eryu reports that the following test causes xfs_repair to
report corruption on 512b filesystems:

num_xattrs=577
for ((i = 1; i <= $num_xattrs; i++)); do
name="user.attr_$(printf "%04d" $i)"
setfattr -n $name -v "val_$(printf "%04d" $i)" <file>
done

xfs_repair complains that the block number of the leaf (level 0) does
not match the block number of the level 1 node block entry. This occurs
as soon as the left-most level 1 node block is completely processed and
the cursor is walked to the next level 1 block in the array. The problem
is that while verify_da_path() updates level 1 of the cursor to the next
level 1 buffer, it fails to correctly update the btree pointer to the
entry list of the new buffer. As a result, the child leaf block of the
next node block is incorrectly validated against the entry list of the
previous node block.

Update verify_da_path() to correctly update the btree pointer to the
entry list of the new node block when the cursor is walked forward at
higher (non-leaf) levels.

Reported-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoprogs: use CURDIR instead of relative paths for header symlinks
Lucas Stach [Wed, 2 Sep 2015 22:43:16 +0000 (08:43 +1000)] 
progs: use CURDIR instead of relative paths for header symlinks

This fixes broken header symlinks when make isn't triggered from the
xfsprogs source location, but as a recursion from another make in a
different directory. This is a common pattern found in cross build
systems.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: force not-so-bad bmbt blocks back through the verifier
Darrick J. Wong [Wed, 2 Sep 2015 22:43:07 +0000 (08:43 +1000)] 
xfs_repair: force not-so-bad bmbt blocks back through the verifier

If during prefetch we encounter a bmbt block that fails the CRC check
due to corruption in the unused part of the block, force the buffer
back through the non-prefetch verifiers later so that the CRC is
updated.  Otherwise, the bad checksum goes unfixed and the kernel will
still flag the bmbt block as invalid.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: check v5 filesystem attr block header sanity
Darrick J. Wong [Wed, 2 Sep 2015 22:42:50 +0000 (08:42 +1000)] 
xfs_repair: check v5 filesystem attr block header sanity

Check the v5 fields (uuid, blocknr, owner) of attribute blocks for
obvious errors while scanning xattr blocks.  If the ownership info
is incorrect, kill the block.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: ignore "repaired" flag after we decide to clear xattr block
Darrick J. Wong [Wed, 2 Sep 2015 22:42:37 +0000 (08:42 +1000)] 
xfs_repair: ignore "repaired" flag after we decide to clear xattr block

If in the course of examining extended attribute block contents we
first decide to repair an entry (*repair = 1) but secondly decide to
clear the whole block, set *repair = 0 because the clearing action
only happens if *repair == 0.  Put another way, if we're nuking a
block, don't pretend like we've fixed it too.

v2: fix all the paths to clear the attr block if the processing
functions error out.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: clear buffer state flags in libxfs_getbuf and variants
Darrick J. Wong [Wed, 2 Sep 2015 22:42:01 +0000 (08:42 +1000)] 
libxfs: clear buffer state flags in libxfs_getbuf and variants

When we're running xfs_repair with prefetch enabled, it's possible
that repair will decide to clear an inode without examining all
metadata blocks owned by that inode.  This leaves the unreferenced
prefetched buffers marked UNCHECKED, which will cause a subsequent CRC
error if the block is reallocated to a different structure and read
more than once.  Typically this happens when a large directory is
corrupted and lost+found has to grow to accomodate all the
disconnected inodes.

In libxfs_getbuf*(), we're supposed to return an unused buffer which
has a clean state.  Unfortunately, things like UNCHECKED can hang
around to cause incorrect verifier errors later, so change those
functions to launder the state bits clean.

v2: Change the function name to reset_buf_state() to reflect what
the function is trying to accomplish.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: fix XFS_WANT_CORRUPTED_* macros to return negative error codes
Darrick J. Wong [Wed, 2 Sep 2015 22:41:48 +0000 (08:41 +1000)] 
libxfs: fix XFS_WANT_CORRUPTED_* macros to return negative error codes

Since the rest of libxfs returns negative error codes, these two sanity
checking macros ought to have the same applied.  While we're at it,
fix a couple more sign errors in the same file.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: verifier should set buffer error when da block has a bad magic number
Darrick J. Wong [Wed, 2 Sep 2015 22:41:33 +0000 (08:41 +1000)] 
libxfs: verifier should set buffer error when da block has a bad magic number

If xfs_da3_node_read_verify() doesn't recognize the magic number of a
buffer it's just read, set the buffer error to -EFSCORRUPTED so that
the error can be sent up to userspace.  Without this patch we'll
notice the bad magic eventually while trying to traverse or change
the block, but we really ought to fail early in the verifier.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: set args.geo in longform_dir2_entry_check_data
Eric Sandeen [Wed, 2 Sep 2015 22:40:50 +0000 (08:40 +1000)] 
xfs_repair: set args.geo in longform_dir2_entry_check_data

Here's another one where we miss setting da_args->geo:

longform_dir2_entry_check_data
        struct xfs_da_args      da = {
                .dp = ip,
// .geo is unset
        };
...
libxfs_dir2_data_make_free(&da ...)
xfs_dir2_data_make_free
endptr = (char *)hdr + args->geo->blksize;
BOOM

Addresses-Coverity-Id: 1298008
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: set args.geo in dir2_kill_block
Eric Sandeen [Wed, 2 Sep 2015 22:40:03 +0000 (08:40 +1000)] 
xfs_repair: set args.geo in dir2_kill_block

This path in xfs_repair:

dir2_kill_block
libxfs_da_shrink_inode
xfs_dir2_shrink_inode
xfs_dir2_db_to_da

segfaults, because dir2_kill_block() does not initialize
args.geo, and a null geometry winds up in xfs_dir2_db_to_da(),
which dereferences it.

Fix that.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Release v4.2.0-rc3 v4.2.0-rc3
Dave Chinner [Tue, 25 Aug 2015 00:37:21 +0000 (10:37 +1000)] 
xfsprogs: Release v4.2.0-rc3

Update all the release files for a 4.2.0-rc3 release.

Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoman pages: Minor fixes for xfs.5
Eric Sandeen [Tue, 25 Aug 2015 00:30:49 +0000 (10:30 +1000)] 
man pages: Minor fixes for xfs.5

Fix whitespace around logdev/rtdev mount option, and add missing
qnoenforce.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: revert OS X dummy function changes
Dave Chinner [Tue, 25 Aug 2015 00:10:51 +0000 (10:10 +1000)] 
xfsprogs: revert OS X dummy function changes

Commit ff6f019d ("xfsprogs: missing and dummy calls for OS X
support") was committed prematurely. Revert it for now so that
better solutions can be committed cleanly.

Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: Use consistent logging message prefixes
Joe Perches [Wed, 29 Jul 2015 01:52:04 +0000 (11:52 +1000)] 
xfs: Use consistent logging message prefixes

The second and subsequent lines of multi-line logging messages
are not prefixed with the same information as the first line.

Separate messages with newlines into multiple calls to ensure
consistent prefixing and allow easier grep use.

Signed-off-by: Joe Perches <joe@perches.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: remote attribute headers contain an invalid LSN
Dave Chinner [Wed, 29 Jul 2015 01:48:01 +0000 (11:48 +1000)] 
xfs: remote attribute headers contain an invalid LSN

In recent testing, a system that crashed failed log recovery on
restart with a bad symlink buffer magic number:

XFS (vda): Starting recovery (logdev: internal)
XFS (vda): Bad symlink block magic!
XFS: Assertion failed: 0, file: fs/xfs/xfs_log_recover.c, line: 2060

On examination of the log via xfs_logprint, none of the symlink
buffers in the log had a bad magic number, nor were any other types
of buffer log format headers mis-identified as symlink buffers.
Tracing was used to find the buffer the kernel was tripping over,
and xfs_db identified it's contents as:

000: 5841524d 00000000 00000346 64d82b48 8983e692 d71e4680 a5f49e2c b317576e
020: 00000000 00602038 00000000 006034ce d0020000 00000000 4d4d4d4d 4d4d4d4d
040: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
060: 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d 4d4d4d4d
.....

This is a remote attribute buffer, which are notable in that they
are not logged but are instead written synchronously by the remote
attribute code so that they exist on disk before the attribute
transactions are committed to the journal.

The above remote attribute block has an invalid LSN in it - cycle
0xd002000, block 0 - which means when log recovery comes along to
determine if the transaction that writes to the underlying block
should be replayed, it sees a block that has a future LSN and so
does not replay the buffer data in the transaction. Instead, it
validates the buffer magic number and attaches the buffer verifier
to it.  It is this buffer magic number check that is failing in the
above assert, indicating that we skipped replay due to the LSN of
the underlying buffer.

The problem here is that the remote attribute buffers cannot have a
valid LSN placed into them, because the transaction that contains
the attribute tree pointer changes and the block allocation that the
attribute data is being written to hasn't yet been committed. Hence
the LSN field in the attribute block is completely unwritten,
thereby leaving the underlying contents of the block in the LSN
field. It could have any value, and hence a future overwrite of the
block by log recovery may or may not work correctly.

Fix this by always writing an invalid LSN to the remote attribute
block, as any buffer in log recovery that needs to write over the
remote attribute should occur. We are protected from having old data
written over the attribute by the fact that freeing the block before
the remote attribute is written will result in the buffer being
marked stale in the log and so all changes prior to the buffer stale
transaction will be cancelled by log recovery.

Hence it is safe to ignore the LSN in the case or synchronously
written, unlogged metadata such as remote attribute blocks, and to
ensure we do that correctly, we need to write an invalid LSN to all
remote attribute blocks to trigger immediate recovery of metadata
that is written over the top.

As a further protection for filesystems that may already have remote
attribute blocks with bad LSNs on disk, change the log recovery code
to always trigger immediate recovery of metadata over remote
attribute blocks.

cc: <stable@vger.kernel.org>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: Fix uninitialized return value in xfs_alloc_fix_freelist()
Jan Kara [Sun, 23 Aug 2015 22:59:12 +0000 (08:59 +1000)] 
xfs: Fix uninitialized return value in xfs_alloc_fix_freelist()

xfs_alloc_fix_freelist() can sometimes jump to out_agbp_relse
without ever setting value of 'error' variable which is then
returned. This can happen e.g. when pag->pagf_init is set but AG is
for metadata and we want to allocate user data.

Fix the problem by initializing 'error' to 0, which is the desired
return value when we decide to skip this group.

CC: xfs@oss.sgi.com
Coverity-id: 1309714
Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: remote attributes need to be considered data
Dave Chinner [Wed, 29 Jul 2015 01:48:02 +0000 (11:48 +1000)] 
xfs: remote attributes need to be considered data

We don't log remote attribute contents, and instead write them
synchronously before we commit the block allocation and attribute
tree update transaction. As a result we are writing to the allocated
space before the allcoation has been made permanent.

As a result, we cannot consider this allocation to be a metadata
allocation. Metadata allocation can take blocks from the free list
and so reuse them before the transaction that freed the block is
committed to disk. This behaviour is perfectly fine for journalled
metadata changes as log recovery will ensure the free operation is
replayed before the overwrite, but for remote attribute writes this
is not the case.

Hence we have to consider the remote attribute blocks to contain
data and allocate accordingly. We do this by dropping the
XFS_BMAPI_METADATA flag from the block allocation. This means the
allocation will not use blocks that are on the busy list without
first ensuring that the freeing transaction has been committed to
disk and the blocks removed from the busy list. This ensures we will
never overwrite a freed block without first ensuring that it is
really free.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag
Dave Chinner [Wed, 29 Jul 2015 01:51:01 +0000 (11:51 +1000)] 
xfs: xfs_bunmapi() does not need XFS_BMAPI_METADATA flag

xfs_bunmapi() doesn't care what type of extent is being freed and
does not look at the XFS_BMAPI_METADATA flag at all. As such we can
remove the XFS_BMAPI_METADATA from all callers that use it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs: don't cast string literals
Eric Sandeen [Sun, 31 May 2015 21:15:38 +0000 (07:15 +1000)] 
xfs: don't cast string literals

The commit:

a9273ca5 xfs: convert attr to use unsigned names

added these (unsigned char *) casts, but then the _SIZE macros
return "7" - size of a pointer minus one - not the length of
the string.  This is harmless in the kernel, because the _SIZE
macros are not used, but as we sync up with userspace, this will
matter.

I don't think the cast is necessary; i.e. assigning the string
literal to an unsigned char *, or passing it to a function
expecting an unsigned char *, should be ok, right?

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: Fix file type directory corruption for btree directories
Jan Kara [Mon, 24 Aug 2015 01:52:45 +0000 (11:52 +1000)] 
libxfs: Fix file type directory corruption for btree directories

Users have occasionally reported that file type for some directory
entries is wrong. This mostly happened after updating libraries some
libraries. After some debugging the problem was traced down to
xfs_dir2_node_replace(). The function uses args->filetype as a file type
to store in the replaced directory entry however it also calls
xfs_da3_node_lookup_int() which will store file type of the current
directory entry in args->filetype. Thus we fail to change file type of a
directory entry to a proper type.

Fix the problem by storing new file type in a local variable before
calling xfs_da3_node_lookup_int().

Reported-by: Giacomo Comes <comes@naic.edu>
Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: remove self-assignment in libxfs/util.c
Eric Sandeen [Mon, 24 Aug 2015 01:52:45 +0000 (11:52 +1000)] 
libxfs: remove self-assignment in libxfs/util.c

We don't have percpu counters in userspace, so libxfs plays
tricks.  Rather than calling percpu_counter_set() in
xfs_reinit_percpu_counters, we just directly assign
the values in mp->m_sb to the counters in mp.

But this was already handled by #defining the percpu counters
in the mount structure to those in the superblock, i.e.:

#define m_icount        m_sb.sb_icount
#define m_ifree         m_sb.sb_ifree
#define m_fdblocks      m_sb.sb_fdblocks

so we actually end up with pointless self-assignment.

Define away the xfs_reinit_percpu_counters() function,
because it's a no-op.

Addresses-Coverity-Id: 1298009
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: unconditionally free blockmaps when threads complete
Eric Sandeen [Mon, 24 Aug 2015 01:52:45 +0000 (11:52 +1000)] 
xfs_repair: unconditionally free blockmaps when threads complete

blkmap_free() doesn't actually free the block map unless it's
inordinately large; this keeps us from constantly freeing
and re-allocating blockmaps for each inode, which makes sense.

However, once the threads which have allocated these structures
exit, we should actually free them; they can grow up to 2MB
for each of the data and attr maps, for each thread, and not
be freed through the normal blkmap_free() test.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: call IRELE(ip) after libxfs_trans_iget calls
Eric Sandeen [Mon, 24 Aug 2015 01:52:45 +0000 (11:52 +1000)] 
xfs_repair: call IRELE(ip) after libxfs_trans_iget calls

Commit 260c85e libxfs: dont free xfs_inode until complete
changed the alloc/free convention a bit:

    Originally, the xfs_inode are released upon the first
    call to xfs_trans_cancel, xfs_trans_commit, or
    inode_item_done.
    <snip>
    This patch does the following:
     1) Removes the iput from the transaction completion and
        requires that the xfs_inode allocators call IRELE()
        when they are done with the pointer.

But that change missed several callers in xfs_repair phase6;
fix that up.

Addresses-Coverity-Id: 1315100
Addresses-Coverity-Id: 1315101
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: free msgbuf on exit
Eric Sandeen [Mon, 24 Aug 2015 01:52:45 +0000 (11:52 +1000)] 
xfs_repair: free msgbuf on exit

Just to keep valgrind less noisy, and make it easiser to spot
more things that actually matter ...

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: fix memory leasks in libxfs_umount()
Eric Sandeen [Mon, 24 Aug 2015 01:52:42 +0000 (11:52 +1000)] 
libxfs: fix memory leasks in libxfs_umount()

libxfs_umount was failing to free a handful of resources; fix that
up.  Call it from xfs_copy as well, while we're at it; every other
libxfs_mount has a libxfs_umount counterpart, at least on a clean
exit.

[dchinner: fix superblock buffer leak uncovered by adding
 libxfs_umount() to xfs_copy. ]

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: fix broken EFSBADCRC/EFSCORRUPTED usage with buffer errors
Darrick J. Wong [Sun, 23 Aug 2015 23:21:01 +0000 (09:21 +1000)] 
xfs_repair: fix broken EFSBADCRC/EFSCORRUPTED usage with buffer errors

When we encounter CRC or verifier errors, bp->b_error is set to
-EFSBADCRC and -EFSCORRUPTED; note the negative sign.  For whatever
reason, repair and db use the positive versions, and therefore fail to
notice the error, so fix all the broken uses.

Note however that the db and repair turn the negative codes returned
by libxfs into positive codes that can be used with strerror.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_db: don't crash on a corrupt inode
Darrick J. Wong [Sun, 23 Aug 2015 23:21:01 +0000 (09:21 +1000)] 
xfs_db: don't crash on a corrupt inode

If the user selects a corrupt inode via the 'inode XXX' command, the
read verifier will fail and the io cursor at the top of the ring will
not have any data attached.  When this is the case, we cannot
dereference the NULL pointer or xfs_db will crash.  Therefore, check
the buffer pointer before using it.

It's arguable that we ought to retry the read without the verifiers
if the inode is corrupt or fails CRC, since this /is/ a debugging
tool, and maybe you wanted the contents anyway.

[dchinner: fixes xfs/003 on 1k block size failure]

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: readahead of dir3 data blocks should use the read verifier
Darrick J. Wong [Sun, 23 Aug 2015 23:21:01 +0000 (09:21 +1000)] 
libxfs: readahead of dir3 data blocks should use the read verifier

In the dir3 data block readahead function, use the regular read
verifier to check the block's CRC and spot-check the block contents
instead of calling the spot-checking routine directly.  This prevents
corrupted directory data blocks from being read into the kernel, which
can lead to garbage ls output and directory loops (if say one of the
entries contains invalid characters).

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agorepair: fix wrong logic when validating node magic number
Eryu Guan [Sun, 23 Aug 2015 23:21:01 +0000 (09:21 +1000)] 
repair: fix wrong logic when validating node magic number

Magic number is wrong only when != XFS_DA_NODE_MAGIC and
!= XFS_DA3_NODE_MAGIC.

This is triggered by shared/002 when testing 512 block size XFS.

  Phase 1 - find and verify superblock...
  Phase 2 - using internal log
          - scan filesystem freespace and inode maps...
          - found root inode chunk
  Phase 3 - for each AG...
          - scan (but don't clear) agi unlinked lists...
          - process known inodes and perform inode discovery...
          - agno = 0
  bad magic number febe in block 64 (108) for directory inode 35
  ......

Fix it by changing "||" to "&&".

Signed-off-by: Eryu Guan <eguan@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Release v4.2.0-rc2 v4.2.0-rc2
Dave Chinner [Tue, 18 Aug 2015 07:53:18 +0000 (17:53 +1000)] 
xfsprogs: Release v4.2.0-rc2

Update all the release files for a 4.2.0-rc2 release.

Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: v3 inodes are only valid on crc-enabled filesystems
Roger Willcocks [Tue, 18 Aug 2015 07:53:18 +0000 (17:53 +1000)] 
libxfs: v3 inodes are only valid on crc-enabled filesystems

xfs_repair was not detecting that version 3 inodes are invalid for
for non-CRC filesystems. The result is specific inode corruptions go
undetected and hence aren't repaired if only the version number is
out of range.

The core of the problem is that the XFS_DINODE_GOOD_VERSION() macro
doesn't know that valid inode versions are dependent on a superblock
version number. Fix this in libxfs, and propagate the new function
out into the rest of xfsprogs to fix the issue.

[dchinner: forward port from 3.2.4 to 4.2.0-rc1, move
xfs_dinode_good_version() to libxfs/xfs_inode-buf.c with all the
other dinode validation functions. ]

Reported-by: Leslie Rhorer <lrhorer@mygrande.net>
Signed-off-by: Roger Willcocks <roger@filmlight.ltd.uk>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agodoc: Update OS X build info and limitations
Jan Tulak [Tue, 18 Aug 2015 07:53:18 +0000 (17:53 +1000)] 
doc: Update OS X build info and limitations

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild: Add fls check into autoconf
Jan Tulak [Tue, 18 Aug 2015 07:53:18 +0000 (17:53 +1000)] 
build: Add fls check into autoconf

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild:: Add mntent.h check into autoconf
Jan Tulak [Tue, 18 Aug 2015 07:53:18 +0000 (17:53 +1000)] 
build:: Add mntent.h check into autoconf

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agobuild: Change OS X-specific CFLAGS/LDFLAGS
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
build: Change OS X-specific CFLAGS/LDFLAGS

OS X uses clang as a default compiler.
So remove incompatible options.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: Fix attr leaf block definition
Jan Kara [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
libxfs: Fix attr leaf block definition

struct xfs_attr_leafblock contains 'entries' array which is declared
with size 1 altough it can in fact contain much more entries. Since this
array is followed by further struct members, gcc (at least in version
4.8.3) thinks that the array has the fixed size of 1 element and thus
optimizes away all accesses beyond the end of array resulting in
non-working code. In particular this problem was seen with
xfsprogs-3.1.8.

Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agomkfs.xfs: fix ftype-vs-crc option combination testing
Eric Sandeen [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
mkfs.xfs: fix ftype-vs-crc option combination testing

mkfs.xfs got weird along the way; today it has different outcomes
depending on the order of option specification:

$ mkfs/mkfs.xfs -n ftype=1 -m crc=0 -dfile,name=fsfile,size=16g
cannot specify both crc and ftype
$ mkfs/mkfs.xfs -m crc=0 -n ftype=1 -dfile,name=fsfile,size=16g
<succeeds>

Somehow the tests got written as being constrained on what options
are specified - and in what order! - vs actually testing for
incompatible feature sets.

It's fine to specify both crc & ftype options, as long as it's an
allowed combination, so just test for the incompatible combination
(crc=1 and ftype=0) after all options have been processed.

[dchinner: fix dirftype init value so mkfs default config works]

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agolibxfs: remove sparse inode mount warning
Brian Foster [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
libxfs: remove sparse inode mount warning

The sparse inodes experimental feature warning fires multiple times
during mkfs because the warning is emitted as part of the superblock
verifier codepath. The warning is intended as a mount-time warning only
and has been relocated as such in the kernel repo.

Remove the warning from libxfs such that it is not emitted from
userspace.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: fix syntax error in include/buildmacros
Eryu Guan [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: fix syntax error in include/buildmacros

There's an extra ";" in include/buildmacros, which causes make
install-dev to fail

    ......
    Installing libhandle-install-dev
    cd ../libhandle/.libs; ... if [ "x/usr/lib64" != "x/usr/lib64"; ]; ...
    /bin/sh: line 0: [: missing `]'
    /bin/sh: ]: command not found
    ......

This was introduced by
02ef543 libhandle: fix installation for symlinked /usr

Signed-off-by: Eryu Guan <eguan@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_fsr: Fix parentheses around truth value
Eric Sandeen [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfs_fsr: Fix parentheses around truth value

Someone in the distant past must have responded to gcc's
warning about parentheses around assignment used as a truth
value by changing:

while (ret = func() == 0)
to:
while ((ret = func() == 0))

While this shuts up gcc, it doesn't yield the proper result.
If func () returns 0, func == 0 is true, and ret is assigned
a value of 1.

This does keep the while loop going, but it's a very strange
way to go about it, and may someday yield confusing results.

Fix this as:

while ((ret = func()) == 0)

so that ret gets the function return value as expected.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: prevent LIST_ macros conflicts
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: prevent LIST_ macros conflicts

BSD 4.4 added some LIST_ macros into system header files, which
causes "macro redefined" warnings. To ensure we use our own macros,
undefine the system ones at first.

The conflicting macros are LIST_HEAD and LIST_HEAD_INIT

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: missing and dummy calls for OS X support
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: missing and dummy calls for OS X support

Add and update various API, macros and types where is some change
in OS X or xfsprogs. Most changes are in darwin.h.

Add dummy implementations where native support is nonexistent
and the tools are not expected to work anyway, so all tools can be
at least compiled.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Add includes required for OS X builds
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: Add includes required for OS X builds

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Add ifdef dirent checks where it was missing
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: Add ifdef dirent checks where it was missing

CHANGED: text width fix

Add check for _DIRENT_HAVED_RECLEN/_OFF to read_directory().
In dump_dirent() these checks already are used, but they were
missing in read_directory.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: undefined variable fix
Jan Tulak [Tue, 18 Aug 2015 07:53:17 +0000 (17:53 +1000)] 
xfsprogs: undefined variable fix

Typo fix, which wasn't catch earlier due to #ifdef branching.  The
'rmnttomname' does not exists anywhere and looks like a hybrid between
rmntfromname and rmntonname. And because the previous if has has
'fromname' on both arguments of realpath, I choose the same approach
when fixing it.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agodb: fix uninitialised variable warnings
Dave Chinner [Tue, 18 Aug 2015 07:53:16 +0000 (17:53 +1000)] 
db: fix uninitialised variable warnings

New versions of gcc barf on the conversion table code in
db/convert.c. Shut it up by initialising the conversion array.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Release v4.2.0-rc1 v4.2.0-rc1
Dave Chinner [Mon, 3 Aug 2015 23:58:23 +0000 (09:58 +1000)] 
xfsprogs: Release v4.2.0-rc1

Update all the release files for a 4.2.0-rc1 release.

Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoMerge branch 'progs-misc-fixes-2' into for-next
Dave Chinner [Mon, 3 Aug 2015 23:57:50 +0000 (09:57 +1000)] 
Merge branch 'progs-misc-fixes-2' into for-next

Conflicts:
copy/xfs_copy.c

8 years agolibxfs: fix uuid check durign inode allocation
Dave Chinner [Mon, 3 Aug 2015 22:36:45 +0000 (08:36 +1000)] 
libxfs: fix uuid check durign inode allocation

Needs to check sb_meta_uuid now that we the sb_uuid can change on v5
filesystems.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agorepair: use sb_meta_uuid for checking of metadata headers
Dave Chinner [Mon, 3 Aug 2015 22:36:44 +0000 (08:36 +1000)] 
repair: use sb_meta_uuid for checking of metadata headers

Now that we can change the uuid on v5 filesystems, we always need to
verify the metadata uuid against sb_meta_uuid, not sb_uuid. This
fixes quite a few xfstests failures when UUIDs are changed before
executing tests.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_repair: Fix malloc size of rt_ext_tree_ptr
Eric Sandeen [Mon, 3 Aug 2015 22:36:41 +0000 (08:36 +1000)] 
xfs_repair: Fix malloc size of rt_ext_tree_ptr

rt_ext_tree_ptr points to an avl64tree_desc_t, but we malloc memory
according to the size of avltree_desc_t.  Oddly, the latter happens
to be larger, so we're ok, but may as well make it correct.

Addresses-Coverity-Id: 1297533
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfs_copy: fix up initial sb buffer read on CRC fs
Eric Sandeen [Mon, 3 Aug 2015 00:47:02 +0000 (10:47 +1000)] 
xfs_copy: fix up initial sb buffer read on CRC fs

My prior commit, aaf90a2 xfs_copy: fix copy of hard 4k devices
causes xfs_copy to emit a CRC error warning when copying a
CRC filesystem.

This is because we are now reading the maximum sector size,
and attempting to verify the CRC based on that (likely incorrect)
length.

In xfs_db, we currently just don't verify this read, so it's
not a problem.  In xfs_copy, we almost certainly want to verify.

So, first do the maximal read with no verifier; once it's read,
drop that buffer, and re-read with the proper sector size and
verifier.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it
Eric Sandeen [Mon, 3 Aug 2015 00:45:00 +0000 (10:45 +1000)] 
xfsprogs: Add new sb_meta_uuid field, update userspace tools to manipulate it

This adds a new superblock field, sb_meta_uuid.  This allows us to
change the use-visible UUID on crc-enabled filesytems from userspace
if desired, by copying the existing UUID to the new location for
metadata comparisons.  If this is done, an incompat flag must be
set to prevent older filesystems from mounting the filesystem, but
the original UUID can be restored, and the incompat flag removed,
with a new xfs_db / xfs_admin UUID command, "restore."

Much of this patch mirrors the kernel patch in simply renaming
the field used for metadata uuid comparison; other bits:

* Teach xfs_db to print the new meta_uuid field
* Allow xfs_db to generate a new UUID for CRC-enabled filesystems
* Allow xfs_db to revert to the original UUID and clear the flag
* Fix up xfs_copy to work with CRC-enabled filesystems
* Update the xfs_admin manpage to show the UUID "restore" command

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoMerge branch 'progs-header-cleanup' into for-next
Dave Chinner [Mon, 3 Aug 2015 00:35:13 +0000 (10:35 +1000)] 
Merge branch 'progs-header-cleanup' into for-next

8 years agoxfsprogs: use "unsigned short" instead of ushort
Theodore Ts'o [Mon, 3 Aug 2015 00:17:02 +0000 (10:17 +1000)] 
xfsprogs: use "unsigned short" instead of ushort

Android's bionic libc doesn't define ushort.  There isn't a real
benefit (other than perhaps conciseness) to use ushort over "unsigned
short", and it's only used in a handful of files in xfsprogs.  So
change over to using unsigned short everywhere.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: avoid use of si_tid in struct xlog_split_item
Theodore Ts'o [Mon, 3 Aug 2015 00:16:48 +0000 (10:16 +1000)] 
xfsprogs: avoid use of si_tid in struct xlog_split_item

In Android's bionic libc (as well as the Linux kernel's
include/uapi/asm-generic/siginfo.h), si_tid is a #define to provide
backwards compatibility for the timerid in the siginfo structure.
This breaks the compile of logprint/log_misc.c.  Change this to be
si_xtid in order to avoid a namespace collision

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: define and use BUILD_CC in configure.ac for cross compilation
Theodore Ts'o [Mon, 3 Aug 2015 00:16:21 +0000 (10:16 +1000)] 
xfsprogs: define and use BUILD_CC in configure.ac for cross compilation

In order to support cross-compilation, we need to build gen_crc32table
using the C compiler targetted for the build platform, since it is run
as part of the build process.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: pull in libgen.h to get prototype for basename()
Theodore Ts'o [Mon, 3 Aug 2015 00:16:01 +0000 (10:16 +1000)] 
xfsprogs: pull in libgen.h to get prototype for basename()

The function prototype for basename() is in <libgen.h>, per Posix.
Without the the function prototype, the build will throw errors due to
the missing prototype.

On glibc, using libgen.h will force the use of Poxis's basename(),
instead of glibc's basename() with GNU extensions.  However, xfsprogs
doesn't depend on any of the GNU extensions, so this is fine.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: define NBBY if not defined by the system header files
Theodore Ts'o [Mon, 3 Aug 2015 00:15:45 +0000 (10:15 +1000)] 
xfsprogs: define NBBY if not defined by the system header files

Android's bionic libc doesn't define NBBY; this isn't a standard
define, and since all modern/sane platforms have 8 bits per byte, use
this as a default.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Use glibtoolize on osx
Jan Tulak [Mon, 3 Aug 2015 00:07:42 +0000 (10:07 +1000)] 
xfsprogs: Use glibtoolize on osx

OS X doesn't have libtoolize binary by default, and the available$
ports are named "glibtoolize". Autodetect this issue.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Don't Make .po files with gettext disabled
Jan Tulak [Mon, 3 Aug 2015 00:06:21 +0000 (10:06 +1000)] 
xfsprogs: Don't Make .po files with gettext disabled

"po" target is added only if gettext binary is found.
Without this patch, Make tried to build the target even
with --enable-gettext=no configure option, which led
to a failing build.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: Search path for utilities unified
Jan Tulak [Mon, 3 Aug 2015 00:05:35 +0000 (10:05 +1000)] 
xfsprogs: Search path for utilities unified

Currently, when autoconf is checking for an utility, every utility has
its own pathes defined independently. Unify it in a single variable
used for (almost) all utilities.

Also, add /opt/local/bin to the path.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: blkid is now mandatory
Jan Tulak [Mon, 3 Aug 2015 00:05:08 +0000 (10:05 +1000)] 
xfsprogs: blkid is now mandatory

Because blkid is here for a long time, I hereby propose a patch for
removing support for NOT having blkid. The current support through
set of #ifdef is prone to errors like
making a patch just in one of the branches, and according to a
recent talk between Christoph and Eric, it is not necessary to keep
it supported.

Remove code for checking ENABLE_BLKID, and the code when
ENABLE_BLKID is not defined.  The only use of libdisk was in the
removed code, so remove libdisk too.  It makes blkid required for
compilation.

[dchinner: also remove include/volume.h and include/dvh.h as
 suggested by Christoph during review. ]

Signed-off-by: Jan Tulak <jtulak@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: don't install platform_defs.h
Christoph Hellwig [Sun, 2 Aug 2015 23:58:33 +0000 (09:58 +1000)] 
xfsprogs: don't install platform_defs.h

platform_defs.h is a generated header file, which causes all kinds
of problems when installed on multiarch systems, and requires
workarounds in distribution packages.  Instead move the small parts
of it needed in the installed xfs.h into xfs.h and keep
platform_defs.h private to xfsprogs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: move __u*/__s* typedefs to per-port headers
Christoph Hellwig [Sun, 2 Aug 2015 23:58:22 +0000 (09:58 +1000)] 
xfsprogs: move __u*/__s* typedefs to per-port headers

Currently we have to install the autoconf-generated platform_defs.h
to get the defintions for these.  But they are clearly a feature
of Linux vs non-Linux platforms so move them to the per-port headers
instead.

Note: in the long run it might be a good idea to just the standard
uint*_t/int*_t types instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h
Christoph Hellwig [Sun, 2 Aug 2015 23:58:16 +0000 (09:58 +1000)] 
xfsprogs: move __be*/__le* types and __arch_pack to xfs_arch.h

These are defines and typedefs only needed for the XFS on disk format,
so there is no need to have the available for every user of xfs.h.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: simplify internal includes
Christoph Hellwig [Fri, 31 Jul 2015 04:51:52 +0000 (14:51 +1000)] 
xfsprogs: simplify internal includes

We don't need the xfs/ prefix for local includes if we just add the
libxfs directory to the include path.  Once that is done we only
need to link the installed headers into include/xfs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: use <>-style includes in installed headers
Christoph Hellwig [Fri, 31 Jul 2015 04:50:52 +0000 (14:50 +1000)] 
xfsprogs: use <>-style includes in installed headers

Once installed these are system headers, so we need to use <>-style
include statements between them.

[dchinner: fix include/xfs creation as this changes include/xfs
           population dependencies]

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: remove install-qa target
Christoph Hellwig [Fri, 31 Jul 2015 04:49:52 +0000 (14:49 +1000)] 
xfsprogs: remove install-qa target

Now that we don't install all the libxfs internals but just the disk
format definitions we can install those as part of the normal
install-dev target.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
8 years agoxfsprogs: only install *format.h headers in install-qa
Christoph Hellwig [Fri, 31 Jul 2015 04:48:52 +0000 (14:48 +1000)] 
xfsprogs: only install *format.h headers in install-qa

Now that we've properly split up the headers we don't need to install all
the libxfs-internal headers for xfstests.  Just install the three headers
defining the on-disk format and xfs_arch.h which is required to compile
them instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>