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.2.1 patch stack #15498

Merged
merged 39 commits into from
Nov 21, 2023
Merged

Commits on Nov 6, 2023

  1. Fix block cloning between unencrypted and encrypted datasets

    Block cloning from an encrypted dataset into an unencrypted dataset
    and vice versa is not possible. The current code did allow cloning
    unencrypted files into an encrypted dataset causing a panic when
    these were accessed. Block cloning between encrypted and encrypted
    is currently supported on the same filesystem only.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Kay Pedersen <mail@mkwg.de>
    Reviewed-by: Rob N <robn@despairlabs.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Martin Matuska <mm@FreeBSD.org>
    Closes openzfs#15464
    Closes openzfs#15465
    mmatuska authored and behlendorf committed Nov 6, 2023
    Configuration menu
    Copy the full SHA
    459c99f View commit details
    Browse the repository at this point in the history

Commits on Nov 7, 2023

  1. FreeBSD: Improve taskq wrapper

    - Group tqent_task and tqent_timeout_task into a union.  They are
    never used same time. This shrinks taskq_ent_t from 192 to 160 bytes.
     - Remove tqent_registered.  Use tqent_id != 0 instead.
     - Remove tqent_cancelled.  Use taskqueue pending counter instead.
     - Change tqent_type into uint_t.  We don't need to pack it any more.
     - Change tqent_rc into uint_t, matching refcount(9).
     - Take shared locks in taskq_lookup().
     - Call proper taskqueue_drain_timeout() for TIMEOUT_TASK in
    taskq_cancel_id() and taskq_wait_id().
     - Switch from CK_LIST to regular LIST.
    
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Mateusz Guzik <mjguzik@gmail.com>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15356
    amotin authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    b76724a View commit details
    Browse the repository at this point in the history
  2. Large sync writes perform worse with slog

    For synchronous write workloads with large IO sizes, a pool configured
    with a slog performs worse than one with an embedded zil:
    
    sequential_writes 1m sync ios, 16 threads
      Write IOPS:              1292          438   -66.10%
      Write Bandwidth:      1323570       448910   -66.08%
      Write Latency:       12128400     36330970      3.0x
    
    sequential_writes 1m sync ios, 32 threads
      Write IOPS:              1293          430   -66.74%
      Write Bandwidth:      1324184       441188   -66.68%
      Write Latency:       24486278     74028536      3.0x
    
    The reason is the `zil_slog_bulk` variable. In `zil_lwb_write_open`,
    if a zil block is greater than 768K, the priority of the write is
    downgraded from sync to async. Increasing the value allows greater
    throughput. To select a value for this PR, I ran an fio workload with
    the following values for `zil_slog_bulk`:
    
        zil_slog_bulk    KiB/s
        1048576         422132
        2097152         478935
        4194304         533645
        8388608         623031
        12582912        827158
        16777216       1038359
        25165824       1142210
        33554432       1211472
        50331648       1292847
        67108864       1308506
        100663296      1306821
        134217728      1304998
    
    At 64M, the results with a slog are now improved to parity with an
    embedded zil:
    
    sequential_writes 1m sync ios, 16 threads
      Write IOPS:               438         1288      2.9x
      Write Bandwidth:       448910      1319062      2.9x
      Write Latency:       36330970     12163408   -66.52%
    
    sequential_writes 1m sync ios, 32 threads
      Write IOPS:               430         1290      3.0x
      Write Bandwidth:       441188      1321693      3.0x
      Write Latency:       74028536     24519698   -66.88%
    
    None of the other tests in the performance suite (run with a zil or
    slog) had a significant change, including the random_write_zil tests,
    which use multiple datasets.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
    Signed-off-by: John Wren Kennedy <john.kennedy@delphix.com>
    Closes openzfs#14378
    jwk404 authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    6d693e2 View commit details
    Browse the repository at this point in the history
  3. Add zfs_prepare_disk script for disk firmware install

    Have libzfs call a special `zfs_prepare_disk` script before a disk is
    included into the pool.  The user can edit this script to add things
    like a disk firmware update or a disk health check.  Use of the script
    is totally optional. See the zfs_prepare_disk manpage for full details.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Closes openzfs#15243
    tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    78fd79e View commit details
    Browse the repository at this point in the history
  4. Fix ZED auto-replace for VDEVs using by-id paths

    The change is simple -- restore the original code so that the VDEV 
    path is updated when using by-id paths.  The more challenging part 
    was to devise a second ZTS test, that would test auto-replace for 
    'by-id' and help prevent a future regression.
    
    With that new test, we can now do an A|B test with , and without, 
    the fix to confirm that auto-replace for by-id paths works. The 
    existing auto-replace test, functional/fault/auto_replace_001_pos, 
    will confirm that we didn't break auto-replace for 'by-vdev' paths.
    
    In the original functional/fault/auto_replace_001_pos test, the disk 
    wipe (using dd) was not effective in removing the partitioning since 
    the kernel was never informed of the wipe.
    
    Added a call to wipefs(8) so that the kernel is informed and ZED will 
    re-partition the device.
        
    Added a validation step that the re-partitioning occurred by
    confirming  that the GPT partition UUID changes.
    
    Sponsored-By: OpenDrives Inc.
    Sponsored-By: Klara Inc.
    Reviewed-by: Rob Norris <rob.norris@klarasystems.com>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Signed-off-by: Don Brady <don.brady@klarasystems.com>
    Closes openzfs#15363
    don-brady authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    0bcd115 View commit details
    Browse the repository at this point in the history
  5. Set spa_ccw_fail_time=0 when expanding a vdev.

    When a vdev is to be expanded -- either via `zpool online -e` or via
    the autoexpand option -- a SPA_ASYNC_CONFIG_UPDATE request is queued
    to be handled via an asynchronous worker thread (spa_async_thread).
    This normally happens almost immediately; but will be delayed up to
    zfs_ccw_retry_interval seconds (default 5 minutes) if an attempt to
    write the zpool configuration cache failed.
    
    When FreeBSD boots ZFS-root VM images generated using `makefs -t zfs`,
    the zpoolupgrade rc.d script runs `zpool upgrade`, which modifies the
    pool configuration and triggers an attempt to write to the cache file.
    This attempted write fails because the filesystem is still mounted
    read-only at this point in the boot process, triggering a 5-minute
    cooldown before SPA_ASYNC_CONFIG_UPDATE requests will be handled by
    the asynchronous worker thread.
    
    When expanding a vdev, reset the "when did a configuration cache
    write last fail" value so that the SPA_ASYNC_CONFIG_UPDATE request
    will be handled promptly.  A cleaner but more intrusive option would
    be to use separate SPA_ASYNC_ flags for "configuration changed" and
    "try writing the configuration cache again", but with FreeBSD 14.0
    coming very soon I'd prefer to leave such refactoring for a later
    date.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Colin Percival <cperciva@FreeBSD.org>
    Closes openzfs#15405
    cperciva authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    1cc1bf4 View commit details
    Browse the repository at this point in the history
  6. FreeBSD: taskq: Remove unused declaration

    Variable 'uma_align_cache' has not been used since commit "FreeBSD: Use
    a hash table for taskqid lookups" (3933305).  Moreover, it is soon
    going to become private to FreeBSD's UMA in 15.0-CURRENT (main),
    14.0-STABLE (stable/14) and 13.2-STABLE (stable/13).  Should accessing
    this information become necessary again, one will have to use the new
    accessors for recent versions.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Olivier Certner <olce.freebsd@certner.fr>
    Closes openzfs#15416
    OlCe2 authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    edebca5 View commit details
    Browse the repository at this point in the history
  7. Fix typo in tests/zfs-tests/tests/functional/cli_user/misc/misc.cfg

    Reviewed-by: Rob N <robn@despairlabs.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Dennis R. Friedrichsen <dennis.r.friedrichsen@gmail.com>
    Closes openzfs#15417
    dennisfriedrichsen authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    8ca95d7 View commit details
    Browse the repository at this point in the history
  8. Properly pad struct tx_cpu to cache line

    We already use ____cacheline_aligned in many places, so add one more
    instead of seems arbitrary char tc_pad[8].
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15402
    amotin authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    eaa62d9 View commit details
    Browse the repository at this point in the history
  9. run-zts test procfs/pool_state failed with uncorrectable I/O failure

    Once we trigger the zpool scrub, all zpool/zfs command gets stuck for 
    180 seconds. Post 180 seconds zpool/zfs commands gets start executing 
    however few more seconds(10s) it take to update the status. hence 
    sleeping for 200 seconds so that we get the correct status.
    
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: vaibhav.bhanawat <vaibhav.bhanawat@delphix.com>
    Closes openzfs#15364
    vaibhav-delphix authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    0ef1964 View commit details
    Browse the repository at this point in the history
  10. Remove lock from dsl_pool_need_dirty_delay()

    Torn reads/writes of dp_dirty_total are unlikely: on 64-bit systems
    due to register size, while on 32-bit due to memory constraints.
    And even if we hit some race, the code implementing the delay takes
    the lock any way.
    
    Removal of the poll-wide lock acquisition saves ~1% of CPU time on
    8-thread 8KB write workload.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15390
    amotin authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    79f7de5 View commit details
    Browse the repository at this point in the history
  11. Trust ARC_BUF_SHARED() more

    In my understanding ARC_BUF_SHARED() and arc_buf_is_shared() should
    return identical results, except the second also asserts it deeper.
    The first is much cheaper though, saving few pointer dereferences.
    Replace production arc_buf_is_shared() calls with ARC_BUF_SHARED(),
    and call arc_buf_is_shared() in random assertions, while making it
    even more strict.
    
    On my tests this in half reduces arc_buf_destroy_impl() time, that
    noticeably reduces hash_lock congestion under heavy dbuf eviction.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: George Wilson <george.wilson@delphix.com>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15397
    amotin authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    6e41aca View commit details
    Browse the repository at this point in the history
  12. "ARC prefetch metadata accesses:" appears twice in the output.

    The first occurrence should be "ARC prefetch data accesses:"
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: ofthesun9 <olivier@ofthesun.net>
    Closes openzfs#15427
    ofthesun9 authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    86c3ed4 View commit details
    Browse the repository at this point in the history
  13. zvol: Remove broken blk-mq optimization

    This fix removes a dubious optimization in zfs_uiomove_bvec_rq()
    that saved the iterator contents of a rq_for_each_segment().  This
    optimization allowed restoring the "saved state" from a previous
    rq_for_each_segment() call on the same uio so that you wouldn't
    need to iterate though each bvec on every zfs_uiomove_bvec_rq() call.
    However, if the kernel is manipulating the requests/bios/bvecs under
    the covers between zfs_uiomove_bvec_rq() calls, then it could result
    in corruption from using the "saved state".  This optimization
    results in an unbootable system after installing an OS on a zvol
    with blk-mq enabled.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Closes openzfs#15351
    tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    e860cb0 View commit details
    Browse the repository at this point in the history
  14. Revert "zvol: Temporally disable blk-mq"

    This reverts commit aefb6a2.
    
    aefb6a2 temporally disabled blk-mq until we could fix a fix for
    
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Closes openzfs#15439
    tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    8ba748d View commit details
    Browse the repository at this point in the history
  15. Add mutex_enter_interruptible() for interruptible sleeping IOCTLs

    Many long-running ZFS ioctls lock the spa_namespace_lock, forcing
    concurrent ioctls to sleep for the mutex. Previously, the only
    option is to call mutex_enter() which sleeps uninterruptibly. This
    is a usability issue for sysadmins, for example, if the admin runs
    `zpool status` while a slow `zpool import` is ongoing, the admin's
    shell will be locked in uninterruptible sleep for a long time.
    
    This patch resolves this admin usability issue by introducing
    mutex_enter_interruptible() which sleeps interruptibly while waiting
    to acquire a lock. It is implemented for both Linux and FreeBSD.
    
    The ZFS_IOC_POOL_CONFIGS ioctl, used by `zpool status`, is changed to
    use this new macro so that the command can be interrupted if it is
    issued during a concurrent `zpool import` (or other long-running
    operation).
    
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Thomas Bertschinger <bertschinger@lanl.gov>
    Closes openzfs#15360
    bertschinger authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    f9a9aea View commit details
    Browse the repository at this point in the history
  16. Read prefetched buffers from L2ARC

    Prefetched buffers are currently read from L2ARC if, and only if,
    l2arc_noprefetch is set to non-default value of 0. This means that
    a streaming read which can be served from L2ARC will instead engage
    the main pool.
    
    For example, consider what happens when a file is sequentially read:
    - application requests contiguous data, engaging the prefetcher;
    - ARC buffers are initially marked as prefetched but, as the calling
    application consumes data, the prefetch tag is cleared;
    - these "normal" buffers become eligible for L2ARC and are copied to it;
    - re-reading the same file will *not* engage L2ARC even if it contains
    the required buffers;
    - main pool has to suffer another sequential read load, which (due to
    most NCQ-enabled HDDs preferring sequential loads) can dramatically
    increase latency for uncached random reads.
    
    In other words, current behavior is to write data to L2ARC (wearing it)
    without using the very same cache when reading back the same data. This
    was probably useful many years ago to preserve L2ARC read bandwidth but,
    with current SSD speed/size/price, it is vastly sub-optimal.
    
    Setting l2arc_noprefetch=1, while enabling L2ARC to serve these reads,
    means that even prefetched but unused buffers will be copied into L2ARC,
    further increasing wear and load for potentially not-useful data.
    
    This patch enable prefetched buffer to be read from L2ARC even when
    l2arc_noprefetch=1 (default), increasing sequential read speed and
    reducing load on the main pool without polluting L2ARC with not-useful
    (ie: unused) prefetched data. Moreover, it clear users confusion about
    L2ARC size increasing but not serving any IO when doing sequential
    reads.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Gionatan Danti <g.danti@assyoma.it>
    Closes openzfs#15451
    shodanshok authored and tonyhutter committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    7aef672 View commit details
    Browse the repository at this point in the history

