Commit Graph

79 Commits

Author SHA1 Message Date
Bill O'Donnell 271c605aee xfs: create a ranged query function for refcount btrees
JIRA: https://issues.redhat.com/browse/RHEL-65728

commit d12bf8bac87a0d93e6e5fab67f399d1e3d3d5767
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Fri Dec 15 10:03:40 2023 -0800

    xfs: create a ranged query function for refcount btrees

    Implement ranged queries for refcount records.  The next patch will use
    this to scan refcount data.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-11-20 11:26:08 -06:00
Bill O'Donnell 71b1929648 xfs: repair refcount btrees
JIRA: https://issues.redhat.com/browse/RHEL-65728

commit 9099cd38002f8029c9a1da08e6832d1cd18e8451
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Fri Dec 15 10:03:33 2023 -0800

    xfs: repair refcount btrees

    Reconstruct the refcount data from the rmap btree.

    Link: https://docs.kernel.org/filesystems/xfs-online-fsck-design.html#case-study-rebuilding-the-space-reference-counts
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-11-20 11:26:04 -06:00
Bill O'Donnell 488519dd5a xfs: pass the defer ops directly to xfs_defer_add
JIRA: https://issues.redhat.com/browse/RHEL-65728

commit 603ce8ab12094a2d9483c79a7541335e258a5328
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Dec 13 10:06:33 2023 +0100

    xfs: pass the defer ops directly to xfs_defer_add

    Pass a pointer to the xfs_defer_op_type structure to xfs_defer_add and
    remove the indirection through the xfs_defer_ops_type enum and a global
    table of all possible operations.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-11-20 11:26:00 -06:00
Bill O'Donnell 059e57c35e xfs: remove __xfs_free_extent_later
JIRA: https://issues.redhat.com/browse/RHEL-65728

commit 4c88fef3af4a51c2cdba6a28237e98da4873e8dc
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Dec 6 18:40:57 2023 -0800

    xfs: remove __xfs_free_extent_later

    xfs_free_extent_later is a trivial helper, so remove it to reduce the
    amount of thinking required to understand the deferred freeing
    interface.  This will make it easier to introduce automatic reaping of
    speculative allocations in the next patch.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-11-20 11:25:54 -06:00
Bill O'Donnell 26fb00336b xfs: fix xfs_btree_query_range callers to initialize btree rec fully
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit 75dc0345312221971903b2e28279b7e24b7dbb1b
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Thu Jun 29 17:39:46 2023 -0700

    xfs: fix xfs_btree_query_range callers to initialize btree rec fully

    Use struct initializers to ensure that the xfs_btree_irecs passed into
    the query_range function are completely initialized.  No functional
    changes, just closing some sloppy hygiene.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-06 10:32:54 -05:00
Bill O'Donnell 53919fd386 xfs: use deferred frees for btree block freeing
JIRA: https://issues.redhat.com/browse/RHEL-25419

Conflicts: context

commit b742d7b4f0e03df25c2a772adcded35044b625ca
Author: Dave Chinner <dchinner@redhat.com>
Date:   Wed Jun 28 11:04:32 2023 -0700

    xfs: use deferred frees for btree block freeing

    Btrees that aren't freespace management trees use the normal extent
    allocation and freeing routines for their blocks. Hence when a btree
    block is freed, a direct call to xfs_free_extent() is made and the
    extent is immediately freed. This puts the entire free space
    management btrees under this path, so we are stacking btrees on
    btrees in the call stack. The inobt, finobt and refcount btrees
    all do this.

    However, the bmap btree does not do this - it calls
    xfs_free_extent_later() to defer the extent free operation via an
    XEFI and hence it gets processed in deferred operation processing
    during the commit of the primary transaction (i.e. via intent
    chaining).

    We need to change xfs_free_extent() to behave in a non-blocking
    manner so that we can avoid deadlocks with busy extents near ENOSPC
    in transactions that free multiple extents. Inserting or removing a
    record from a btree can cause a multi-level tree merge operation and
    that will free multiple blocks from the btree in a single
    transaction. i.e. we can call xfs_free_extent() multiple times, and
    hence the btree manipulation transaction is vulnerable to this busy
    extent deadlock vector.

    To fix this, convert all the remaining callers of xfs_free_extent()
    to use xfs_free_extent_later() to queue XEFIs and hence defer
    processing of the extent frees to a context that can be safely
    restarted if a deadlock condition is detected.

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-06 10:32:52 -05:00
Bill O'Donnell 359e294324 xfs: implement masked btree key comparisons for _has_records scans
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit 4a200a0978288f919aba3f015f374f6ed279e658
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 11 19:00:11 2023 -0700

    xfs: implement masked btree key comparisons for _has_records scans

    For keyspace fullness scans, we want to be able to mask off the parts of
    the key that we don't care about.  For most btree types we /do/ want the
    full keyspace, but for checking that a given space usage also has a full
    complement of rmapbt records (even if different/multiple owners) we need
    this masking so that we only track sparseness of rm_startblock, not the
    whole keyspace (which is extremely sparse).

    Augment the ->diff_two_keys and ->keys_contiguous helpers to take a
    third union xfs_btree_key argument, and wire up xfs_rmap_has_records to
    pass this through.  This third "mask" argument should contain a nonzero
    value in each structure field that should be used in the key comparisons
    done during the scan.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-05 16:56:21 -05:00
