Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zfs-2.1.1 patchset #12547

Merged
merged 93 commits into from
Sep 16, 2021
Merged

Commits on Sep 14, 2021

  1. FreeBSD: Clean up ASSERT/VERIFY use in module

    Convert use of ASSERT() to ASSERT0(), ASSERT3U(), ASSERT3S(),
    ASSERT3P(), and likewise for VERIFY().  In some cases it ended up
    making more sense to change the code, such as VERIFY on nvlist
    operations that I have converted to use fnvlist instead.  In one
    place I changed an internal struct member from int to boolean_t to
    match its use.  Some asserts that combined multiple checks with &&
    in a single assert have been split to separate asserts, to make it
    apparent which check fails.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#11971
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    1826068 View commit details
    Browse the repository at this point in the history
  2. FreeBSD: Implement xattr=sa

    FreeBSD historically has not cared about the xattr property; it was
    always treated as xattr=on.  With xattr=on, xattrs are stored as files
    in a hidden xattr directory.  With xattr=sa, xattrs are stored as
    system attributes and get cached in nvlists during xattr operations.
    This makes SA xattrs simpler and more efficient to manipulate.  FreeBSD
    needs to implement the SA xattr operations for feature parity with
    Linux and to ensure that SA xattrs are accessible when migrated or
    replicated from Linux.
    
    Following the example set by Linux, refactor our existing extattr vnops
    to split off the parts handling dir style xattrs, and add the
    corresponding SA handling parts.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#11997
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6fe6192 View commit details
    Browse the repository at this point in the history
  3. Optimize small random numbers generation

    In all places except two spa_get_random() is used for small values,
    and the consumers do not require well seeded high quality values.
    Switch those two exceptions directly to random_get_pseudo_bytes()
    and optimize spa_get_random(), renaming it to random_in_range(),
    since it is not related to SPA or ZFS in general.
    
    On FreeBSD directly map random_in_range() to new prng32_bounded() KPI
    added in FreeBSD 13.  On Linux and in user-space just reduce the type
    used to uint32_t to avoid more expensive 64bit division.
    
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Sponsored-By: iXsystems, Inc.
    Closes openzfs#12183
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    f3969ea View commit details
    Browse the repository at this point in the history
  4. ZED: Match added disk by pool/vdev GUID if found (openzfs#12217)

    This enables ZED to auto-online vdevs that are not wholedisk managed by
    ZFS.
    
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: Don Brady <don.brady@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    d6c2b89 View commit details
    Browse the repository at this point in the history
  5. Upstream: dmu_zfetch_stream_fini leaks refcount

    dmu_zfetch_stream_fini() is missing calls to destroy the refcounts,
    leaking them and the mutex inside.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Closes openzfs#12294
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    2334bc4 View commit details
    Browse the repository at this point in the history
  6. Fix abd leak, kmem_free correct size of abd_t

    Fix a leak of abd_t that manifested mostly when using
    raidzN with at least as many columns as N (e.g. a
    four-disk raidz2 but not a three-disk raidz2).
    Sufficiently heavy raidz use would eventually run a system
    out of memory.
    
    Additionally:
    
    * Switch abd_cache arena to FIRSTFIT, which empirically
    improves perofrmance.
    
    * Make abd_chunk_cache more performant and debuggable.
    
    * Allocate the abd_zero_buf from abd_chunk_cache rather
    than the heap.
    
    * Don't try to reap non-existent qcaches in abd_cache arena.
    
    * KM_PUSHPAGE->KM_SLEEP when allocating chunks from their
    own arena
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Co-authored-by: Sean Doran <smd@use.net>
    Closes openzfs#12295
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    035219e View commit details
    Browse the repository at this point in the history
  7. Compact dbuf/buf hashes and lock arrays

    With default dbuf cache size of 1/32 of ARC, it makes no sense to have
    hash table of the same size (or even bigger on Linux).  Reduce it to
    1/8 of ARC's one, still leaving some slack, assuming higher I/O rate
    via dbuf cache than via ARC.
    
    Remove padding from ARC hash locks array.  The idea behind padding
    is to avoid false sharing between locks.  It would have sense if
    there would be a limited number of very busy locks.  But since we
    have no limit on the number, using the same memory for more locks we
    can achieve even lower lock contention with the same false sharing,
    or we can use less memory for the same contention level.
    
    Reduce number of hash locks from 8192 to 2048.  The number is still
    big enough to not cause contention, but reduced memory size improves
    cache hit rate for mutex_tryenter() in ARC eviction thread, saving
    about 1% of the thread time.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12289
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    15177c1 View commit details
    Browse the repository at this point in the history
  8. Udev rules: use non-ancient comma syntax

    This file is old as dirt. It's entirely possible that commas were
    optional in udev back at that time. But they're definitely supposed to
    be there nowadays.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
    Signed-off-by: Justin Gottula <justin@jgottula.com>
    Closes openzfs#12302
    jgottula authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c20ba9b View commit details
    Browse the repository at this point in the history
  9. Udev rules: replace deprecated $tempnode with $devnode

    The $tempnode substitution is so old that it's not even mentioned in the
    man page anymore. It is still technically supported by udev, but with
    plenty of "deprecated" comments surrounding it.
    
    The preferred modern equivalent of $tempnode is $devnode (or
    alternatively, %N).
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
    Signed-off-by: Justin Gottula <justin@jgottula.com>
    Closes openzfs#12302
    jgottula authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    0cb1229 View commit details
    Browse the repository at this point in the history
  10. Udev rules: use match (==) rather than assign (=) for PROGRAM

    Assignment syntax (=) can be used for the PROGRAM key. But the PROGRAM
    key is really a match key, not an assign key. The internal logic used by
    udev to decide whether a PROGRAM key "matched" or not (which determines
    whether the remainder of the rule is evaluated) depends on whether the
    operator was OP_MATCH (==) or OP_NOMATCH (!=). [1]
    
    The man page claims that '"=", ":=", and "+=" have the same effect as
    "=="' for PROGRAM keys. And, after a brief perusal, the udev source code
    does seem to confirm that operators other than OP_MATCH (==) or
    OP_NOMATCH (!=) are implicitly converted to OP_MATCH (==). [2] But it's
    not entirely clear that this is definitely the case: anecdotal testing
    seems to indicate that when OP_ASSIGN (=) is used, the program's exit
    status is disregarded and the remainder of the rule is processed
    regardless of whether it was, in fact, a successful exit.
    
    The bottom line here is that, if zvol_id hits some snag and returns a
    nonzero exit status, then we almost certainly do NOT want to continue on
    with the rule and use whatever the stdout contents may have been to
    mindlessly create /dev/zvol/* symlinks. Therefore, let's be extra-sure
    and use the match (==) operator explicitly, to eliminate any possibility
    that udev might do the wrong thing, and ensure that a nonzero exit
    status will definitely short-circuit the rest of the rule, bypassing the
    SYMLINK+= assignments.
    
    [1]
    udev,
     file src/udev/udev-rules.c,
      func udev_rule_apply_token_to_event,
       switch case TK_M_PROGRAM if r != 0 (nonzero exit status):
          return token->op == OP_NOMATCH;
       switch case TK_M_PROGRAM if r == 0 (zero exit status):
          return token->op == OP_MATCH;
       func retval 0 => key is considered to have matched
       func retval 1 => key is considered to have NOT matched
    
    [2]
    udev,
     file src/udev/udev-rules.c,
      func parse_token,
       at func start:
          bool is_match = IN_SET(op, OP_MATCH, OP_NOMATCH);
       in else-if case streq(key, "PROGRAM"):
          if (!is_match) op = OP_MATCH;
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
    Signed-off-by: Justin Gottula <justin@jgottula.com>
    Closes openzfs#12302
    jgottula authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    fd2e4d1 View commit details
    Browse the repository at this point in the history
  11. Print zvol_id error messages to stderr rather than stdout

    The zvol_id program is invoked by udev, via a PROGRAM key in the
    60-zvol.rules.in rule file, to determine the "pretty" /dev/zvol/*
    symlink paths paths that should be generated for each opaquely named
    /dev/zd* dev node.
    
    The udev rule uses the PROGRAM key, followed by a SYMLINK+= assignment
    containing the %c substitution, to collect the program's stdout and then
    "paste" it directly into the name of the symlink(s) to be created.
    
    Unfortunately, as currently written, zvol_id outputs both its intended
    output (a single string representing the symlink path that should be
    created to refer to the name of the dataset whose /dev/zd* path is
    given) AND its error messages (if any) to stdout.
    
    When processing PROGRAM keys (and others, such as IMPORT{program}), udev
    uses only the data written to stdout for functional purposes. Any data
    written to stderr is used solely for the purposes of logging (if udev's
    log_level is set to debug).
    
    The unintended consequence of this is as follows: if zvol_id encounters
    an error condition; and then udev fails to halt processing of the
    current rule (either because zvol_id didn't return a nonzero exit
    status, or because the PROGRAM key in the rule wasn't written properly
    to result in a "non-match" condition that would stop the current rule on
    a nonzero exit); then udev will create a space-delimited list of symlink
    names derived directly from the words of the error message string!
    
    I've observed this exact behavior on my own system, in a situation where
    the open() syscall on /dev/zd* dev nodes was failing sporadically (for
    reasons that aren't especially relevant here). Because the open() call
    failed, zvol_id printed "Unable to open device file: /dev/zd736\n" to
    stdout and then exited.
    
    The udev rule finished with SYMLINK+="zvol/%c %c". Assuming a volume
    name like pool/foo/bar, this would ordinarily expand to
       SYMLINK+="zvol/pool/foo/bar pool/foo/bar"
    and would cause symlinks to be created like this:
       /dev/zvol/pool/foo/bar -> /dev/zd736
       /dev/pool/foo/bar      -> /dev/zd736
    
    But because of the combination of error messages being printed to
    stdout, and the udev syntax freely accepting a space-delimited sequence
    of names in this context, the error message string
       "Unable to open device file: /dev/zd736\n"
    in reality expanded to
       SYMLINK+="zvol/Unable to open device file: /dev/zd736"
    which caused the following symlinks to actually be created:
       /dev/zvol/Unable -> /dev/zd736
       /dev/to          -> /dev/zd736
       /dev/open        -> /dev/zd736
       /dev/device      -> /dev/zd736
       /dev/file:       -> /dev/zd736
       /dev//dev/zd736  -> /dev/zd736
    
    (And, because multiple zvols had open() syscall errors, multiple zvols
    attempted to claim several of those symlink names, resulting in numerous
    udev errors and timeouts and general chaos.)
    
    This commit rectifies all this silliness by simply printing error
    messages to stderr, as Dennis Ritchie originally intended.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
    Signed-off-by: Justin Gottula <justin@jgottula.com>
    Closes openzfs#12302
    jgottula authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    7138fe7 View commit details
    Browse the repository at this point in the history
  12. Use substantially more robust program exit status logic in zvol_id

    Currently, there are several places in zvol_id where the program logic
    returns particular errno values, or even particular ioctl return values,
    as the program exit status, rather than a straightforward system of
    explicit zero on success and explicit nonzero value(s) on failure.
    
    This is problematic for multiple reasons. One particularly interesting
    problem that can arise, is that if any of these values happens to have
    all 8 least significant bits unset (i.e., it is a positive or negative
    multiple of 256), then although the C program sees a nonzero int value
    (presumed to be a failure exit status), the actual exit status as seen
    by the system is only the bottom 8 bits of that integer: zero.
    
    This can happen in practice, and I have encountered it myself. In a
    particularly weird situation, the zvol_open code in the zfs kernel
    module was behaving in such a manner that it caused the open() syscall
    to fail and for errno to be set to a kernel-private value (ERESTARTSYS,
    which happens to be defined as 512). It turns out that 512 is evenly
    divisible by 256; or, in other words, its least significant 8 bits are
    all-zero. So even though zvol_id believed it was returning a nonzero
    (failure) exit status of 512, the system modulo'd that value by 256,
    resulting in the actual exit status visible by other programs being 0!
    This actually-zero (non-failure) exit status caused problems: udev
    believed that the program was operating successfully, when in fact it
    was attempting to indicate failure via a nonzero exit status integer.
    Combined with another problem, this led to the creation of nonsense
    symlinks for zvol dev nodes by udev.
    
    Let's get rid of all this problematic logic, and simply return
    EXIT_SUCCESS (0) is everything went fine, and EXIT_FAILURE (1) if
    anything went wrong.
    
    Additionally, let's clarify some of the variable names (error is similar
    to errno, etc) and clean up the overall program flow a bit.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
    Signed-off-by: Justin Gottula <justin@jgottula.com>
    Closes openzfs#12302
    jgottula authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    dab147d View commit details
    Browse the repository at this point in the history
  13. Move gethrtime() calls out of vdev queue lock

    This dramatically reduces the lock contention on systems with slower
    (non-TSC) timecounters.  With TSC the difference is minimal, but since
    this lock is pretty congested, any improvement counts.  Plus I don't
    see any reason to do it under the lock other than the latency of the
    lock itself, which this change actually reduces.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12281
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    41b33dc View commit details
    Browse the repository at this point in the history
  14. FreeBSD: Hardcode abd_chunk_size to PAGE_SIZE

    It makes no sense to set it below PAGE_SIZE, since it increases all
    overheads and makes returning memory to OS problematic.  It makes no
    sense to set it above PAGE_SIZE, since such allocations and especially
    frees are too expensive and cause KVA fragmentation to benefit from
    fewer chunks.  After that it makes no sense to keep more complicated
    math here.
    
    What may have sense though is just a tunable border between linear and
    scatter ABDs, previously also controlled by this tunable.  Retain that
    functionality by taking abd_scatter_min_size tunable from Linux, just
    with different default value.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12328
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    49bb454 View commit details
    Browse the repository at this point in the history
  15. FreeBSD: Use unmapped I/O for scattered/gang ABD buffers

    Many FreeBSD disk drivers support "unmapped" I/O mode, when data
    buffer represented not with a virtually contiguous KVA-mapped address
    range, but with a list of physical memory pages.  Originally it was
    designed to do I/O from buffers without KVA mapping (unmapped).  But
    moving virtual addresses out of equation allows us to operate even
    non-contiguous data buffers with one condition: all buffer discon-
    tinuities must be aligned to memory page borders.
    
    Doing I/O to capable GEOM device this patch traverses through non-
    linear ABD buffers, validating the chunks borders.  If the condition
    is met, it supplies GEOM with the list of original physical memory
    pages instead of copying the data into temporary contiguous buffer.
    On capable hardware on pools with ashift=12 and default ABD chunk of
    4KB it should handle all the I/O without additional memory copying.
    
    Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12320
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c846709 View commit details
    Browse the repository at this point in the history
  16. Replace strchrnul() with strrchr()

    Could have gone either way with this one, either adding it to
    macOS/Windows SPL, or returning it to "classic" usage with strrchr().
    Since the new special way isn't really used, and only used once,
    we have this commit.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Closes  openzfs#12312
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    a0b4da2 View commit details
    Browse the repository at this point in the history
  17. dprintf_dnode: strcpy -> strlcpy

    Missed a couple of strcpy() in earlier commit, this is only used with
    --enable-debug.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Closes openzfs#12311
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    04ebe29 View commit details
    Browse the repository at this point in the history
  18. file reference counts can get corrupted

    Callers of zfs_file_get and zfs_file_put can corrupt the reference
    counts for the file structure resulting in a panic or a soft lockup.
    When zfs send/recv runs, it will add a reference count to the
    open file, and begin to send or recv the stream. If the file descriptor
    is closed, then when dmu_recv_stream() or dmu_send() return we will
    call zfs_file_put to remove the reference we placed on the file
    structure. Unfortunately, because zfs_file_put() uses the file
    descriptor to lookup the file structure, it may end up finding that
    the file descriptor table no longer contains the file struct, thus
    leaking the file structure. Or it might end up finding a file
    descriptor for a different file and blindly updating its reference
    counts. Other failure modes probably exists.
    
    This change reworks the zfs_file_[get|put] interface to not rely
    on the file descriptor but instead pass the zfs_file_t pointer around.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Co-authored-by: Allan Jude <allan@klarasystems.com>
    Signed-off-by: George Wilson <gwilson@delphix.com>
    External-issue: DLPX-76119
    Closes openzfs#12299
    grwilson authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    8415c3c View commit details
    Browse the repository at this point in the history
  19. Update bug report template

    - Remove the "SPL Version" line, the repositories have been merged
      since the 0.8 release and we no longer need to ask about this.
    
    - Simply ask for the kernel version / patch level and add a hint
      about how to get this information on Linux and FreeBSD.
    
    - Remove "Status: Triage Needed" from the template, in practice
      we really haven't been using this label so let's step setting it.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes: openzfs#12340
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    a5e68f0 View commit details
    Browse the repository at this point in the history
  20. Fix ARC ghost states eviction accounting

    arc_evict_hdr() returns number of evicted bytes in scope of specific
    state.  For ghost states it does not mean the amount of really freed
    memory, but the logical buffer size.  It is correct for the eviction
    process, but not for waking up threads waiting for ARC size reduction,
    as added in "Revise ARC shrinker algorithm" commit, causing premature
    wakeups while ARC is still overflowed, allowing even bigger overflow,
    plus processing overhead when next allocation will also get blocked,
    probably also for too short time.
    
    To fix that make arc_evict_hdr() also return the amount of really
    freed memory, which for the ghost states is only the header, and use
    it to update arc_evict_count instead.  Originally I was thinking to
    not return it at all, since arc_get_data_impl() does not account for
    the headers, but decided that some slow allocation progress is better
    than long waits, reaching on my tests up to 100ms.
    
    To reduce negative latency effects of long time periods when reclaim
    thread can free little real memory, start reclamation process earlier,
    before we actually reached the overflow threshold, when we have to
    throttle new allocations.  We can also do it without taking global
    arc_evict_lock, reducing the contention.
    
    Reviewed-by: George Wilson <gwilson@delphix.com>
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12279
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    45305a0 View commit details
    Browse the repository at this point in the history
  21. Tinker with slop space accounting with dedup

    * Tinker with slop space accounting with dedup
    
    Do not include the deduplicated space usage in the slop space
    reservation, it leads to surprising outcomes.
    
    * Update spa_dedup_dspace sometimes
    
    Sometimes, we get into spa_get_slop_space() with
    spa_dedup_dspace=~0ULL, AKA "unset", while spa_dspace is correctly set.
    
    So call the code to update it before we use it if we hit that case.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#12271
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    960a5a5 View commit details
    Browse the repository at this point in the history
  22. config/libatomic: require -latomic iff atomic.c doesn't link w/o it

    In absence of LTO, and dynamic libatomic, la.so ends up in the needs
    section of every toolchain executable; some consider this an issue.
    
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
    Closes openzfs#12345
    Closes openzfs#12359
    nabijaczleweli authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    968dc13 View commit details
    Browse the repository at this point in the history
  23. Introduce dsl_dir_diduse_transfer_space()

    Most of dsl_dir_diduse_space() and dsl_dir_transfer_space() CPU time
    is a dd_lock overhead and time spent in dmu_buf_will_dirty(). Calling
    them one after another is a waste of time and even more contention.
    Doing that twice for each rewritten block within dbuf_write_done()
    via dsl_dataset_block_kill() and dsl_dataset_block_born() created one
    of the biggest CPU overheads in case of small blocks rewrite.
    
    dsl_dir_diduse_transfer_space() combines functionality of these two
    functions for cases where it is needed, but without double overhead,
    practically for the cost of dsl_dir_diduse_space() or even cheaper.
    
    While there, optimize dsl_dir_phys() calls in dsl_dir_diduse_space()
    and dsl_dir_transfer_space().  It seems Clang detects some aliasing
    there, repeating dd->dd_dbuf->db_data dereference multiple times,
    increasing dd_lock scope and contention.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Author: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12300
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    ba76bb3 View commit details
    Browse the repository at this point in the history
  24. Correct zfs-send(8) on readonly sends

    zfs-send(8) claimed in the flags list you could use -pR when sending
    a readonly filesystem or volume. You cannot.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#12336
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    056c273 View commit details
    Browse the repository at this point in the history
  25. zpool_influxdb: fix -Werror=stringop-truncation

    Use strlcpy instead of problematic strncpy
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12344
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    f8c2e91 View commit details
    Browse the repository at this point in the history
  26. FreeBSD: Switch from MAXPHYS to maxphys on FreeBSD 13+

    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12378
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c2c4d05 View commit details
    Browse the repository at this point in the history
  27. Remove unused fields from zvol_task_t

    We don't use or need the pool name or value source in the zvol tasks.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12361
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    0ca9558 View commit details
    Browse the repository at this point in the history
  28. A few fixes of callback typecasting (for the upcoming ClangCFI)

    * zio: avoid callback typecasting
    * zil: avoid zil_itxg_clean() callback typecasting
    * zpl: decouple zpl_readpage() into two separate callbacks
    * nvpair: explicitly declare callbacks for xdr_array()
    * linux/zfs_nvops: don't use external iput() as a callback
    * zcp_synctask: don't use fnvlist_free() as a callback
    * zvol: don't use ops->zv_free() as a callback for taskq_dispatch()
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Signed-off-by: Alexander Lobakin <alobakin@pm.me>
    Closes openzfs#12260
    solbjorn authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    4affa09 View commit details
    Browse the repository at this point in the history
  29. dmu_redact.c does not call bqueue_destroy

    Ensure all calls to bqueue_init() has a corresponding call to bqueue_destroy()
    
    Reviewed-by: Paul Dagnelie <pcd@delphix.com>
    Co-authored-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Closes openzfs#12118
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    4dfb698 View commit details
    Browse the repository at this point in the history
  30. Minor ARC optimizations

    Remove unneeded global, practically constant, state pointer variables
    (arc_anon, arc_mru, etc.), replacing them with macros of real state
    variables addresses (&ARC_anon, &ARC_mru, etc.).
    
    Change ARC_EVICT_ALL from -1ULL to UINT64_MAX, not requiring special
    handling in inner loop of ARC reclamation.  Respectively change bytes
    argument of arc_evict_state() from int64_t to uint64_t.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12348
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6a49948 View commit details
    Browse the repository at this point in the history
  31. CI: generate ABI files if changed

    So commit author can just download them as
    artifacts and commit.
    
    Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12379
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    7c61e1e View commit details
    Browse the repository at this point in the history
  32. Optimize allocation throttling

    Remove mc_lock use from metaslab_class_throttle_*().  The math there
    is based on refcounts and so atomic, so the only race possible there
    is between zfs_refcount_count() and zfs_refcount_add().  But in most
    cases metaslab_class_throttle_reserve() is called with the allocator
    lock held, which covers the race.  In cases where the lock is not
    held, GANG_ALLOCATION() or METASLAB_MUST_RESERVE are set, and so we
    do not use zfs_refcount_count().  And even if we assume some other
    non-existing scenario, the worst that may happen from this race is
    few more I/Os get to allocation earlier, that is not a problem.
    
    Move locks and data of different allocators into different cache
    lines to avoid false sharing.  Group spa_alloc_* arrays together
    into single array of aligned struct spa_alloc spa_allocs.  Align
    struct metaslab_class_allocator.
    
    Reviewed-by: Paul Dagnelie <pcd@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: Don Brady <don.brady@delphix.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12314
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    32c0b64 View commit details
    Browse the repository at this point in the history
  33. Remove old orig_fd variable from zfs send

    Possibly required in the past, but is currently fills no purpose.
    Ordinarily such tiny cleanup is not generally worth it, however
    on the macOS port, in a future commit, we do unspeakable things to the
    "fd" for send/recv, and it would be easier to only have to deal with
    one "fd" instead of two.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Jorgen Lundman <lundman@lundman.net>
    Closes openzfs#12404
    lundman authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    eaa1025 View commit details
    Browse the repository at this point in the history
  34. FreeBSD: Ignore make_dev_s() errors

    Since errors returned by zvol_create_minor_impl() are ignored by the
    common code, it is more convenient to ignore make_dev_s() errors there.
    It allows, for example, to get device created for the zvol after later
    rename instead of having it further stuck in half-created state.
    zvol_rename_minor() already ignores those errors.
    
    While there, switch from MAXPHYS to maxphys in FreeBSD 13+.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12375
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    93e11e2 View commit details
    Browse the repository at this point in the history
  35. zloop: Add a max iterations option, use default run/pass times

    It is useful to have control over the number of iterations of zloop so
    we can easily produce "x core dumps found *in y iterations*" metrics.
    
    Using random values for run/pass times doesn't improve coverage in a
    meaningful way.
    
    Randomizing run time could be seen as a compromise between running a
    greater variety of shorter tests versus a smaller variety of longer
    tests within a fixed time span.  However, it is not desirable when
    running a fixed number of iterations.
    
    Pass time already incorporates randomness within ztest.
    
    Either parameter can be passed to ztest explicitly if the defaults are
    not satisfactory.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12411
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    729eb48 View commit details
    Browse the repository at this point in the history
  36. Linux 5.14 compat: blk_alloc_disk()

    In Linux 5.14, blk_alloc_queue is no longer exported, and its usage
    has been superseded by blk_alloc_disk, which returns a gendisk struct
    from which we can still retrieve the struct request_queue* that is
    needed in the one place where it is used. This also replaces the call
    to alloc_disk(minors), and minors is now set via struct member
    assignment.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
    Reviewed-by: Coleman Kane <ckane@colemankane.org>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12362
    Closes openzfs#12409
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    2f073cc View commit details
    Browse the repository at this point in the history
  37. Fix unfortunate NULL in spa_update_dspace

    After 1325434, we can in certain circumstances end up calling
    spa_update_dspace with vd->vdev_mg NULL, which ends poorly during
    vdev removal.
    
    So let's not do that further space adjustment when we can't.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#12380
    Closes openzfs#12428
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6385f4e View commit details
    Browse the repository at this point in the history
  38. Linux 5.14 compat: explicity assign set_page_dirty

    Kernel 5.14 introduced a change where set_page_dirty of
    struct address_space_operations is no longer implicitly set to
    __set_page_dirty_buffers(), which ended up resulting in a NULL
    pointer deref in the kernel when it is attempted to be called.
    This change sets .set_page_dirty in the structure to
    __set_page_dirty_nobuffers(), which was introduced with the
    related patch set. The breaking change was introduce in commit
    0af573780b0b13fceb7fabd49dc1b073cee9a507 to torvalds/linux.git.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Coleman Kane <ckane@colemankane.org>
    Closes openzfs#12427
    ckane authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    4434baa View commit details
    Browse the repository at this point in the history
  39. Initialize "autoreplace" in spa_ld_get_props()

    spa_prop_find() may fail to find the specified property, in which case
    it suppresses ENOENT from zap_lookup().  In this case, the return value
    is left uninitialized, so spa_autoreplace was being initialized using an
    uninitialized stack variable.
    
    This was found using KMSAN.  It appears to be a regression from commit
    9eb7b46, which removed the initialization of "autoreplace" from the
    definition.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12383
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    fceda40 View commit details
    Browse the repository at this point in the history
  40. Initialize all fields in zfs_log_xvattr()

    When logging TX_SETATTR, we could otherwise fail to initialize part of
    the corresponding ZIL record depending on which fields are present in
    the xvattr.  Initialize the creation time and the AV scan timestamp to
    zero so that uninitialized bytes are not written to the ZIL.
    
    This was found using KMSAN.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12383
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    9cc9821 View commit details
    Browse the repository at this point in the history
  41. Zero pad bytes when allocating a ZIL record

    When allocating a record, we round up the allocation size to a multiple
    of 8.  In this case, any padding bytes should be zeroed, otherwise the
    contents of uninitialized memory are written to the ZIL.
    
    This was found using KMSAN.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12383
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    bd910fd View commit details
    Browse the repository at this point in the history
  42. Zero pad bytes following TX_WRITE log data

    When logging a TX_WRITE record in the case where file data has to be
    copied from the DMU, we pad the log record size to a multiple of 8
    bytes.  In this case, any padding bytes should be zeroed, otherwise the
    contents of uninitialized memory are written to the ZIL.
    
    This was found using KMSAN.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12383
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    99df200 View commit details
    Browse the repository at this point in the history
  43. Initialize dn_next_type[] in the dnode constructor

    It seems nothing ensures that this array is zeroed when a dnode is
    freshly allocated, so in principle it retains the values from the
    previous allocation.  In practice it seems to be the case that the
    fields should end up zeroed, but we can zero the field anyway for
    consistency.
    
    This was found using KMSAN.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12383
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    ac573e3 View commit details
    Browse the repository at this point in the history
  44. Fixes in persistent L2ARC

    In l2arc_add_vdev() first decide whether the device is eligible for
    L2ARC rebuild or whole device trim and then add it to the list of cache
    devices. Otherwise l2arc_feed_thread() might already start writing on
    the device invalidating previous content as l2ad_hand = l2ad_start.
    However l2arc_rebuild_vdev() needs the device present in the cache
    device list to figure out its l2arc_dev_t. Fix this by moving most of
    l2arc_rebuild_vdev() in a new function l2arc_rebuild_dev() which does
    not need to search in the cache device list.
    
    In contrast to l2arc_add_vdev() we do not have to worry about
    l2arc_feed_thread() invalidating previous content when onlining a
    cache device. The device parameters (l2ad*) are not cleared when
    offlining the device and writing new buffers will not invalidate
    all previous content. In worst case only buffers that have not had
    their log block written to the device will be lost.
    
    Retire persist_l2arc_00{4,5,8} tests since they cover code already
    covered by the remaining ones. Test persist_l2arc_006 is renamed to
    persist_l2arc_004 and persist_l2arc_007 is renamed to persist_l2arc_005.
    
    Fix a typo in persist_l2arc_004, and remove an assertion that is not
    always true from l2arc_arcstats_pos. Also update an assertion in
    persist_l2arc_005 and explain why in a comment.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Amanakis <gamanakis@gmail.com>
    Closes openzfs#12365
    gamanakis authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    406534f View commit details
    Browse the repository at this point in the history
  45. Add missing properties to zfs allow manpage

    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Václav Skála <skala@vshosting.cz>
    Closes openzfs#12402
    vaclavskala authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    898b1e1 View commit details
    Browse the repository at this point in the history
  46. Read past end of argv array in zpool_do_import()

    `zpool_do_import()` passes `argv[0]`, (optionally) `argv[1]`, and
    `pool_specified` to `import_pools()`.  If `pool_specified==FALSE`, the
    `argv[]` arguments are not used.  However, these values may be off the
    end of the `argv[]` array, so loading them could dereference unmapped
    memory.  This error is reported by the asan build:
    
    ```
    =================================================================
    ==6003==ERROR: AddressSanitizer: heap-buffer-overflow
    READ of size 8 at 0x6030000004a8 thread T0
        #0 0x562a078b50eb in zpool_do_import zpool_main.c:3796
        #1 0x562a078858c5 in main zpool_main.c:10709
        #2 0x7f5115231bf6 in __libc_start_main
        openzfs#3 0x562a07885eb9 in _start
    
    0x6030000004a8 is located 0 bytes to the right of 24-byte region
    allocated by thread T0 here:
        #0 0x7f5116ac6b40 in __interceptor_malloc
        #1 0x562a07885770 in main zpool_main.c:10699
        #2 0x7f5115231bf6 in __libc_start_main
    ```
    
    This commit passes NULL for these arguments if they are off the end
    of the `argv[]` array.
    
    Reviewed-by: George Wilson <gwilson@delphix.com>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
    Closes openzfs#12339
    ahrens authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    8a969f3 View commit details
    Browse the repository at this point in the history
  47. Assorted fixes for the performance tests

    - Bail out early if we're running the perf tests and forget to
      specify disks.
    - Allow perf tests to run with any number of disks.
    - Remove weekly vs. nightly settings
    - Move variables with common values to perf.shlib
    - Use zinject to clear the ARC over export/import
    - Fix dbuf cache size calculation
    
    When the meaning of `dbuf_cache_max_bytes` changed, the performance
    test that covers the dbuf cache started to fail. The test would try to
    write files for the test using the max possible size of the cache,
    inevitably filling the pool and failing. This change uses
    `dbuf_cache_shift` to correctly calculate the dbuf cache size.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Signed-off-by: John Kennedy <john.kennedy@delphix.com>
    Closes openzfs#12408
    jwk404 authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    9429910 View commit details
    Browse the repository at this point in the history
  48. Add comment on metaslab_class_throttle_reserve() locking

    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Issue openzfs#12314
    Closes openzfs#12419
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    e298ac5 View commit details
    Browse the repository at this point in the history
  49. Allow disabling of unmapped I/O on FreeBSD

    We have a tunable which permits one to disable the use of unmapped I/O
    for the buffer cache.  Respect it in ZFS as well.  This is useful for
    KMSAN, which cannot easily maintain shadow state for unmapped pages.
    
    No functional change intended, as unmapped I/O is permitted by default
    and there's no real reason to disable it in practice except for
    debugging.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12446
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    451d6da View commit details
    Browse the repository at this point in the history
  50. Modify checksum obtain method of QAT

    CpaDcGeneratefooter function that obtain the checksum code
    does not support the CPA_DC_STATELESS mode. So we get the
    adler32 chencksum of the end of the zlib from dc_results.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Chengfei Zhu <chengfeix.zhu@intel.com>
    Signed-off-by: hedong.zhang <h_d_zhang@163.com>
    Closes openzfs#12343
    hedongzhang authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    ddb732e View commit details
    Browse the repository at this point in the history
  51. Man zpool-scrub.8: describe sequential scrub

    Describe sequential scrub and add examples of scrub status.
    
    Reviewed-by: Richard Laager <rlaager@wiktel.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12429
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c07ed69 View commit details
    Browse the repository at this point in the history
  52. Enable /proc/diskstats for zvols

    The /proc/diskstats accounting needs to be explicitly enabled
    for block devices which do not use multi-queue.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12440
    Closes openzfs#12066
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    32a971e View commit details
    Browse the repository at this point in the history
  53. Make get_key_material_file fail more verbosely

    It turns out, there are a lot of possible reasons for fopen to fail.
    Let's share which reason we failed for today.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#12410
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    23184b1 View commit details
    Browse the repository at this point in the history
  54. Run arc_evict thread at higher priority

    Run arc_evict thread at higher priority, nice=0, to give it more CPU
    time which can improve performance for workload with high ARC evict
    activities.
    
    On mixed read/write and sequential read workloads, I've seen between
    10-40% better performance.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Tony Nguyen <tony.nguyen@delphix.com>
    Closes openzfs#12397
    tonynguien authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    477edd6 View commit details
    Browse the repository at this point in the history
  55. Fix usage of find in tests/Makefile.am

    The path is not optional on FreeBSD.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12453
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    cc55271 View commit details
    Browse the repository at this point in the history
  56. Add zfs.sh -r flag to reload modules

    zfs.sh already can load and unload, so why not both?
    
    This is convenient when developing changes to the module and you want
    to rapidly make some changes, rebuild the module, reload the module,
    and test the changes.
    
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12450
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    cacc487 View commit details
    Browse the repository at this point in the history
  57. zfs: add missed dependency of zfs module on zlib

    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Martin Matuska <mm@FreeBSD.org>
    Co-authored-by: Konstantin Belousov <kib@FreeBSD.org>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    External-issue: https://reviews.freebsd.org/D31207
    Closes openzfs#12442
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    744f300 View commit details
    Browse the repository at this point in the history
  58. Restore FreeBSD sysctl processing for arc.min and arc.max

    Before OpenZFS 2.0, trying to set the FreeBSD sysctl vfs.zfs.arc_max
    to a disallowed value would return an error.
    Since the switch, it instead only generates WARN_IF_TUNING_IGNORED
    
    Keep the ability to set the sysctl's specifically to 0, even though
    that is less than the minimum, because some tests depend on this.
    
    Also lost, was the ability to set vfs.zfs.arc_max to a value less
    than the default vfs.zfs.arc_min at boot time. Restore this as well.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
    Signed-off-by: Allan Jude <allan@klarasystems.com>
    Closes openzfs#12161
    allanjude authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    24e51e3 View commit details
    Browse the repository at this point in the history
  59. ZTS: Avoid unset $tmpdir in redacted_panic

    The redacted_send tests make use of a $tmpdir variable, except in
    redacted_send/redacted_panic the variable is never defined.
    
    Use $TEST_BASE_DIR instead.
    
    Clean up the stream file after the test.
    
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12455
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c6c0d30 View commit details
    Browse the repository at this point in the history
  60. Use more atomics in refcounts

    Use atomic_load_64() for zfs_refcount_count() to prevent torn reads
    on 32-bit platforms.  On 64-bit ones it should not change anything.
    
    When built with ZFS_DEBUG but running without tracking enabled use
    atomics instead of mutexes same as for builds without ZFS_DEBUG.
    Since rc_tracked can't change live we can check it without lock.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12420
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    5afc35b View commit details
    Browse the repository at this point in the history
  61. Avoid vq_lock drop in vdev_queue_aggregate()

    vq_lock is already too congested for two more operations per I/O.
    Instead of dropping and reacquiring it inside vdev_queue_aggregate()
    delegate the zio_vdev_io_bypass() and zio_execute() calls for parent
    I/Os to callers, that drop the lock any way to execute the new I/O.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12297
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    c600f06 View commit details
    Browse the repository at this point in the history
  62. Fix/improve dbuf hits accounting

    Instead of clearing stats inside arc_buf_alloc_impl() do it inside
    arc_hdr_alloc() and arc_release().  It fixes statistics being wiped
    every time a new dbuf is filled from the ARC.
    
    Remove b_l1hdr.b_l2_hits. L2ARC hits are accounted at b_l2hdr.b_hits.
    Since the hits are accounted under hash lock, replace atomics with
    simple increments.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: George Wilson <george.wilson@delphix.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12422
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    40e02f4 View commit details
    Browse the repository at this point in the history
  63. Optimize arc_l2c_only lists assertions

    It is very expensive and not informative to call multilist_is_empty()
    for each arc_change_state() on debug builds to check for impossible.
    Instead implement special index function for arc_l2c_only->arcs_list,
    multilists, panicking on any attempt to use it.
    
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12421
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    61773f4 View commit details
    Browse the repository at this point in the history
  64. Remove b_pabd/b_rabd allocation from arc_hdr_alloc()

    When a header is allocated for full overwrite it is a waste of time
    to allocate b_pabd/b_rabd for it, since arc_write() will free them
    without ever being touched.  If it is a read or a partial overwrite
    then arc_read() and arc_hdr_decrypt() allocate them explicitly.
    
    Reduced memory allocation in user threads also reduces ARC eviction
    throttling there, proportionally increasing it in ZIO threads, that
    is not good.  To minimize or even avoid it introduce ARC allocation
    reserve, allowing certain arc_get_data_abd() callers to allocate a
    bit longer in situations where user threads will already throttle.
    
    Reviewed-by: George Wilson <gwilson@delphix.com>
    Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
    Signed-off-by: Alexander Motin <mav@FreeBSD.org>
    Closes openzfs#12398
    amotin authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    a486212 View commit details
    Browse the repository at this point in the history
  65. zfs.4: Fix typo s/compatiblity/compatibility/

    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Gordon Bergling <gbergling@googlemail.com>
    Closes openzfs#12464
    gbergling authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    5de6e4e View commit details
    Browse the repository at this point in the history
  66. Linux 4.11 compat: statx support

    Linux 4.11 added a new statx system call that allows us to expose crtime
    as btime. We do this by caching crtime in the znode to match how atime,
    ctime and mtime are cached in the inode.
    
    statx also introduced a new way of reporting whether the immutable,
    append and nodump bits have been set. It adds support for reporting
    compression and encryption, but the semantics on other filesystems is
    not just to report compression/encryption, but to allow it to be turned
    on/off at the file level. We do not support that.
    
    We could implement semantics where we refuse to allow user modification
    of the bit, but we would need to do a dnode_hold() in zfs_znode_alloc()
    to find out encryption/compression information. That would introduce
    locking that will have a minor (although unmeasured) performance cost.
    It also would be inferior to zdb, which reports far more detailed
    information. We therefore omit reporting of encryption/compression
    through statx in favor of recommending that users interested in such
    information use zdb.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Signed-off-by: Richard Yao <ryao@gentoo.org>
    Closes openzfs#8507
    ryao authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    1655ce5 View commit details
    Browse the repository at this point in the history
  67. ZTS: Add tests for creation time

    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12432
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    584b7a2 View commit details
    Browse the repository at this point in the history
  68. Initialize parity blocks before RAID-Z reconstruction benchmarking

    benchmark_raidz() allocates a row to benchmark parity calculation and
    reconstruction.  In the latter case, the parity blocks are left
    uninitialized, leading to reports from KMSAN.
    
    Initialize parity blocks to 0xAA as we do for the data earlier in the
    function.  This does not affect the selected RAID-Z implementation on
    any of several systems tested.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Mark Johnston <markj@FreeBSD.org>
    Closes openzfs#12473
    markjdb authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    2016d7f View commit details
    Browse the repository at this point in the history
  69. zpool-remove.8: describe top-level vdev sector size limitation

    Document that top-level vdevs cannot be removed unless all top-level
    vdevs have the same sector size.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Signed-off-by: Sam Hathaway <sam@sam-hathaway.com>
    Closes openzfs#11339
    Closes openzfs#12472
    smammy authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    e78d06f View commit details
    Browse the repository at this point in the history
  70. vdev_id: Return an error if config file is not found

    Signed-off-by: Anton Gubarkov <anton.gubarkov@gmail.com>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    rugubara authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    bc371b2 View commit details
    Browse the repository at this point in the history
  71. Make 'zpool labelclear -f' work on offlined disks

    This patch allows you to clear the label on offlined disks in an active
    pool with `-f`.  Previously, labelclear wouldn't let you do that.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Closes openzfs#12511
    tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    2904ec5 View commit details
    Browse the repository at this point in the history
  72. Correct checking bdev_check_media_change message

    We're not looking for bdev_disk_changed.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12492
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6c3c7dc View commit details
    Browse the repository at this point in the history
  73. ZTS: Waiting for zvols to be available

    The ZTS block_device_wait helper function should use -e when waiting
    for a file to appear since it will be either a block special device
    or a symlink.  This didn't cause any failures but when a device path
    was specified the function would wait longer than needed.
    
    Additionally update the most flakey test cases to pass the file path
    to block_device_wait to try and improve the test reliability.  The
    udev behavior on Fedora in particular can result in frequent false
    positives.
    
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12515
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6bb6410 View commit details
    Browse the repository at this point in the history
  74. Fix cross-endian interoperability of zstd

    It turns out that layouts of union bitfields are a pain, and the
    current code results in an inconsistent layout between BE and LE
    systems, leading to zstd-active datasets on one erroring out on
    the other.
    
    Switch everyone over to the LE layout, and add compatibility code
    to read both.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#12008
    Closes openzfs#12022
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    72a989c View commit details
    Browse the repository at this point in the history
  75. FreeBSD: Don't remove SA xattr if not SA znode

    We attempt to remove an existing SA xattr when setting a dir xattr, but
    this only makes sense if the znode has been upgraded to the SA format.
    Otherwise, we will hit an assert in zfs_sa_get_xattr.
    
    Make sure this is an SA znode before attempting to remove the SA xattr.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12514
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    8161168 View commit details
    Browse the repository at this point in the history
  76. ZTS: Remove exceptions for flaky zhack on FreeBSD

    Issue openzfs#11854 has been resolved, so we can remove the exceptions for it.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
    Closes openzfs#12527
    Ryan Moeller authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    aef8a72 View commit details
    Browse the repository at this point in the history
  77. Check for libabigail version

    We need to use 1.8.0+ version, older versions
    may segfault and give inconsistent results.
    
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12529
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    004e7d3 View commit details
    Browse the repository at this point in the history
  78. CI: use fresh libabigail via docker image

    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12529
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    993d4b2 View commit details
    Browse the repository at this point in the history
  79. Libabigail: make .abi files more consistent

    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12529
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    d6dae00 View commit details
    Browse the repository at this point in the history
  80. Update ABI files via new libabigail version

    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12529
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    5331e2d View commit details
    Browse the repository at this point in the history
  81. CI: don't install abigail-tools

    We use docker image instead.
    
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: George Melikov <mail@gmelikov.ru>
    Closes openzfs#12529
    gmelikov authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    e16e05c View commit details
    Browse the repository at this point in the history
  82. Detect iSCSI in the zpool cmd vdev media script

    Reviewed-by: Serapheim Dimitropoulos <serapheim@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Don Brady <don.brady@delphix.com>
    Closes openzfs#12206
    Don Brady authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    6ca1f30 View commit details
    Browse the repository at this point in the history
  83. Linux 5.15 compat: block device readahead

    The 5.15 kernel moved the backing_dev_info structure out of
    the request queue structure which causes a build failure.
    
    Rather than look in the new location for the BDI we instead
    detect this upstream refactoring by the existance of either
    the blk_queue_update_readahead() or disk_update_readahead()
    functions.  In either case, there's no longer any reason to
    manually set the ra_pages value since it will be overridden
    with a reasonable default (2x the block size) when
    blk_queue_io_opt() is called.
    
    Therefore, we update the compatibility wrapper to do nothing
    for 5.9 and newer kernels.  While it's tempting to do the
    same for older kernels we want to keep the compatibility
    code to preserve the existing behavior.  Removing it would
    effectively increase the default readahead to 128k.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12532
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    ad8dc99 View commit details
    Browse the repository at this point in the history
  84. Linux 5.15 compat: standalone <linux/stdarg.h>

    Kernel commits
    
    39f75da7bcc8 ("isystem: trim/fixup stdarg.h and other headers")
    c0891ac15f04 ("isystem: ship and use stdarg.h")
    564f963eabd1 ("isystem: delete global -isystem compile option")
    
    (for now can be found in linux-next.git tree, will land into the
     Linus' tree during the ongoing 5.15 cycle with one of akpm merges)
    
    removed the -isystem flag and disallowed the inclusion of any
    compiler header files. They also introduced a minimal
    <linux/stdarg.h> as a replacement for <stdarg.h>.
    include/os/linux/spl/sys/cmn_err.h in the ZFS source tree includes
    <stdarg.h> unconditionally. Introduce a test for <linux/stdarg.h>
    and include it instead of the compiler's one to prevent module
    build breakage.
    
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Alexander Lobakin <alobakin@pm.me>
    Closes openzfs#12531
    solbjorn authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    7bf68e9 View commit details
    Browse the repository at this point in the history
  85. Compressed receive with different ashift can result in incorrect PSIZ…

    …E on disk
    
    We round up the psize to the nearest multiple of the asize or to the
    lsize, whichever is smaller. Once that's done, we allocate a new
    buffer of the appropriate size, zero the tail, and copy the data
    into it. This adds a small performance cost to these kinds of writes,
    but fixes the bookkeeping problems.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Co-authored-by: Matthew Ahrens <matthew.ahrens@delphix.com>
    Signed-off-by: Paul Dagnelie <pcd@delphix.com>
    Closes openzfs#12522
    Closes openzfs#8462
    pcd1193182 authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    fd92825 View commit details
    Browse the repository at this point in the history
  86. arc: Drop an incorrect assert

    Unfortunately, there was an overzealous assertion that was (in pretty
    specific circumstances) false, causing failure.  This assertion was
    added in error, so we're removing it.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: George Wilson <gwilson@delphix.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#9897
    Closes openzfs#12020
    Closes openzfs#12246
    rincebrain authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    7d70f1e View commit details
    Browse the repository at this point in the history
  87. Allow sending corrupt snapshots even if metadata is corrupted

    When zfs_send_corrupt_data is set, use the TRAVERSE_HARD flag,
    so traverse_visitbp() will not fail with ECKSUM if a blockpointer
    cannot be read, but rather will continue and send the objects it can.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Signed-off-by: Allan Jude <allan@klarasystems.com>
    Sponsored-By: Klara Inc.
    Sponsored-By: WHC Online Solutions Inc.
    Closes openzfs#12541
    allanjude authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    cea0752 View commit details
    Browse the repository at this point in the history
  88. Linux 5.15 compat: get_acl()

    Kernel commits
    
    332f606b32b6 ovl: enable RCU'd ->get_acl()
    0cad6246621b vfs: add rcu argument to ->get_acl() callback
    
    Added compatibility code to detect the new ->get_acl() interface
    and correctly handle the case where the new rcu argument is set.
    
    Reviewed-by: Coleman Kane <ckane@colemankane.org>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12548
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    32512ac View commit details
    Browse the repository at this point in the history
  89. Verify embedded blkptr's in arc_read()

    The block pointer verification check in arc_read() should also
    cover embedded block pointers.  While highly unlikely, accessing
    a damaged block pointer can result in panic.  To further harden
    the code extend the existing check to include embedded block
    pointers and add a comment explaining the rational for this
    sanity check.  Lastly, correct a flaw in zfs_blkptr_verify()
    so the error count is checked even when checking a untrusted
    config to verify the non-pool-specific portions of a block
    pointer.
    
    Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12535
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    9183321 View commit details
    Browse the repository at this point in the history
  90. ZTS: Waiting for zvols to be available

    This is a follow up patch for PR openzfs#12515 which addresses some
    additional ZTS tests which are unreliable are should explicitly
    wait for the required zvols to be available.
    
    Reviewed-by: John Kennedy <john.kennedy@delphix.com>
    Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
    Reviewed-by: @Theo13111
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12553
    behlendorf authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    7816a6b View commit details
    Browse the repository at this point in the history
  91. Fixed data integrity issue when underlying disk returns error

    Errors in zil_lwb_write_done() are not propagated to
    zil_lwb_flush_vdevs_done() which can result in zil_commit_impl()
    not returning an error to applications even when zfs was not able
    to write data to the disk.
    
    Remove the ZIO_FLAG_DONT_PROPAGATE flag from zio_rewrite() to
    allow errors to propagate and consolidate the error handling for
    flush and write errors to a single location (rather than having
    error handling split between the "write done" and "flush done"
    handlers).
    
    Reviewed-by: George Wilson <gwilson@delphix.com>
    Reviewed-by: Prakash Surya <prakash.surya@delphix.com>
    Signed-off-by: Arun KV <arun.kv@datacore.com>
    Closes openzfs#12391
    Closes openzfs#12443
    arun-kv authored and tonyhutter committed Sep 14, 2021
    Configuration menu
    Copy the full SHA
    bb80b46 View commit details
    Browse the repository at this point in the history

Commits on Sep 15, 2021

  1. Linux 5.14 compat: META

    Increase the Linux-Maximum version in the META file to 5.14.
    All of the required compatibility patches have been merged
    and the 5.14 kernel has been officially released.
    
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Closes openzfs#12565
    behlendorf committed Sep 15, 2021
    Configuration menu
    Copy the full SHA
    a3da79d View commit details
    Browse the repository at this point in the history
  2. Tag 2.1.1

    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    behlendorf committed Sep 15, 2021
    Configuration menu
    Copy the full SHA
    71c6098 View commit details
    Browse the repository at this point in the history