Commits on Nov 8, 2023

  1. Linux 6.6 compat: use inode_get/set_ctime*(...)

    In Linux commit 13bc24457850583a2e7203ded05b7209ab4bc5ef, direct access
    to the i_ctime member of struct inode was removed. The new approach is
    to use accessor methods that exclusively handle passing the timestamp
    around by value. This change adds new tests for each of these functions
    and introduces zpl_* equivalents in include/os/linux/zfs/sys/zpl.h. In
    where the inode_get/set_ctime*() functions exist, these zpl_* calls will
    be mapped to the new functions. On older kernels, these macros just wrap
    direct-access calls. The code that operated on an address of ip->i_ctime
    to call ZFS_TIME_DECODE() now will take a local copy using
    zpl_inode_get_ctime(), and then pass the address of the local copy when
    performing the ZFS_TIME_DECODE() call, in all cases, rather than
    directly accessing the member.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Coleman Kane <ckane@colemankane.org>
    Closes openzfs#15263
    Closes openzfs#15257
    ckane authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    fe9d409 View commit details
    Browse the repository at this point in the history
  2. Linux 6.6 compat: generic_fillattr has a new u32 request_mask added a…

    …t arg2
    
    In commit 0d72b92883c651a11059d93335f33d65c6eb653b, a new u32 argument
    for the request_mask was added to generic_fillattr. This is the same
    request_mask for statx that's present in the most recent API implemented
    by zpl_getattr_impl. This commit conditionally adds it to the
    zpl_generic_fillattr(...) macro, as well as the zfs_getattr_fast(...)
    implementation, when configure determines it's present in the kernel's
    generic_fillattr(...).
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Coleman Kane <ckane@colemankane.org>
    Closes openzfs#15263
    ckane authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    21875dd View commit details
    Browse the repository at this point in the history
  3. Linux 6.6 compat: fsync_bdev() has been removed in favor of sync_bloc…

    …kdev()
    
    In Linux commit 560e20e4bf6484a0c12f9f3c7a1aa55056948e1e, the
    fsync_bdev() function was removed in favor of sync_blockdev() to do
    (roughly) the same thing, given the same input. This change
    conditionally attempts to call sync_blockdev() if fsync_bdev() isn't
    discovered during configure.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Coleman Kane <ckane@colemankane.org>
    Closes openzfs#15263
    ckane authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    3f67e01 View commit details
    Browse the repository at this point in the history
  4. DMU: Do not pre-read holes during write

    dmu_tx_check_ioerr() pre-reads blocks that are going to be dirtied
    as part of transaction to both prefetch them and check for errors.
    But it makes no sense to do it for holes, since there are no disk
    reads to prefetch and there can be no errors.  On the other side
    those blocks are anonymous, and they are freed immediately by the
    dbuf_rele() without even being put into dbuf cache, so we just
    burn CPU time on decompression and overheads and get absolutely
    no result at the end.
    
    Use of dbuf_hold_impl() with fail_sparse parameter allows to skip
    the extra work, and on my tests with sequential 8KB writes to empty
    ZVOL with 32KB blocks shows throughput increase from 1.7 to 2GB/s.
    
    Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15371
    amotin authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    e82e684 View commit details
    Browse the repository at this point in the history
  5. Tune zio buffer caches and their alignments

    We should not always use PAGESIZE alignment for caches bigger than
    it and SPA_MINBLOCKSIZE otherwise.  Doing that caches for 5, 6, 7,
    10 and 14KB rounded up to 8, 12 and 16KB respectively make no sense.
    Instead specify as alignment the biggest power-of-2 divisor.  This
    way 2KB and 6KB caches are both aligned to 2KB, while 4KB and 8KB
    are aligned to 4KB.
    
    Reduce number of caches to half-power of 2 instead of quarter-power
    of 2.  This removes caches difficult for underlying allocators to
    fit into page-granular slabs, such as: 2.5, 3.5, 5, 7, 10KB, etc.
    Since these caches are mostly used for transient allocations like
    ZIOs and small DBUF cache it does not worth being too aggressive.
    Due to the above alignment issue some of those caches were not
    working properly any way.  6KB cache now finally has a chance to
    work right, placing 2 buffers into 3 pages, that makes sense.
    
    Remove explicit alignment in Linux user-space case.  I don't think
    it should be needed any more with the above fixes.
    
    As result on FreeBSD instead of such numbers of pages per slab:
    
    vm.uma.zio_buf_comb_16384.keg.ppera: 4
    vm.uma.zio_buf_comb_14336.keg.ppera: 4
    vm.uma.zio_buf_comb_12288.keg.ppera: 3
    vm.uma.zio_buf_comb_10240.keg.ppera: 3
    vm.uma.zio_buf_comb_8192.keg.ppera: 2
    vm.uma.zio_buf_comb_7168.keg.ppera: 2
    vm.uma.zio_buf_comb_6144.keg.ppera: 2   <= Broken
    vm.uma.zio_buf_comb_5120.keg.ppera: 2
    vm.uma.zio_buf_comb_4096.keg.ppera: 1
    vm.uma.zio_buf_comb_3584.keg.ppera: 7   <= Hard to free
    vm.uma.zio_buf_comb_3072.keg.ppera: 3
    vm.uma.zio_buf_comb_2560.keg.ppera: 2
    vm.uma.zio_buf_comb_2048.keg.ppera: 1
    vm.uma.zio_buf_comb_1536.keg.ppera: 2
    vm.uma.zio_buf_comb_1024.keg.ppera: 1
    vm.uma.zio_buf_comb_512.keg.ppera: 1
    
    I am now getting such:
    
    vm.uma.zio_buf_comb_16384.keg.ppera: 4
    vm.uma.zio_buf_comb_12288.keg.ppera: 3
    vm.uma.zio_buf_comb_8192.keg.ppera: 2
    vm.uma.zio_buf_comb_6144.keg.ppera: 3   <= Fixed, 2 in 3 pages
    vm.uma.zio_buf_comb_4096.keg.ppera: 1
    vm.uma.zio_buf_comb_3072.keg.ppera: 3
    vm.uma.zio_buf_comb_2048.keg.ppera: 1
    vm.uma.zio_buf_comb_1536.keg.ppera: 2
    vm.uma.zio_buf_comb_1024.keg.ppera: 1
    vm.uma.zio_buf_comb_512.keg.ppera: 1
    
    Reviewed-by: Allan Jude <allan@klarasystems.com>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15452
    amotin authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    bd7a02c View commit details
    Browse the repository at this point in the history
  6. Unify arc_prune_async() code

    There is no sense to have separate implementations for FreeBSD and
    Linux.  Make Linux code shared as more functional and just register
    FreeBSD-specific prune callback with arc_add_prune_callback() API.
    
    Aside of code cleanup this should fix excessive pruning on FreeBSD:
    https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274698
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Mark Johnston <markj@FreeBSD.org>
    Signed-off-by:	Alexander Motin <mav@FreeBSD.org>
    Sponsored by:	iXsystems, Inc.
    Closes openzfs#15456
    amotin authored and tonyhutter committed Nov 8, 2023
    Configuration menu
    Copy the full SHA
    3ec4ea6 View commit details
    Browse the repository at this point in the history