Bill O'Donnell de02d9af50 xfs: replace xfs_btree_has_record with a general keyspace scanner
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit 6abc7aef85b1f42cb39a3149f4ab64ca255e41e6
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 11 19:00:10 2023 -0700

    xfs: replace xfs_btree_has_record with a general keyspace scanner

    The current implementation of xfs_btree_has_record returns true if it
    finds /any/ record within the given range.  Unfortunately, that's not
    sufficient for scrub.  We want to be able to tell if a range of keyspace
    for a btree is devoid of records, is totally mapped to records, or is
    somewhere in between.  By forcing this to be a boolean, we conflated
    sparseness and fullness, which caused scrub to return incorrect results.
    Fix the API so that we can tell the caller which of those three is the
    current state.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-05 16:56:20 -05:00
Bill O'Donnell a5fbc725fb xfs: complain about bad records in query_range helpers
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit ee12eaaa435a7be17152ac50943ee77249de624a
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 11 19:00:04 2023 -0700

    xfs: complain about bad records in query_range helpers

    For every btree type except for the bmbt, refactor the code that
    complains about bad records into a helper and make the ->query_range
    helpers call it so that corruptions found via that avenue are logged.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-05 16:56:18 -05:00
Bill O'Donnell 8b97db8279 xfs: standardize ondisk to incore conversion for refcount btrees
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit 2b30cc0bf0589d1ea0506c019b9b81de77535c87
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 11 19:00:02 2023 -0700

    xfs: standardize ondisk to incore conversion for refcount btrees

    Create a xfs_refcount_check_irec function to detect corruption in btree
    records.  Fix all xfs_refcount_btrec_to_irec callsites to call the new
    helper and bubble up corruption reports.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-05 16:56:17 -05:00
Bill O'Donnell f61c6e66c9 xfs: give xfs_refcount_intent its own perag reference
JIRA: https://issues.redhat.com/browse/RHEL-25419

commit 00e7b3bac1dc8961bd5aa9d39e79131c6bd81181
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 11 18:59:55 2023 -0700

    xfs: give xfs_refcount_intent its own perag reference

    Give the xfs_refcount_intent a passive reference to the perag structure
    data.  This reference will be used to enable scrub intent draining
    functionality in subsequent patches.  Any space being modified by a
    refcount intent is already allocated, so we need to be able to operate
    even if the AG is being shrunk or offlined.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2024-06-05 16:56:14 -05:00
Bill O'Donnell 253e8028aa xfs: validate block number being freed before adding to xefi
JIRA: https://issues.redhat.com/browse/RHEL-2002

Conflicts: diffs in xfs_alloc.c due to out of order patch application

commit 7dfee17b13e5024c5c0ab1911859ded4182de3e5
Author: Dave Chinner <dchinner@redhat.com>
Date:   Mon Jun 5 14:48:15 2023 +1000

    xfs: validate block number being freed before adding to xefi

    Bad things happen in defered extent freeing operations if it is
    passed a bad block number in the xefi. This can come from a bogus
    agno/agbno pair from deferred agfl freeing, or just a bad fsbno
    being passed to __xfs_free_extent_later(). Either way, it's very
    difficult to diagnose where a null perag oops in EFI creation
    is coming from when the operation that queued the xefi has already
    been completed and there's no longer any trace of it around....

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Dave Chinner <david@fromorbit.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-10 07:22:26 -06:00
Bill O'Donnell b010e995c4 xfs: pass refcount intent directly through the log intent code
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit 0b11553ec54a6d88907e60d0595dbcef98539747
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Feb 1 10:16:04 2023 -0800

    xfs: pass refcount intent directly through the log intent code

    Pass the incore refcount intent through the CUI logging code instead of
    repeatedly boxing and unboxing parameters.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-10 07:22:19 -06:00
Bill O'Donnell 188ab0a915 xfs: rename XFS_REFC_COW_START to _COWFLAG
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit 8b972158afcaa66c538c3ee1d394f096fcd238a8
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Oct 10 11:13:20 2022 -0700

    xfs: rename XFS_REFC_COW_START to _COWFLAG

    We've been (ab)using XFS_REFC_COW_START as both an integer quantity and
    a bit flag, even though it's *only* a bit flag.  Rename the variable to
    reflect its nature and update the cast target since we're not supposed
    to be comparing it to xfs_agblock_t now.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-10 07:22:15 -06:00
Bill O'Donnell 4be3836966 xfs: fix agblocks check in the cow leftover recovery function
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit f1fdc8207840672a46f26414f2c989ec078a153b
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Thu Oct 27 09:48:59 2022 -0700

    xfs: fix agblocks check in the cow leftover recovery function

    As we've seen, refcount records use the upper bit of the rc_startblock
    field to ensure that all the refcount records are at the right side of
    the refcount btree.  This works because an AG is never allowed to have
    more than (1U << 31) blocks in it.  If we ever encounter a filesystem
    claiming to have that many blocks, we absolutely do not want reflink
    touching it at all.

    However, this test at the start of xfs_refcount_recover_cow_leftovers is
    slightly incorrect -- it /should/ be checking that agblocks isn't larger
    than the XFS_MAX_CRC_AG_BLOCKS constant, and it should check that the
    constant is never large enough to conflict with that CoW flag.

    Note that the V5 superblock verifier has not historically rejected
    filesystems where agblocks >= XFS_MAX_CRC_AG_BLOCKS, which is why this
    ended up in the COW recovery routine.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-10 07:22:15 -06:00
Bill O'Donnell b1c3c474b9 xfs: check record domain when accessing refcount records
JIRA: https://issues.redhat.com/browse/RHEL-2002

Conflicts: minor adjustment to libxfs/xfs_refcount.c due to previous out-of-order patch
	   c1ccf967bf962. (kfree(rr) replaces kmem_free(rr))

commit f62ac3e0ac33d366fe81e194fee81de9be2cd886
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Oct 26 14:16:36 2022 -0700

    xfs: check record domain when accessing refcount records

    Now that we've separated the startblock and CoW/shared extent domain in
    the incore refcount record structure, check the domain whenever we
    retrieve a record to ensure that it's still in the domain that we want.
    Depending on the circumstances, a change in domain either means we're
    done processing or that we've found a corruption and need to fail out.

    The refcount check in xchk_xref_is_cow_staging is redundant since
    _get_rec has done that for a long time now, so we can get rid of it.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-10 07:21:09 -06:00
Bill O'Donnell 543921d950 xfs: remove XFS_FIND_RCEXT_SHARED and _COW
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit 68d0f389179a52555cfd8fa3254e4adcd7576904
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Oct 26 14:42:48 2022 -0700

    xfs: remove XFS_FIND_RCEXT_SHARED and _COW

    Now that we have an explicit enum for shared and CoW staging extents, we
    can get rid of the old FIND_RCEXT flags.  Omit a couple of conversions
    that disappear in the next patches.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:19 -06:00
Bill O'Donnell af3bbae86d xfs: refactor domain and refcount checking
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit f492135df0aa0417337f9b8b1cc6d6a994d61d25
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Oct 26 14:31:27 2022 -0700

    xfs: refactor domain and refcount checking

    Create a helper function to ensure that CoW staging extent records have
    a single refcount and that shared extent records have more than 1
    refcount.  We'll put this to more use in the next patch.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:19 -06:00