Commits on Nov 16, 2023

  1. Add all read-only compatible zpool features to grub2 compatibility

    GRUB opens the boot pool in read-only mode. All read-only
    compatible features for zpool can be enabled and added to
    grub2 compatibility, as GRUB does not open the boot-pool
    for write.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Closes openzfs#15459
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    1c70483 View commit details
    Browse the repository at this point in the history
  2. Fix dkms installation of deb packages created with Alien.

    Alien does not honour the %posttrans hook.
    So move the dkms uninstall/install scripts to the
     %pre/%post hooks in case of package install/upgrade.
    In case of package removal, handle that in %preun.
    Add removal of all old dkms modules.
    Add checking for broken 'dkms status'. Handle that as
    good as possible and warn the user about it.
    Also add more verbose messages about what we are doing.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Mart Frauenlob <AllKind@fastest.cc>
    Closes openzfs#15415
    AllKind authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    e534ba5 View commit details
    Browse the repository at this point in the history
  3. Remove obsolete_counts from grub2 compatibility list

    PR#15459 add all read-only compatible zpool features to grub2
    compatibility list. 'obsolete_counts' is a read-only features that
    depends on 'device_removal' feature which is not read-only and
    is marked as ZFEATURE_FLAG_MOS. Creating a pool with grub2
    compatibility enables 'device_removal' feature as well, which is
    not desired.
    
    This commit removes the 'obsolete_counts' feature from
    grub2 compatibility list, as GRUB only supports read-only
    compatible features.
    
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Closes openzfs#15499
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    f0ffcc3 View commit details
    Browse the repository at this point in the history
  4. Linux 6.6 compat: fix implicit conversion error with debug build

    With Linux v6.6.0 and GCC 12, when debug build is configured,
    implicit conversion error is raised while converting
    'enum <anonymous>' to 'boolean_t'. Use 'B_TRUE' instead of
    'true' to fix the issue.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Pavel Snajdr <snajpa@snajpa.net>
    Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Closes openzfs#15489
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    44c8ff9 View commit details
    Browse the repository at this point in the history
  5. Fix accounting error for pending sync IO ops in zpool iostat

    Currently vdev_queue_class_length is responsible for checking how long
    the queue length is, however, it doesn't check the length when a list
    is used, rather it just returns whether it is empty or not. To fix this
    I added a counter variable to vdev_queue_class to keep track of the sync
    IO ops, and changed vdev_queue_class_length to reference this variable
    instead.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Signed-off-by: MigeljanImeri <ImeriMigel@gmail.com>
    Closes openzfs#15478
    MigeljanImeri authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    76663fe View commit details
    Browse the repository at this point in the history
  6. Linux: reject read/write mapping to immutable file only on VM_SHARED

    Private read/write mapping can't be used to modify the mapped files, so
    they will remain be immutable. Private read/write mappings are usually
    used to load the data segment of executable files, rejecting them will
    rendering immutable executable files to stop working.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: WHR <msl0000023508@gmail.com>
    Closes openzfs#15344
    Low-power authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    f2fe4d5 View commit details
    Browse the repository at this point in the history
  7. Workaround to allow openzfs-zfs-dkms install on Ubuntu

    As shown in openzfs#15404#issuecomment-1765002181, Ubuntu kernel has
    'Provides: zfs-dkms', which will cause uninstall of the kernel, when
    attempting to install openzfs-zfs-dkms.
    As a workaround remove the 'Conflicts: zfs-dkms' definition from
    the debian control file.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Mart Frauenlob <AllKind@fastest.cc>
    Closes openzfs#15503
    AllKind authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    f6d2e5c View commit details
    Browse the repository at this point in the history
  8. Update zpool-features.7 for grub2 compatibility list updates

    This commit updates zpool-features.7 man page to add newly added
    zpool features to grub2 compatibility list.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Closes openzfs#15505
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    f863ac3 View commit details
    Browse the repository at this point in the history
  9. ZTS: Test for all known zpool feature sets

    zpool_create_features_007_pos only tested for compat-2020 feature
    set. It would be useful to test for all known features sets. If
    any additional feature is found enabled that is not present in
    compatibility list or feature set, it should be caught and
    reported earlier.
    
    This commit also removes encryption from openzfsonosx-1.8.1
    compatibility list. Encryption enables bookmark_v2, since it is
    a dependency of encryption, but not listed in openzfsonoxx-1.8.1
    compatibility list.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Closes openzfs#15505
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    f1659cc View commit details
    Browse the repository at this point in the history
  10. Workaround UBSAN errors for variable arrays

    This gets around UBSAN errors when using arrays at the end of
    structs.  It converts some zero-length arrays to variable length
    arrays and disables UBSAN checking on certain modules.
    
    It is based off of the patch from openzfs#15460.
    
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Tested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
    Co-authored-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Issue openzfs#15145
    Closes openzfs#15510
    tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    e92a680 View commit details
    Browse the repository at this point in the history
  11. Linux 6.6 compat: META

    Update the META file to reflect compatibility with the 6.6 kernel.
    
    Reviewed-by: George Melikov <mail@gmelikov.ru>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reviewed-by: Umer Saleem <usaleem@ixsystems.com>
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    Closes openzfs#15520
    tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    fd836df View commit details
    Browse the repository at this point in the history
  12. Packaging: Auto-generate changelog during configure (openzfs#15528)

    Auto-generate changelog based off on @Version@ during configure,
    so that it is not needed to be update with new releases / version
    updates.
    
    Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
    Reviewed-by: Tony Hutter <hutter2@llnl.gov>
    usaleem-ix authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    0733fe2 View commit details
    Browse the repository at this point in the history
  13. Add a tunable to disable BRT support.

    Copy the disable parameter that FreeBSD implemented, and extend it to
    work on Linux as well, until we're sure this is stable.
    
    Reviewed-by: Alexander Motin <mav@FreeBSD.org>
    Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
    Closes openzfs#15529
    rincebrain authored and tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    87e9e82 View commit details
    Browse the repository at this point in the history
  14. zfs-2.2.1: Disable block cloning by default

    Disable block cloning by default to mitigate possible data corruption
    (see openzfs#15529 and openzfs#15526).
    
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    tonyhutter committed Nov 16, 2023
    Configuration menu
    Copy the full SHA
    479dca5 View commit details
    Browse the repository at this point in the history

Commits on Nov 20, 2023

  1. ZTS: Fix 'could not unmount datasets' on Alma 9

    Many tests are failing on AlmaLinux 9 because ZTS could not destroy the
    pool in cleanup.  This was due to $PWD being set to '.' instead of the
    expected full path.  This patch sets $PWD to the full path.
    
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    tonyhutter committed Nov 20, 2023
    Configuration menu
    Copy the full SHA
    7828702 View commit details
    Browse the repository at this point in the history
  2. Tag zfs-2.2.1

    META file and changelog updated.
    
    Signed-off-by: Tony Hutter <hutter2@llnl.gov>
    tonyhutter committed Nov 20, 2023
    Configuration menu
    Copy the full SHA
    55dd24c View commit details
    Browse the repository at this point in the history