Bill O'Donnell 7d0d335ad8 xfs: track cow/shared record domains explicitly in xfs_refcount_irec
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit 9a50ee4f8db6e4dd0d8d757b7adaf0591776860a
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Oct 10 09:06:24 2022 -0700

    xfs: track cow/shared record domains explicitly in xfs_refcount_irec

    Just prior to committing the reflink code into upstream, the xfs
    maintainer at the time requested that I find a way to shard the refcount
    records into two domains -- one for records tracking shared extents, and
    a second for tracking CoW staging extents.  The idea here was to
    minimize mount time CoW reclamation by pushing all the CoW records to
    the right edge of the keyspace, and it was accomplished by setting the
    upper bit in rc_startblock.  We don't allow AGs to have more than 2^31
    blocks, so the bit was free.

    Unfortunately, this was a very late addition to the codebase, so most of
    the refcount record processing code still treats rc_startblock as a u32
    and pays no attention to whether or not the upper bit (the cow flag) is
    set.  This is a weakness is theoretically exploitable, since we're not
    fully validating the incoming metadata records.

    Fuzzing demonstrates practical exploits of this weakness.  If the cow
    flag of a node block key record is corrupted, a lookup operation can go
    to the wrong record block and start returning records from the wrong
    cow/shared domain.  This causes the math to go all wrong (since cow
    domain is still implicit in the upper bit of rc_startblock) and we can
    crash the kernel by tricking xfs into jumping into a nonexistent AG and
    tripping over xfs_perag_get(mp, <nonexistent AG>) returning NULL.

    To fix this, start tracking the domain as an explicit part of struct
    xfs_refcount_irec, adjust all refcount functions to check the domain
    of a returned record, and alter the function definitions to accept them
    where necessary.

    Found by fuzzing keys[2].cowflag = add in xfs/464.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:19 -06:00
Bill O'Donnell 1ace06ca48 xfs: check deferred refcount op continuation parameters
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit 8edbe0cf8b4bbe2cf47513998641797b0aca8ee2
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Oct 10 11:33:47 2022 -0700

    xfs: check deferred refcount op continuation parameters

    If we're in the middle of a deferred refcount operation and decide to
    roll the transaction to avoid overflowing the transaction space, we need
    to check the new agbno/aglen parameters that we're about to record in
    the new intent.  Specifically, we need to check that the new extent is
    completely within the filesystem, and that continuation does not put us
    into a different AG.

    If the keys of a node block are wrong, the lookup to resume an
    xfs_refcount_adjust_extents operation can put us into the wrong record
    block.  If this happens, we might not find that we run out of aglen at
    an exact record boundary, which will cause the loop control to do the
    wrong thing.

    The previous patch should take care of that problem, but let's add this
    extra sanity check to stop corruption problems sooner than later.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:19 -06:00
Bill O'Donnell ef5f357b25 xfs: create a predicate to verify per-AG extents
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit b65e08f83b119ae9345ed23d4da357a72b3cb55c
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Fri Oct 28 15:48:58 2022 -0700

    xfs: create a predicate to verify per-AG extents

    Create a predicate function to verify that a given agbno/blockcount pair
    fit entirely within a single allocation group and don't suffer
    mathematical overflows.  Refactor the existng open-coded logic; we're
    going to add more calls to this function in the next patch.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:18 -06:00
Bill O'Donnell 0a1d5b32d5 xfs: make sure aglen never goes negative in xfs_refcount_adjust_extents
JIRA: https://issues.redhat.com/browse/RHEL-2002

commit f850995f60e49818093ef5e477cdb0ff2c11a0a4
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Oct 25 18:18:21 2022 -0700

    xfs: make sure aglen never goes negative in xfs_refcount_adjust_extents

    Prior to calling xfs_refcount_adjust_extents, we trimmed agbno/aglen
    such that the end of the range would not be in the middle of a refcount
    record.  If this is no longer the case, something is seriously wrong
    with the btree.  Bail out with a corruption error.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-11-06 19:42:18 -06:00
Bill O'Donnell c117a4e616 xfs: fix uninitialized list head in struct xfs_refcount_recovery
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

Conflicts: xfs_refcount.c adjusted (previous out of order patch applied)

commit c1ccf967bf962b998f0c096e06a658ece27d10a0
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Oct 26 14:55:04 2022 -0700

    xfs: fix uninitialized list head in struct xfs_refcount_recovery

    We're supposed to initialize the list head of an object before adding it
    to another list.  Fix that, and stop using the kmem_{alloc,free} calls
    from the Irix days.

    Fixes: 174edb0e46 ("xfs: store in-progress CoW allocations in the refcount btree")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:53 -05:00
Bill O'Donnell a27ea962ac xfs: Pre-calculate per-AG agbno geometry
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 0800169e3e2c97a033e8b7f3d1e6c689e0d71a19
Author: Dave Chinner <dchinner@redhat.com>
Date:   Thu Jul 7 19:13:02 2022 +1000

    xfs: Pre-calculate per-AG agbno geometry

    There is a lot of overhead in functions like xfs_verify_agbno() that
    repeatedly calculate the geometry limits of an AG. These can be
    pre-calculated as they are static and the verification context has
    a per-ag context it can quickly reference.

    In the case of xfs_verify_agbno(), we now always have a perag
    context handy, so we can store the AG length and the minimum valid
    block in the AG in the perag. This means we don't have to calculate
    it on every call and it can be inlined in callers if we move it
    to xfs_ag.h.

    Move xfs_ag_block_count() to xfs_ag.c because it's really a
    per-ag function and not an XFS type function. We need a little
    bit of rework that is specific to xfs_initialise_perag() to allow
    growfs to calculate the new perag sizes before we've updated the
    primary superblock during the grow (chicken/egg situation).

    Note that we leave the original xfs_verify_agbno in place in
    xfs_types.c as a static function as other callers in that file do
    not have per-ag contexts so still need to go the long way. It's been
    renamed to xfs_verify_agno_agbno() to indicate it takes both an agno
    and an agbno to differentiate it from new function.

    Future commits will make similar changes for other per-ag geometry
    validation functions.

    Further:

    $ size --totals fs/xfs/built-in.a
               text    data     bss     dec     hex filename
    before  1483006  329588     572 1813166  1baaae (TOTALS)
    after   1482185  329588     572 1812345  1ba779 (TOTALS)

    This rework reduces the binary size by ~820 bytes, indicating
    that much less work is being done to bounds check the agbno values
    against on per-ag geometry information.

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:40 -05:00
Bill O'Donnell d1a077edc7 xfs: pass perag to xfs_alloc_read_agf()
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 08d3e84feeb8cb8e20d54f659446b98fe17913aa
Author: Dave Chinner <dchinner@redhat.com>
Date:   Thu Jul 7 19:07:40 2022 +1000

    xfs: pass perag to xfs_alloc_read_agf()

    xfs_alloc_read_agf() initialises the perag if it hasn't been done
    yet, so it makes sense to pass it the perag rather than pull a
    reference from the buffer. This allows callers to be per-ag centric
    rather than passing mount/agno pairs everywhere.

    Whilst modifying the xfs_reflink_find_shared() function definition,
    declare it static and remove the extern declaration as it is an
    internal function only these days.

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:39 -05:00
Bill O'Donnell c35ed65c10 xfs: rename xfs_*alloc*_log_count to _block_count
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit 6ed7e509d2304519f4f6741670f512a55e9e80fe
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:24 2022 -0700

    xfs: rename xfs_*alloc*_log_count to _block_count

    These functions return the maximum number of blocks that could be logged
    in a particular transaction.  "log count" is confusing since there's a
    separate concept of a log (operation) count in the reservation code, so
    let's change it to "block count" to be less confusing.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:12 -05:00
Bill O'Donnell ed078cc875 xfs: reduce transaction reservations with reflink
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit b037c4eed2df4568a7702cd512d26625962f95b9
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Apr 25 18:38:14 2022 -0700

    xfs: reduce transaction reservations with reflink

    Before to the introduction of deferred refcount operations, reflink
    would try to cram refcount btree updates into the same transaction as an
    allocation or a free event.  Mainline XFS has never actually done that,
    but we never refactored the transaction reservations to reflect that we
    now do all refcount updates in separate transactions.  Fix this to
    reduce the transaction reservation size even farther, so that between
    this patch and the previous one, we reduce the tr_write and tr_itruncate
    sizes by 66%.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:11 -05:00
Bill O'Donnell 744b6e2712 xfs: count EFIs when deciding to ask for a continuation of a refcount update
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167832

commit c47260d4ea2ac11ce607d6ac1e0ca5528f42f482
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Apr 26 15:29:54 2022 -0700

    xfs: count EFIs when deciding to ask for a continuation of a refcount update

    A long time ago, I added to XFS the ability to use deferred reference
    count operations as part of a transaction chain.  This enabled us to
    avoid blowing out the transaction reservation when the blocks in a
    physical extent all had different reference counts because we could ask
    the deferred operation manager for a continuation, which would get us a
    clean transaction.

    The refcount code asks for a continuation when the number of refcount
    record updates reaches the point where we think that the transaction has
    logged enough full btree blocks due to refcount (and free space) btree
    shape changes and refcount record updates that we're in danger of
    overflowing the transaction.

    We did not previously count the EFIs logged to the refcount update
    transaction because the clamps on the length of a bunmap operation were
    sufficient to avoid overflowing the transaction reservation even in the
    worst case situation where every other block of the unmapped extent is
    shared.

    Unfortunately, the restrictions on bunmap length avoid failure in the
    worst case by imposing a maximum unmap length of ~3000 blocks, even for
    non-pathological cases.  This seriously limits performance when freeing
    large extents.

    Therefore, track EFIs with the same counter as refcount record updates,
    and use that information as input into when we should ask for a
    continuation.  This enables the next patch to drop the clumsy bunmap
    limitation.

    Depends: 27dada070d ("xfs: change the order in which child and parent defer ops ar finished")
    Depends: 74f4d6a1e0 ("xfs: only relog deferred intent items if free space in the log gets low")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-05-18 11:11:10 -05:00
Bill O'Donnell 8bc54d32d1 xfs: estimate post-merge refcounts correctly
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2161676

commit b25d1984aa884fc91a73a5a407b9ac976d441e9b
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Nov 30 09:25:51 2022 -0800

    xfs: estimate post-merge refcounts correctly

    Upon enabling fsdax + reflink for XFS, xfs/179 began to report refcount
    metadata corruptions after being run.  Specifically, xfs_repair noticed
    single-block refcount records that could be combined but had not been.

    The root cause of this is improper MAXREFCOUNT edge case handling in
    xfs_refcount_merge_extents.  When we're trying to find candidates for a
    refcount btree record merge, we compute the refcount attribute of the
    merged record, but we fail to account for the fact that once a record
    hits rc_refcount == MAXREFCOUNT, it is pinned that way forever.  Hence
    the computed refcount is wrong, and we fail to merge the extents.

    Fix this by adjusting the merge predicates to compute the adjusted
    refcount correctly.

    Fixes: 3172725814 ("xfs: adjust refcount of an extent of blocks in refcount btree")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Xiao Yang <yangx.jy@fujitsu.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-01-19 15:25:03 -06:00
Bill O'Donnell 3d3e38e689 xfs: hoist refcount record merge predicates
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2161676

commit 9d720a5a658f5135861773f26e927449bef93d61
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Nov 30 09:25:51 2022 -0800

    xfs: hoist refcount record merge predicates

    Hoist these multiline conditionals into separate static inline helpers
    to improve readability and set the stage for corruption fixes that will
    be introduced in the next patch.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Xiao Yang <yangx.jy@fujitsu.com>

Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
2023-01-19 15:15:17 -06:00
Carlos Maiolino fea8cec8de xfs: remove unused parameter from refcount code
Bugzilla: https://bugzilla.redhat.com/2125724

The owner info parameter is always NULL, so get rid of the parameter.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
(cherry picked from commit c04c51c524697cd68d668d595f8ebc381ffe426b)
2022-10-21 12:50:46 +02:00
Carlos Maiolino 93fff0d397 xfs: rename xfs_bmap_add_free to xfs_free_extent_later
Bugzilla: https://bugzilla.redhat.com/2125724

xfs_bmap_add_free isn't a block mapping function; it schedules deferred
freeing operations for a later point in a compound transaction chain.
While it's primarily used by bunmapi, its use has expanded beyond that.
Move it to xfs_alloc.c and rename the function since it's now general
freeing functionality.  Bring the slab cache bits in line with the
way we handle the other intent items.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
(cherry picked from commit c201d9ca5392b20f04882848a071025b0e194c17)
2022-10-21 12:50:46 +02:00
Carlos Maiolino c63a9018d9 xfs: create slab caches for frequently-used deferred items
Bugzilla: https://bugzilla.redhat.com/2125724

Create slab caches for the high-level structures that coordinate
deferred intent items, since they're used fairly heavily.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
(cherry picked from commit f3c799c22c661e181c71a0d9914fc923023f65fb)
2022-10-21 12:50:46 +02:00
Brian Foster d3185fdb89 xfs: convert xfs_sb_version_has checks to use mount features
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2083143
Upstream Status: linux.git

commit ebd9027d088b3a4e49d294f79e6cadb7b7a88b28
Author: Dave Chinner <dchinner@redhat.com>
Date:   Wed Aug 18 18:46:55 2021 -0700

    xfs: convert xfs_sb_version_has checks to use mount features

    This is a conversion of the remaining xfs_sb_version_has..(sbp)
    checks to use xfs_has_..(mp) feature checks.

    This was largely done with a vim replacement macro that did:

    :0,$s/xfs_sb_version_has\(.*\)&\(.*\)->m_sb/xfs_has_\1\2/g<CR>

    A couple of other variants were also used, and the rest touched up
    by hand.

    $ size -t fs/xfs/built-in.a
               text    data     bss     dec     hex filename
    before  1127533  311352     484 1439369  15f689 (TOTALS)
    after   1125360  311352     484 1437196  15ee0c (TOTALS)

    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>

Signed-off-by: Brian Foster <bfoster@redhat.com>
2022-08-25 08:11:35 -04:00
Brian Foster af9b90b846 xfs: make the record pointer passed to query_range functions const
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2083143
Upstream Status: linux.git

commit 159eb69dba8baf6d5b58b69936920fb311324c82
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Aug 10 17:02:16 2021 -0700

    xfs: make the record pointer passed to query_range functions const

    The query_range functions are supposed to call a caller-supplied
    function on each record found in the dataset.  These functions don't
    own the memory storing the record, so don't let them change the record.

    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>

Signed-off-by: Brian Foster <bfoster@redhat.com>
2022-08-25 08:11:29 -04:00
Dave Chinner 50f02fe333 xfs: remove agno from btree cursor
Now that everything passes a perag, the agno is not needed anymore.
Convert all the users to use pag->pag_agno instead and remove the
agno from the cursor. This was largely done as an automated search
and replace.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
2021-06-02 10:48:24 +10:00
Dave Chinner a81a06211f xfs: convert refcount btree cursor to use perags
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
2021-06-02 10:48:24 +10:00
Dave Chinner be9fb17d88 xfs: add a perag to the btree cursor
Which will eventually completely replace the agno in it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Brian Foster <bfoster@redhat.com>
2021-06-02 10:48:24 +10:00
Joseph Qi 2e984badbc xfs: remove unneeded return value check for *init_cursor()
Since *init_cursor() can always return a valid cursor, the NULL check
in caller is unneeded. So clean them up.
This also keeps the behavior consistent with other callers.

Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2020-12-09 09:49:38 -08:00
Dave Chinner c4aa10d041 xfs: make the btree ag cursor private union anonymous
This is much less widely used than the bc_private union was, so this
is done as a single patch. The named union xfs_btree_cur_private
goes away and is embedded into the struct xfs_btree_cur_ag as an
anonymous union, and the code is modified via this script:

$ sed -i 's/priv\.\([abt|refc]\)/\1/g' fs/xfs/*[ch] fs/xfs/*/*[ch]

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
2020-03-13 10:37:15 -07:00
Dave Chinner 576af73228 xfs: convert btree cursor ag-private member name
bc_private.a -> bc_ag conversion via script:

`sed -i 's/bc_private\.a/bc_ag/g' fs/xfs/*[ch] fs/xfs/*/*[ch]`

And then revert the change to the bc_ag #define in
fs/xfs/libxfs/xfs_btree.h manually.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
2020-03-13 10:37:14 -07:00
Darrick J. Wong 706b8c5bc7 xfs: remove unnecessary null pointer checks from _read_agf callers
Drop the null buffer pointer checks in all code that calls
xfs_alloc_read_agf and doesn't pass XFS_ALLOC_FLAG_TRYLOCK because
they're no longer necessary.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
2020-01-26 14:32:27 -08:00
Darrick J. Wong a71895c5da xfs: convert open coded corruption check to use XFS_IS_CORRUPT
Convert the last of the open coded corruption check and report idioms to
use the XFS_IS_CORRUPT macro.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2019-11-13 11:08:01 -08:00
Darrick J. Wong f9e0370648 xfs: kill the XFS_WANT_CORRUPT_* macros
The XFS_WANT_CORRUPT_* macros conceal subtle side effects such as the
creation of local variables and redirections of the code flow.  This is
pretty ugly, so replace them with explicit XFS_IS_CORRUPT tests that
remove both of those ugly points.  The change was performed with the
following coccinelle script:

@@
expression mp, test;
identifier label;
@@

- XFS_WANT_CORRUPTED_GOTO(mp, test, label);
+ if (XFS_IS_CORRUPT(mp, !test)) { error = -EFSCORRUPTED; goto label; }

@@
expression mp, test;
@@

- XFS_WANT_CORRUPTED_RETURN(mp, test);
+ if (XFS_IS_CORRUPT(mp, !test)) return -EFSCORRUPTED;

@@
expression mp, lval, rval;
@@

- XFS_IS_CORRUPT(mp, !(lval == rval))
+ XFS_IS_CORRUPT(mp, lval != rval)

@@
expression mp, e1, e2;
@@

- XFS_IS_CORRUPT(mp, !(e1 && e2))
+ XFS_IS_CORRUPT(mp, !e1 || !e2)

@@
expression e1, e2;
@@

- !(e1 == e2)
+ e1 != e2

@@
expression e1, e2, e3, e4, e5, e6;
@@

- !(e1 == e2 && e3 == e4) || e5 != e6
+ e1 != e2 || e3 != e4 || e5 != e6

@@
expression e1, e2, e3, e4, e5, e6;
@@

- !(e1 == e2 || (e3 <= e4 && e5 <= e6))
+ e1 != e2 && (e3 > e4 || e5 > e6)

@@
expression mp, e1, e2;
@@

- XFS_IS_CORRUPT(mp, !(e1 <= e2))
+ XFS_IS_CORRUPT(mp, e1 > e2)

@@
expression mp, e1, e2;
@@

- XFS_IS_CORRUPT(mp, !(e1 < e2))
+ XFS_IS_CORRUPT(mp, e1 >= e2)

@@
expression mp, e1;
@@

- XFS_IS_CORRUPT(mp, !!e1)
+ XFS_IS_CORRUPT(mp, e1)

@@
expression mp, e1, e2;
@@

- XFS_IS_CORRUPT(mp, !(e1 || e2))
+ XFS_IS_CORRUPT(mp, !e1 && !e2)

@@
expression mp, e1, e2, e3, e4;
@@

- XFS_IS_CORRUPT(mp, !(e1 == e2) && !(e3 == e4))
+ XFS_IS_CORRUPT(mp, e1 != e2 && e3 != e4)

@@
expression mp, e1, e2, e3, e4;
@@

- XFS_IS_CORRUPT(mp, !(e1 <= e2) || !(e3 >= e4))
+ XFS_IS_CORRUPT(mp, e1 > e2 || e3 < e4)

@@
expression mp, e1, e2, e3, e4;
@@

- XFS_IS_CORRUPT(mp, !(e1 == e2) && !(e3 <= e4))
+ XFS_IS_CORRUPT(mp, e1 != e2 && e3 > e4)

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2019-11-12 17:19:02 -08:00
Darrick J. Wong a5155b870d xfs: always log corruption errors
Make sure we log something to dmesg whenever we return -EFSCORRUPTED up
the call stack.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2019-11-04 13:55:54 -08:00
Darrick J. Wong 74b4c5d4a9 xfs: remove unnecessary int returns from deferred refcount functions
Remove the return value from the functions that schedule deferred
refcount operations since they never fail and do not return status.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
2019-08-28 08:31:02 -07:00
Darrick J. Wong bc46ac6471 xfs: remove unnecessary int returns from deferred rmap functions
Remove the return value from the functions that schedule deferred rmap
operations since they never fail and do not return status.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
2019-08-28 08:31:01 -07:00
Tetsuo Handa 707e0ddaf6 fs: xfs: Remove KM_NOSLEEP and KM_SLEEP.
Since no caller is using KM_NOSLEEP and no callee branches on KM_SLEEP,
we can remove KM_NOSLEEP and replace KM_SLEEP with 0.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2019-08-26 12:06:22 -07:00
Eric Sandeen 250d4b4c40 xfs: remove unused header files
There are many, many xfs header files which are included but
unneeded (or included twice) in the xfs code, so remove them.

nb: xfs_linux.h includes about 9 headers for everyone, so those
explicit includes get removed by this.  I'm not sure what the
preference is, but if we wanted explicit includes everywhere,
a followup patch could remove those xfs_*.h includes from
xfs_linux.h and move them into the files that need them.
Or it could be left as-is.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2019-06-28 19:30:43 -07:00
Brian Foster 0f37d1780c xfs: pass transaction to xfs_defer_add()
The majority of remaining references to struct xfs_defer_ops in XFS
are associated with xfs_defer_add(). At this point, there are no
more external xfs_defer_ops users left. All instances of
xfs_defer_ops are embedded in the transaction, which means we can
safely pass the transaction down to the dfops add interface.

Update xfs_defer_add() to receive the transaction as a parameter.
Various subsystems implement wrappers to allocate and construct the
context specific data structures for the associated deferred
operation type. Update these to also carry the transaction down as
needed and clean up unused dfops parameters along the way.

This removes most of the remaining references to struct
xfs_defer_ops throughout the code and facilitates removal of the
structure.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
[darrick: fix unused variable warnings with ftrace disabled]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2018-08-02 23:05:14 -07:00