The branch vendor/openzfs has been updated by mm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=69d9cc88d213f3d95526636743f15371f2fa6c2c

commit 69d9cc88d213f3d95526636743f15371f2fa6c2c
Author:     Martin Matuska <m...@freebsd.org>
AuthorDate: 2021-02-14 00:09:23 +0000
Commit:     Martin Matuska <m...@freebsd.org>
CommitDate: 2021-02-14 00:09:23 +0000

    Update OpenZFS to master-c1c31a835
    
    Discussed with: mjguzik
---
 .github/PULL_REQUEST_TEMPLATE.md                   |  42 +++
 .github/workflows/zfs-tests-functional.yml         |  64 ++++
 .../{zfs-tests.yml => zfs-tests-sanity.yml}        |   2 +
 META                                               |   2 +-
 Makefile.am                                        |  13 +-
 cmd/Makefile.am                                    |  10 +
 cmd/mount_zfs/Makefile.am                          |   2 +
 cmd/mount_zfs/mount_zfs.c                          |  15 +
 cmd/raidz_test/Makefile.am                         |   2 +
 cmd/raidz_test/raidz_test.c                        |   5 +-
 cmd/vdev_id/vdev_id                                | 399 +++++++++++++++------
 cmd/zdb/Makefile.am                                |   2 +
 cmd/zdb/zdb.c                                      | 138 ++++++-
 cmd/zed/Makefile.am                                |   2 +
 cmd/zed/agents/zfs_agents.c                        |  19 +-
 cmd/zed/agents/zfs_retire.c                        |   2 +-
 cmd/zed/zed.d/zed-functions.sh                     |   0
 cmd/zfs/Makefile.am                                |   2 +
 cmd/zfs_ids_to_path/Makefile.am                    |   2 +
 cmd/zgenhostid/Makefile.am                         |   4 +-
 cmd/zhack/Makefile.am                              |   2 +
 cmd/zinject/Makefile.am                            |   2 +
 cmd/zpool/Makefile.am                              |   2 +
 cmd/zpool/zpool_main.c                             |  15 +-
 cmd/zpool_influxdb/Makefile.am                     |   2 +
 cmd/zstream/Makefile.am                            |   2 +
 cmd/ztest/Makefile.am                              |   2 +
 cmd/ztest/ztest.c                                  | 388 ++++++++++----------
 cmd/zvol_id/Makefile.am                            |   2 +
 config/CppCheck.am                                 |  11 +
 config/Rules.am                                    |   1 +
 config/always-cppcheck.m4                          |   6 +
 config/ax_count_cpus.m4                            | 101 ++++++
 config/kernel-get-disk-and-module.m4               |   0
 config/kernel-vfs-iov_iter.m4                      |  44 ---
 config/zfs-build.m4                                |  10 +-
 contrib/dracut/90zfs/module-setup.sh.in            |   4 +-
 contrib/dracut/90zfs/zfs-env-bootfs.service.in     |   2 +-
 contrib/dracut/90zfs/zfs-generator.sh.in           |   8 +
 contrib/dracut/90zfs/zfs-load-key.sh.in            |   2 +-
 contrib/pyzfs/libzfs_core/test/test_libzfs_core.py |   4 +-
 cppcheck-suppressions.txt                          |   8 -
 etc/systemd/system/zfs-import-cache.service.in     |   2 +-
 etc/systemd/system/zfs-import-scan.service.in      |   2 +-
 include/os/freebsd/spl/sys/Makefile.am             |   1 +
 include/os/freebsd/spl/sys/ccompile.h              |   4 -
 include/os/freebsd/spl/sys/uio.h                   |  79 ++--
 include/os/freebsd/spl/sys/vnode.h                 |   2 +
 include/os/freebsd/zfs/sys/freebsd_crypto.h        |   2 +-
 include/os/freebsd/zfs/sys/zfs_znode_impl.h        |   5 +-
 include/os/linux/spl/sys/uio.h                     |  73 ++--
 include/os/linux/zfs/sys/zfs_vnops_os.h            |   2 +-
 include/os/linux/zfs/sys/zfs_znode_impl.h          |   5 +-
 include/sys/abd.h                                  |  75 +++-
 include/sys/abd_impl.h                             |  48 +--
 include/sys/crypto/common.h                        |   2 +-
 include/sys/dmu.h                                  |  15 +-
 include/sys/fs/zfs.h                               |   1 +
 include/sys/sa.h                                   |   2 +-
 include/sys/spa.h                                  |   1 +
 include/sys/spa_impl.h                             |   1 +
 include/sys/uio_impl.h                             |   8 +-
 include/sys/vdev.h                                 |   4 +
 include/sys/vdev_impl.h                            |   5 +
 include/sys/vdev_raidz_impl.h                      |   1 +
 include/sys/zfs_debug.h                            |   1 +
 include/sys/zfs_sa.h                               |   2 +-
 include/sys/zfs_vnops.h                            |   8 +-
 include/sys/zfs_znode.h                            |   2 +
 lib/Makefile.am                                    |  10 +-
 lib/libavl/Makefile.am                             |   2 +
 lib/libefi/Makefile.am                             |   2 +
 lib/libefi/rdwr_efi.c                              |   1 +
 lib/libicp/Makefile.am                             |   2 +
 lib/libnvpair/Makefile.am                          |   3 +-
 lib/libshare/Makefile.am                           |   2 +
 lib/libspl/Makefile.am                             |   9 +
 lib/libspl/include/os/freebsd/Makefile.am          |   4 +
 lib/libspl/include/os/freebsd/sys/Makefile.am      |   1 +
 lib/libspl/include/sys/uio.h                       |  44 +--
 lib/libtpool/Makefile.am                           |   2 +
 lib/libunicode/Makefile.am                         |   2 +
 lib/libuutil/Makefile.am                           |   3 +-
 lib/libuutil/uu_avl.c                              |   1 +
 lib/libzfs/Makefile.am                             |   3 +-
 lib/libzfs/libzfs_import.c                         |   2 +-
 lib/libzfs/libzfs_pool.c                           |  51 ++-
 lib/libzfs/libzfs_sendrecv.c                       | 205 +++++------
 lib/libzfs_core/Makefile.am                        |   3 +-
 lib/libzfsbootenv/Makefile.am                      |   3 +-
 lib/libzpool/Makefile.am                           |   2 +
 lib/libzstd/Makefile.am                            |   2 +
 lib/libzutil/Makefile.am                           |   5 +-
 lib/libzutil/os/freebsd/zutil_import_os.c          |  20 +-
 lib/libzutil/zutil_import.c                        |  52 ++-
 man/man5/zfs-module-parameters.5                   |  16 +
 man/man8/zdb.8                                     |  18 +-
 man/man8/zfs-list.8                                |  11 +-
 man/man8/zfs-program.8                             |   4 +-
 man/man8/zfsprops.8                                |   2 +-
 module/Makefile.in                                 |  22 +-
 module/avl/avl.c                                   |   3 -
 module/icp/algs/modes/modes.c                      |  12 +-
 module/icp/core/kcf_prov_lib.c                     |  32 +-
 module/icp/io/sha1_mod.c                           |  48 +--
 module/icp/io/sha2_mod.c                           |  48 +--
 module/icp/io/skein_mod.c                          |  40 +--
 module/lua/ldebug.c                                |   1 -
 module/lua/ldo.c                                   |   1 -
 module/os/freebsd/spl/spl_uio.c                    |  38 +-
 module/os/freebsd/spl/spl_vfs.c                    |   6 +-
 module/os/freebsd/zfs/abd_os.c                     |  31 +-
 module/os/freebsd/zfs/crypto_os.c                  |  26 +-
 module/os/freebsd/zfs/zfs_ctldir.c                 |  40 ++-
 module/os/freebsd/zfs/zfs_file_os.c                |   2 +-
 module/os/freebsd/zfs/zfs_onexit_os.c              |   0
 module/os/freebsd/zfs/zfs_vnops_os.c               |  79 ++--
 module/os/freebsd/zfs/zfs_znode.c                  |   6 +-
 module/os/freebsd/zfs/zio_crypt.c                  |  77 ++--
 module/os/freebsd/zfs/zvol_os.c                    |  44 ++-
 module/os/linux/spl/spl-generic.c                  |   2 -
 module/os/linux/spl/spl-kstat.c                    |   2 +-
 module/os/linux/spl/spl-taskq.c                    |   3 +-
 module/os/linux/zfs/abd_os.c                       |  49 ++-
 module/os/linux/zfs/vdev_disk.c                    |  49 ++-
 module/{zcommon => os/linux/zfs}/zfs_uio.c         |  98 +++--
 module/os/linux/zfs/zfs_vfsops.c                   |   2 +-
 module/os/linux/zfs/zfs_vnops_os.c                 |  90 ++---
 module/os/linux/zfs/zfs_znode.c                    |  18 +-
 module/os/linux/zfs/zio_crypt.c                    |  30 +-
 module/os/linux/zfs/zpl_file.c                     |  18 +-
 module/os/linux/zfs/zpl_inode.c                    |   4 +-
 module/os/linux/zfs/zpl_xattr.c                    |   6 +-
 module/os/linux/zfs/zvol_os.c                      |   8 +-
 module/zfs/abd.c                                   | 293 ++++++++-------
 module/zfs/arc.c                                   |  46 ++-
 module/zfs/dbuf.c                                  |   2 +-
 module/zfs/dmu.c                                   |  54 ++-
 module/zfs/dmu_objset.c                            |   2 +-
 module/zfs/dmu_tx.c                                |  16 +
 module/zfs/dsl_dataset.c                           |  13 +-
 module/zfs/dsl_destroy.c                           |  15 +-
 module/zfs/metaslab.c                              | 100 ++++--
 module/zfs/sa.c                                    |   6 +-
 module/zfs/spa.c                                   |  51 ++-
 module/zfs/spa_history.c                           |   8 +-
 module/zfs/spa_misc.c                              |  67 ++--
 module/zfs/txg.c                                   |  24 +-
 module/zfs/vdev.c                                  | 225 ++++++++++--
 module/zfs/vdev_draid.c                            |  34 +-
 module/zfs/vdev_indirect.c                         |   2 +-
 module/zfs/vdev_label.c                            |  38 +-
 module/zfs/vdev_queue.c                            |   2 +-
 module/zfs/vdev_raidz.c                            |  59 +--
 module/zfs/vdev_removal.c                          |  13 +
 module/zfs/zfs_ioctl.c                             |   3 +
 module/zfs/zfs_sa.c                                |  11 +-
 module/zfs/zfs_vnops.c                             |  70 ++--
 module/zfs/zil.c                                   |   2 +-
 module/zfs/zio.c                                   |  75 ++--
 rpm/generic/zfs.spec.in                            |   2 +-
 tests/runfiles/common.run                          |   7 +-
 tests/runfiles/linux.run                           |   2 +-
 tests/test-runner/bin/zts-report.py.in             |  35 ++
 tests/test-runner/include/logapi.shlib             |   6 +-
 tests/zfs-tests/cmd/mmapwrite/mmapwrite.c          |   4 +-
 .../tests/functional/acl/posix-sa/cleanup.ksh      |   0
 .../functional/acl/posix-sa/posix_001_pos.ksh      |   0
 .../functional/acl/posix-sa/posix_002_pos.ksh      |   0
 .../functional/acl/posix-sa/posix_003_pos.ksh      |   0
 .../functional/acl/posix-sa/posix_004_pos.ksh      |   0
 .../tests/functional/acl/posix-sa/setup.ksh        |   0
 .../tests/functional/acl/posix/posix_004_pos.ksh   |   0
 .../tests/functional/checksum/filetest_002_pos.ksh |   0
 .../tests/functional/cli_root/zdb/Makefile.am      |   4 +-
 .../tests/functional/cli_root/zdb/zdb_args_neg.ksh |   2 +-
 .../tests/functional/cli_root/zdb/zdb_recover.ksh  |  55 +++
 .../functional/cli_root/zdb/zdb_recover_2.ksh      |  57 +++
 .../cli_root/zfs_create/zfs_create_nomount.ksh     |   0
 .../cli_root/zfs_mount/zfs_mount_013_pos.ksh       |  20 +-
 .../cli_root/zfs_mount/zfs_mount_014_neg.ksh       |   0
 .../cli_root/zfs_receive/zfs_receive_005_neg.ksh   |   4 +-
 .../cli_root/zfs_receive/zfs_receive_014_pos.ksh   |  25 --
 .../cli_root/zfs_receive/zfs_receive_new_props.ksh |   0
 .../cli_root/zfs_rename/zfs_rename_nounmount.ksh   |   0
 .../cli_root/zfs_rollback/zfs_rollback_001_pos.ksh |   1 +
 .../functional/cli_root/zfs_send/zfs_send-b.ksh    |  10 +-
 .../cli_root/zfs_send/zfs_send_003_pos.ksh         |   2 +-
 .../cli_root/zfs_send/zfs_send_004_neg.ksh         |   2 +-
 .../cli_root/zfs_send/zfs_send_005_pos.ksh         |   2 +-
 .../cli_root/zfs_send/zfs_send_encrypted.ksh       |  10 +-
 .../zfs_send/zfs_send_encrypted_unloaded.ksh       |   2 +-
 .../functional/cli_root/zfs_send/zfs_send_raw.ksh  |  14 +-
 .../cli_root/zfs_set/zfs_set_common.kshlib         |  14 +-
 .../cli_root/zpool_add/zpool_add_dryrun_output.ksh |   0
 .../functional/cli_root/zpool_create/draidcfg.gz   | Bin 0 -> 21672412 bytes
 .../zpool_create/zpool_create_draid_001_pos.ksh    |   0
 .../zpool_create/zpool_create_draid_002_pos.ksh    |   0
 .../zpool_create/zpool_create_draid_003_pos.ksh    |   0
 .../zpool_create/zpool_create_draid_004_pos.ksh    |   0
 .../zpool_create/zpool_create_dryrun_output.ksh    |   0
 .../zpool_events/zpool_events_duplicates.ksh       |   0
 .../functional/cli_root/zpool_export/Makefile.am   |   3 +-
 .../functional/cli_root/zpool_export/setup.ksh     |   4 -
 .../cli_root/zpool_export/zpool_export.cfg         |  37 +-
 .../cli_root/zpool_export/zpool_export.kshlib      |  32 ++
 .../cli_root/zpool_export/zpool_export_001_pos.ksh |  17 +-
 .../cli_root/zpool_export/zpool_export_002_pos.ksh |  13 +-
 .../cli_root/zpool_export/zpool_export_003_neg.ksh |  15 +-
 .../cli_root/zpool_export/zpool_export_004_pos.ksh |  21 +-
 .../cli_root/zpool_import/zpool_import_016_pos.ksh |   0
 .../cli_root/zpool_import/zpool_import_017_pos.ksh |   0
 .../zpool_split/zpool_split_dryrun_output.ksh      |   0
 tests/zfs-tests/tests/functional/io/Makefile.am    |   1 +
 tests/zfs-tests/tests/functional/io/io_uring.ksh   |  72 ++++
 .../{persist_l2arc => l2arc}/Makefile.am           |   0
 .../{persist_l2arc => l2arc}/cleanup.ksh           |   0
 .../persist_l2arc.cfg => l2arc/l2arc.cfg}          |   0
 .../tests/functional/l2arc/l2arc_arcstats_pos.ksh  |   0
 .../tests/functional/l2arc/l2arc_l2miss_pos.ksh    |   0
 .../tests/functional/l2arc/l2arc_mfuonly_pos.ksh   |   0
 .../persist_l2arc_001_pos.ksh                      |   0
 .../persist_l2arc_002_pos.ksh                      |   0
 .../persist_l2arc_003_neg.ksh                      |   0
 .../persist_l2arc_004_pos.ksh                      |   0
 .../persist_l2arc_005_pos.ksh                      |   0
 .../persist_l2arc_006_pos.ksh                      |   0
 .../persist_l2arc_007_pos.ksh                      |   0
 .../persist_l2arc_008_pos.ksh                      |   0
 .../functional/{persist_l2arc => l2arc}/setup.ksh  |   0
 .../tests/functional/procfs/pool_state.ksh         |  18 +-
 .../tests/functional/raidz/raidz_003_pos.ksh       |   0
 .../tests/functional/raidz/raidz_004_pos.ksh       |   0
 .../functional/redacted_send/redacted_negative.ksh |   8 +-
 .../functional/redacted_send/redacted_resume.ksh   |   2 +-
 .../tests/functional/redundancy/Makefile.am        |   1 +
 .../functional/redundancy/redundancy_draid1.ksh    |   0
 .../functional/redundancy/redundancy_draid2.ksh    |   0
 .../functional/redundancy/redundancy_draid3.ksh    |   0
 .../redundancy/redundancy_draid_spare1.ksh         |   0
 .../redundancy/redundancy_draid_spare2.ksh         |   0
 .../redundancy/redundancy_draid_spare3.ksh         |   0
 ...edundancy_003_pos.ksh => redundancy_mirror.ksh} |   0
 .../functional/redundancy/redundancy_raidz.ksh     | 198 ++++++++++
 ...edundancy_001_pos.ksh => redundancy_raidz1.ksh} |   0
 ...edundancy_002_pos.ksh => redundancy_raidz2.ksh} |   0
 .../functional/redundancy/redundancy_raidz3.ksh    |   0
 ...edundancy_004_neg.ksh => redundancy_stripe.ksh} |   0
 .../tests/functional/removal/removal_with_send.ksh |   2 +-
 .../functional/removal/remove_attach_mirror.ksh    |   0
 .../tests/functional/rsend/send_invalid.ksh        |   2 +-
 .../functional/rsend/send_partial_dataset.ksh      |   2 +-
 .../tests/functional/userquota/Makefile.am         |   3 +-
 .../functional/userquota/userspace_encrypted.ksh   |   0
 .../userquota/userspace_send_encrypted.ksh         |   0
 .../tests/functional/zpool_influxdb/cleanup.ksh    |   0
 .../tests/functional/zpool_influxdb/setup.ksh      |   0
 .../functional/zpool_influxdb/zpool_influxdb.ksh   |   0
 .../tests/functional/zvol/zvol_swap/zvol_swap.cfg  |   2 +
 259 files changed, 3295 insertions(+), 1789 deletions(-)

diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000000..465ee182c497
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,42 @@
+<!--- Please fill out the following template, which will help other 
contributors review your Pull Request. -->
+
+<!--- Provide a general summary of your changes in the Title above -->
+
+<!---
+Documentation on ZFS Buildbot options can be found at
+https://openzfs.github.io/openzfs-docs/Developer%20Resources/Buildbot%20Options.html
+-->
+
+### Motivation and Context
+<!--- Why is this change required? What problem does it solve? -->
+<!--- If it fixes an open issue, please link to the issue here. -->
+
+### Description
+<!--- Describe your changes in detail -->
+
+### How Has This Been Tested?
+<!--- Please describe in detail how you tested your changes. -->
+<!--- Include details of your testing environment, and the tests you ran to -->
+<!--- see how your change affects other areas of the code, etc. -->
+<!--- If your change is a performance enhancement, please provide benchmarks 
here. -->
+<!--- Please think about using the draft PR feature if appropriate -->
+
+### Types of changes
+<!--- What types of changes does your code introduce? Put an `x` in all the 
boxes that apply: -->
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Performance enhancement (non-breaking change which improves efficiency)
+- [ ] Code cleanup (non-breaking change which makes code smaller or more 
readable)
+- [ ] Breaking change (fix or feature that would cause existing functionality 
to change)
+- [ ] Library ABI change (libzfs, libzfs\_core, libnvpair, libuutil and 
libzfsbootenv)
+- [ ] Documentation (a change to man pages or other documentation)
+
+### Checklist:
+<!--- Go over all the following points, and put an `x` in all the boxes that 
apply. -->
+<!--- If you're unsure about any of these, don't hesitate to ask. We're here 
to help! -->
+- [ ] My code follows the OpenZFS [code style 
requirements](https://github.com/openzfs/zfs/blob/master/.github/CONTRIBUTING.md#coding-conventions).
+- [ ] I have updated the documentation accordingly.
+- [ ] I have read the [**contributing** 
document](https://github.com/openzfs/zfs/blob/master/.github/CONTRIBUTING.md).
+- [ ] I have added [tests](https://github.com/openzfs/zfs/tree/master/tests) 
to cover my changes.
+- [ ] I have run the ZFS Test Suite with this change applied.
+- [ ] All commit messages are properly formatted and contain 
[`Signed-off-by`](https://github.com/openzfs/zfs/blob/master/.github/CONTRIBUTING.md#signed-off-by).
diff --git a/.github/workflows/zfs-tests-functional.yml 
b/.github/workflows/zfs-tests-functional.yml
new file mode 100644
index 000000000000..631f174b74fd
--- /dev/null
+++ b/.github/workflows/zfs-tests-functional.yml
@@ -0,0 +1,64 @@
+name: zfs-tests-functional
+
+on:
+  push:
+  pull_request:
+
+jobs:
+  tests-functional-ubuntu:
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [18.04, 20.04]
+    runs-on: ubuntu-${{ matrix.os }}
+    steps:
+    - uses: actions/checkout@v2
+      with:
+        ref: ${{ github.event.pull_request.head.sha }}
+    - name: Install dependencies
+      run: |
+        sudo apt-get update
+        sudo apt-get install --yes -qq build-essential autoconf libtool gdb 
lcov \
+          git alien fakeroot wget curl bc fio acl \
+          sysstat mdadm lsscsi parted gdebi attr dbench watchdog ksh \
+          nfs-kernel-server samba rng-tools xz-utils \
+          zlib1g-dev uuid-dev libblkid-dev libselinux-dev \
+          xfslibs-dev libattr1-dev libacl1-dev libudev-dev libdevmapper-dev \
+          libssl-dev libffi-dev libaio-dev libelf-dev libmount-dev \
+          libpam0g-dev pamtester python-dev python-setuptools python-cffi \
+          python3 python3-dev python3-setuptools python3-cffi
+    - name: Autogen.sh
+      run: |
+        sh autogen.sh
+    - name: Configure
+      run: |
+        ./configure --enable-debug --enable-debuginfo
+    - name: Make
+      run: |
+        make --no-print-directory -s pkg-utils pkg-kmod
+    - name: Install
+      run: |
+        sudo dpkg -i *.deb
+        # Update order of directories to search for modules, otherwise
+        #   Ubuntu will load kernel-shipped ones.
+        sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
+        sudo depmod
+        sudo modprobe zfs
+    - name: Tests
+      run: |
+        /usr/share/zfs/zfs-tests.sh -v -s 3G
+    - name: Prepare artifacts
+      if: failure()
+      run: |
+        RESULTS_PATH=$(readlink -f /var/tmp/test_results/current)
+        sudo dmesg > $RESULTS_PATH/dmesg
+        sudo cp /var/log/syslog $RESULTS_PATH/
+        sudo chmod +r $RESULTS_PATH/*
+        # Replace ':' in dir names, actions/upload-artifact doesn't support it
+        for f in $(find $RESULTS_PATH -name '*:*'); do mv "$f" "${f//:/__}"; 
done
+    - uses: actions/upload-artifact@v2
+      if: failure()
+      with:
+        name: Test logs Ubuntu-${{ matrix.os }}
+        path: /var/tmp/test_results/20*/
+        if-no-files-found: ignore
diff --git a/.github/workflows/zfs-tests.yml 
b/.github/workflows/zfs-tests-sanity.yml
similarity index 92%
rename from .github/workflows/zfs-tests.yml
rename to .github/workflows/zfs-tests-sanity.yml
index b075a78c7729..e03399757575 100644
--- a/.github/workflows/zfs-tests.yml
+++ b/.github/workflows/zfs-tests-sanity.yml
@@ -50,6 +50,8 @@ jobs:
         sudo dmesg > $RESULTS_PATH/dmesg
         sudo cp /var/log/syslog $RESULTS_PATH/
         sudo chmod +r $RESULTS_PATH/*
+        # Replace ':' in dir names, actions/upload-artifact doesn't support it
+        for f in $(find $RESULTS_PATH -name '*:*'); do mv "$f" "${f//:/__}"; 
done
     - uses: actions/upload-artifact@v2
       if: failure()
       with:
diff --git a/META b/META
index 886da443357d..abced52178a7 100644
--- a/META
+++ b/META
@@ -6,5 +6,5 @@ Release:       rc1
 Release-Tags:  relext
 License:       CDDL
 Author:        OpenZFS
-Linux-Maximum: 5.10
+Linux-Maximum: 5.11
 Linux-Minimum: 3.10
diff --git a/Makefile.am b/Makefile.am
index 436b78d76282..b7cc4ce85655 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -25,7 +25,6 @@ endif
 
 AUTOMAKE_OPTIONS = foreign
 EXTRA_DIST  = autogen.sh copy-builtin
-EXTRA_DIST += cppcheck-suppressions.txt
 EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am
 EXTRA_DIST += META AUTHORS COPYRIGHT LICENSE NEWS NOTICE README.md
 EXTRA_DIST += CODE_OF_CONDUCT.md
@@ -204,13 +203,13 @@ vcscheck:
 PHONY += lint
 lint: cppcheck paxcheck
 
+CPPCHECKDIRS = cmd lib module
 PHONY += cppcheck
-cppcheck:
-       @if type cppcheck > /dev/null 2>&1; then \
-               cppcheck --quiet --force --error-exitcode=2 --inline-suppr \
-                       
--suppressions-list=${top_srcdir}/cppcheck-suppressions.txt \
-                       -UHAVE_SSE2 -UHAVE_AVX512F -UHAVE_UIO_ZEROCOPY \
-                       ${top_srcdir}; \
+cppcheck: $(CPPCHECKDIRS)
+       @if test -n "$(CPPCHECK)"; then \
+               set -e ; for dir in $(CPPCHECKDIRS) ; do \
+                       $(MAKE) -C $$dir cppcheck ; \
+               done \
        else \
                echo "skipping cppcheck because cppcheck is not installed"; \
        fi
diff --git a/cmd/Makefile.am b/cmd/Makefile.am
index d99d1dc382cc..473fcb0e07a1 100644
--- a/cmd/Makefile.am
+++ b/cmd/Makefile.am
@@ -2,10 +2,20 @@ SUBDIRS  = zfs zpool zdb zhack zinject zstream zstreamdump 
ztest
 SUBDIRS += fsck_zfs vdev_id raidz_test zfs_ids_to_path
 SUBDIRS += zpool_influxdb
 
+CPPCHECKDIRS  = zfs zpool zdb zhack zinject zstream ztest
+CPPCHECKDIRS += raidz_test zfs_ids_to_path zpool_influxdb
+
 if USING_PYTHON
 SUBDIRS += arcstat arc_summary dbufstat
 endif
 
 if BUILD_LINUX
 SUBDIRS += mount_zfs zed zgenhostid zvol_id zvol_wait
+CPPCHECKDIRS += mount_zfs zed zgenhostid zvol_id
 endif
+
+PHONY = cppcheck
+cppcheck: $(CPPCHECKDIRS)
+       set -e ; for dir in $(CPPCHECKDIRS) ; do \
+               $(MAKE) -C $$dir cppcheck ; \
+       done
diff --git a/cmd/mount_zfs/Makefile.am b/cmd/mount_zfs/Makefile.am
index 6c4d6ff79f16..3957602d27ad 100644
--- a/cmd/mount_zfs/Makefile.am
+++ b/cmd/mount_zfs/Makefile.am
@@ -18,3 +18,5 @@ mount_zfs_LDADD = \
        $(abs_top_builddir)/lib/libnvpair/libnvpair.la
 
 mount_zfs_LDADD += $(LTLIBINTL)
+
+include $(top_srcdir)/config/CppCheck.am
diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs/mount_zfs.c
index ca39d228479e..5196c3e5cb5f 100644
--- a/cmd/mount_zfs/mount_zfs.c
+++ b/cmd/mount_zfs/mount_zfs.c
@@ -50,6 +50,21 @@ libzfs_handle_t *g_zfs;
 static void
 parse_dataset(const char *target, char **dataset)
 {
+       /*
+        * Prior to util-linux 2.36.2, if a file or directory in the
+        * current working directory was named 'dataset' then mount(8)
+        * would prepend the current working directory to the dataset.
+        * Check for it and strip the prepended path when it is added.
+        */
+       char cwd[PATH_MAX];
+       if (getcwd(cwd, PATH_MAX) == NULL) {
+               perror("getcwd");
+               return;
+       }
+       int len = strlen(cwd);
+       if (strncmp(cwd, target, len) == 0)
+               target += len;
+
        /* Assume pool/dataset is more likely */
        strlcpy(*dataset, target, PATH_MAX);
 
diff --git a/cmd/raidz_test/Makefile.am b/cmd/raidz_test/Makefile.am
index 72c914e641e4..983ff25dc92a 100644
--- a/cmd/raidz_test/Makefile.am
+++ b/cmd/raidz_test/Makefile.am
@@ -18,3 +18,5 @@ raidz_test_LDADD = \
        $(abs_top_builddir)/lib/libzfs_core/libzfs_core.la
 
 raidz_test_LDADD += -lm
+
+include $(top_srcdir)/config/CppCheck.am
diff --git a/cmd/raidz_test/raidz_test.c b/cmd/raidz_test/raidz_test.c
index 4e2639f3676d..e3eb4f4ce44a 100644
--- a/cmd/raidz_test/raidz_test.c
+++ b/cmd/raidz_test/raidz_test.c
@@ -492,8 +492,9 @@ vdev_raidz_map_alloc_expanded(abd_t *abd, uint64_t size, 
uint64_t offset,
                                            (dc - r) * (rows - 1) + row;
                                }
                                rr->rr_col[c].rc_size = 1ULL << ashift;
-                               rr->rr_col[c].rc_abd =
-                                   abd_get_offset(abd, off << ashift);
+                               rr->rr_col[c].rc_abd = abd_get_offset_struct(
+                                   &rr->rr_col[c].rc_abdstruct,
+                                   abd, off << ashift, 1 << ashift);
                        }
 
                        asize += rr->rr_col[c].rc_size;
diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id
index 8a75e638b67e..95a4e483b876 100755
--- a/cmd/vdev_id/vdev_id
+++ b/cmd/vdev_id/vdev_id
@@ -79,6 +79,34 @@
 # channel 86:00.0 1         A
 # channel 86:00.0 0         B
 
+# #
+# # Example vdev_id.conf - multipath / multijbod-daisychaining
+# #
+#
+# multipath yes
+# multijbod yes
+#
+# #       PCI_ID  HBA PORT  CHANNEL NAME
+# channel 85:00.0 1         A
+# channel 85:00.0 0         B
+# channel 86:00.0 1         A
+# channel 86:00.0 0         B
+
+# #
+# # Example vdev_id.conf - multipath / mixed
+# #
+#
+# multipath yes
+# slot mix
+#
+# #       PCI_ID  HBA PORT  CHANNEL NAME
+# channel 85:00.0 3         A
+# channel 85:00.0 2         B
+# channel 86:00.0 3         A
+# channel 86:00.0 2         B
+# channel af:00.0 0         C
+# channel af:00.0 1         C
+
 # #
 # # Example vdev_id.conf - alias
 # #
@@ -92,9 +120,10 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin
 CONFIG=/etc/zfs/vdev_id.conf
 PHYS_PER_PORT=
 DEV=
-MULTIPATH=
 TOPOLOGY=
 BAY=
+ENCL_ID=""
+UNIQ_ENCL_ID=""
 
 usage() {
        cat << EOF
@@ -107,6 +136,7 @@ Usage: vdev_id [-h]
   -e    Create enclose device symlinks only (/dev/by-enclosure)
   -g    Storage network topology [default="$TOPOLOGY"]
   -m    Run in multipath mode
+  -j    Run in multijbod mode
   -p    number of phy's per switch port [default=$PHYS_PER_PORT]
   -h    show this summary
 EOF
@@ -117,12 +147,12 @@ map_slot() {
        LINUX_SLOT=$1
        CHANNEL=$2
 
-       MAPPED_SLOT=`awk "\\$1 == \"slot\" && \\$2 == ${LINUX_SLOT} && \
-                       \\$4 ~ /^${CHANNEL}$|^$/ { print \\$3; exit }" $CONFIG`
+       MAPPED_SLOT=$(awk '$1 == "slot" && $2 == "${LINUX_SLOT}" && \
+                       $4 ~ /^${CHANNEL}$|^$/ { print $3; exit}' $CONFIG)
        if [ -z "$MAPPED_SLOT" ] ; then
                MAPPED_SLOT=$LINUX_SLOT
        fi
-       printf "%d" ${MAPPED_SLOT}
+       printf "%d" "${MAPPED_SLOT}"
 }
 
 map_channel() {
@@ -132,40 +162,120 @@ map_channel() {
 
        case $TOPOLOGY in
                "sas_switch")
-               MAPPED_CHAN=`awk "\\$1 == \"channel\" && \\$2 == ${PORT} \
-                       { print \\$3; exit }" $CONFIG`
+               MAPPED_CHAN=$(awk -v port="$PORT" \
+                       '$1 == "channel" && $2 == ${PORT} \
+                       { print $3; exit }' $CONFIG)
                ;;
                "sas_direct"|"scsi")
-               MAPPED_CHAN=`awk "\\$1 == \"channel\" && \
-                       \\$2 == \"${PCI_ID}\" && \\$3 == ${PORT} \
-                       { print \\$4; exit }" $CONFIG`
+               MAPPED_CHAN=$(awk -v pciID="$PCI_ID" -v port="$PORT" \
+                       '$1 == "channel" && $2 == pciID && $3 == port \
+                       {print $4}' $CONFIG)
                ;;
        esac
-       printf "%s" ${MAPPED_CHAN}
+       printf "%s" "${MAPPED_CHAN}"
+}
+
+get_encl_id() {
+       set -- $(echo $1)
+       count=$#
+
+       i=1
+       while [ $i -le $count ] ; do
+               d=$(eval echo '$'{$i})
+               id=$(cat "/sys/class/enclosure/${d}/id")
+               ENCL_ID="${ENCL_ID} $id"
+               i=$((i + 1))
+       done
+}
+
+get_uniq_encl_id() {
+       for uuid in ${ENCL_ID}; do
+               found=0
+
+               for count in ${UNIQ_ENCL_ID}; do
+                       if [ $count = $uuid ]; then
+                               found=1
+                               break
+                       fi
+               done
+
+               if [ $found -eq 0 ]; then
+                       UNIQ_ENCL_ID="${UNIQ_ENCL_ID} $uuid"
+               fi
+       done
+}
+
+# map_jbod explainer: The bsg driver knows the difference between a SAS
+# expander and fanout expander. Use hostX instance along with top-level
+# (whole enclosure) expander instances in /sys/class/enclosure and
+# matching a field in an array of expanders, using the index of the
+# matched array field as the enclosure instance, thereby making jbod IDs
+# dynamic. Avoids reliance on high overhead userspace commands like
+# multipath and lsscsi and instead uses existing sysfs data.  $HOSTCHAN
+# variable derived from devpath gymnastics in sas_handler() function.
+map_jbod() {
+       DEVEXP=$(ls -l "/sys/block/$DEV/device/" | grep enclos | awk -F/ 
'{print $(NF-1) }')
+       DEV=$1
+
+       # Use "set --" to create index values (Arrays)
+       set -- $(ls -l /sys/class/enclosure | grep -v "^total" | awk '{print 
$9}')
+       # Get count of total elements
+       JBOD_COUNT=$#
+       JBOD_ITEM=$*
+
+       # Build JBODs (enclosure)  id from sys/class/enclosure/<dev>/id
+       get_encl_id "$JBOD_ITEM"
+       # Different expander instances for each paths.
+       # Filter out and keep only unique id.
+       get_uniq_encl_id
+
+       # Identify final 'mapped jbod'
+       j=0
+       for count in ${UNIQ_ENCL_ID}; do
+               i=1
+               j=$((j + 1))
+               while [ $i -le $JBOD_COUNT ] ; do
+                       d=$(eval echo '$'{$i})
+                       id=$(cat "/sys/class/enclosure/${d}/id")
+                       if [ "$d" = "$DEVEXP" ] && [ $id = $count ] ; then
+                               MAPPED_JBOD=$j
+                               break
+                       fi
+                       i=$((i + 1))
+               done
+       done
+
+       printf "%d" "${MAPPED_JBOD}"
 }
 
 sas_handler() {
        if [ -z "$PHYS_PER_PORT" ] ; then
-               PHYS_PER_PORT=`awk "\\$1 == \"phys_per_port\" \
-                       {print \\$2; exit}" $CONFIG`
+               PHYS_PER_PORT=$(awk '$1 == "phys_per_port" \
+                       {print $2; exit}' $CONFIG)
        fi
        PHYS_PER_PORT=${PHYS_PER_PORT:-4}
-       if ! echo $PHYS_PER_PORT | grep -q -E '^[0-9]+$' ; then
+
+       if ! echo "$PHYS_PER_PORT" | grep -q -E '^[0-9]+$' ; then
                echo "Error: phys_per_port value $PHYS_PER_PORT is non-numeric"
                exit 1
        fi
 
        if [ -z "$MULTIPATH_MODE" ] ; then
-               MULTIPATH_MODE=`awk "\\$1 == \"multipath\" \
-                       {print \\$2; exit}" $CONFIG`
+               MULTIPATH_MODE=$(awk '$1 == "multipath" \
+                       {print $2; exit}' $CONFIG)
+       fi
+
+       if [ -z "$MULTIJBOD_MODE" ] ; then
+               MULTIJBOD_MODE=$(awk '$1 == "multijbod" \
+                       {print $2; exit}' $CONFIG)
        fi
 
        # Use first running component device if we're handling a dm-mpath device
        if [ "$MULTIPATH_MODE" = "yes" ] ; then
                # If udev didn't tell us the UUID via DM_NAME, check /dev/mapper
                if [ -z "$DM_NAME" ] ; then
-                       DM_NAME=`ls -l --full-time /dev/mapper |
-                               awk "/\/$DEV$/{print \\$9}"`
+                       DM_NAME=$(ls -l --full-time /dev/mapper |
+                               grep "$DEV"$ | awk '{print $9}')
                fi
 
                # For raw disks udev exports DEVTYPE=partition when
@@ -175,28 +285,41 @@ sas_handler() {
                # we have to append the -part suffix directly in the
                # helper.
                if [ "$DEVTYPE" != "partition" ] ; then
-                       PART=`echo $DM_NAME | awk -Fp '/p/{print "-part"$2}'`
+                       PART=$(echo "$DM_NAME" | awk -Fp '/p/{print "-part"$2}')
                fi
 
                # Strip off partition information.
-               DM_NAME=`echo $DM_NAME | sed 's/p[0-9][0-9]*$//'`
+               DM_NAME=$(echo "$DM_NAME" | sed 's/p[0-9][0-9]*$//')
                if [ -z "$DM_NAME" ] ; then
                        return
                fi
 
-               # Get the raw scsi device name from multipath -ll. Strip off
-               # leading pipe symbols to make field numbering consistent.
-               DEV=`multipath -ll $DM_NAME |
-                       awk '/running/{gsub("^[|]"," "); print $3 ; exit}'`
+               # Utilize DM device name to gather subordinate block devices
+               # using sysfs to avoid userspace utilities
+               DMDEV=$(ls -l --full-time /dev/mapper | grep $DM_NAME |
+                       awk '{gsub("../", " "); print $NF}')
+
+               # Use sysfs pointers in /sys/block/dm-X/slaves because using
+               # userspace tools creates lots of overhead and should be avoided
+               # whenever possible. Use awk to isolate lowest instance of
+               # sd device member in dm device group regardless of string
+               # length.
+               DEV=$(ls "/sys/block/$DMDEV/slaves" | awk '
+                       { len=sprintf ("%20s",length($0)); gsub(/ /,0,str); 
a[NR]=len "_" $0; }
+                       END {
+                               asort(a)
+                               print substr(a[1],22)
+                       }')
+
                if [ -z "$DEV" ] ; then
                        return
                fi
        fi
 
-       if echo $DEV | grep -q ^/devices/ ; then
+       if echo "$DEV" | grep -q ^/devices/ ; then
                sys_path=$DEV
        else
-               sys_path=`udevadm info -q path -p /sys/block/$DEV 2>/dev/null`
+               sys_path=$(udevadm info -q path -p "/sys/block/$DEV" 
2>/dev/null)
        fi
 
        # Use positional parameters as an ad-hoc array
@@ -206,84 +329,104 @@ sas_handler() {
 
        # Get path up to /sys/.../hostX
        i=1
-       while [ $i -le $num_dirs ] ; do
-               d=$(eval echo \${$i})
+
+       while [ $i -le "$num_dirs" ] ; do
+               d=$(eval echo '$'{$i})
                scsi_host_dir="$scsi_host_dir/$d"
-               echo $d | grep -q -E '^host[0-9]+$' && break
-               i=$(($i + 1))
+               echo "$d" | grep -q -E '^host[0-9]+$' && break
+               i=$((i + 1))
        done
 
-       if [ $i = $num_dirs ] ; then
+       # Lets grab the SAS host channel number and save it for JBOD sorting 
later
+       HOSTCHAN=$(echo "$d" | awk -F/ '{ gsub("host","",$NF); print $NF}')
+
+       if [ $i = "$num_dirs" ] ; then
                return
        fi
 
-       PCI_ID=$(eval echo \${$(($i -1))} | awk -F: '{print $2":"$3}')
+       PCI_ID=$(eval echo '$'{$((i -1))} | awk -F: '{print $2":"$3}')
 
        # In sas_switch mode, the directory four levels beneath
        # /sys/.../hostX contains symlinks to phy devices that reveal
        # the switch port number.  In sas_direct mode, the phy links one
        # directory down reveal the HBA port.
        port_dir=$scsi_host_dir
+
        case $TOPOLOGY in
-               "sas_switch") j=$(($i + 4)) ;;
-               "sas_direct") j=$(($i + 1)) ;;
+               "sas_switch") j=$((i + 4)) ;;
+               "sas_direct") j=$((i + 1)) ;;
        esac
 
-       i=$(($i + 1))
+       i=$((i + 1))
+
        while [ $i -le $j ] ; do
-               port_dir="$port_dir/$(eval echo \${$i})"
-               i=$(($i + 1))
+               port_dir="$port_dir/$(eval echo '$'{$i})"
+               i=$((i + 1))
        done
 
-       PHY=`ls -d $port_dir/phy* 2>/dev/null | head -1 | awk -F: '{print $NF}'`
+       PHY=$(ls -d "$port_dir"/phy* 2>/dev/null | head -1 | awk -F: '{print 
$NF}')
        if [ -z "$PHY" ] ; then
                PHY=0
        fi
-       PORT=$(( $PHY / $PHYS_PER_PORT ))
+       PORT=$((PHY / PHYS_PER_PORT))
 
        # Look in /sys/.../sas_device/end_device-X for the bay_identifier
        # attribute.
        end_device_dir=$port_dir
-       while [ $i -lt $num_dirs ] ; do
-               d=$(eval echo \${$i})
+
+       while [ $i -lt "$num_dirs" ] ; do
+               d=$(eval echo '$'{$i})
                end_device_dir="$end_device_dir/$d"
-               if echo $d | grep -q '^end_device' ; then
+               if echo "$d" | grep -q '^end_device' ; then
                        end_device_dir="$end_device_dir/sas_device/$d"
                        break
                fi
-               i=$(($i + 1))
+               i=$((i + 1))
        done
 
+       # Add 'mix' slot type for environments where dm-multipath devices
+       # include end-devices connected via SAS expanders or direct connection
+       # to SAS HBA. A mixed connectivity environment such as pool devices
+       # contained in a SAS JBOD and spare drives or log devices directly
+       # connected in a server backplane without expanders in the I/O path.
        SLOT=
+
        case $BAY in
        "bay")
-               SLOT=`cat $end_device_dir/bay_identifier 2>/dev/null`
+               SLOT=$(cat "$end_device_dir/bay_identifier" 2>/dev/null)
+               ;;
+       "mix")
+               if [ $(cat "$end_device_dir/bay_identifier" 2>/dev/null) ] ; 
then
+                       SLOT=$(cat "$end_device_dir/bay_identifier" 2>/dev/null)
+               else
+                       SLOT=$(cat "$end_device_dir/phy_identifier" 2>/dev/null)
+               fi
                ;;
        "phy")
-               SLOT=`cat $end_device_dir/phy_identifier 2>/dev/null`
+               SLOT=$(cat "$end_device_dir/phy_identifier" 2>/dev/null)
                ;;
        "port")
-               d=$(eval echo \${$i})
-               SLOT=`echo $d | sed -e 's/^.*://'`
+               d=$(eval echo '$'{$i})
+               SLOT=$(echo "$d" | sed -e 's/^.*://')
                ;;
        "id")
-               i=$(($i + 1))
-               d=$(eval echo \${$i})
-               SLOT=`echo $d | sed -e 's/^.*://'`
+               i=$((i + 1))
+               d=$(eval echo '$'{$i})
+               SLOT=$(echo "$d" | sed -e 's/^.*://')
                ;;
        "lun")
-               i=$(($i + 2))
-               d=$(eval echo \${$i})
-               SLOT=`echo $d | sed -e 's/^.*://'`
+               i=$((i + 2))
+               d=$(eval echo '$'{$i})
+               SLOT=$(echo "$d" | sed -e 's/^.*://')
                ;;
        "ses")
                # look for this SAS path in all SCSI Enclosure Services
                # (SES) enclosures
-               sas_address=`cat $end_device_dir/sas_address 2>/dev/null`
-               enclosures=`lsscsi -g | \
-                       sed -n -e '/enclosu/s/^.* \([^ ][^ ]*\) *$/\1/p'`
+               sas_address=$(cat "$end_device_dir/sas_address" 2>/dev/null)
+               enclosures=$(lsscsi -g | \
+                       sed -n -e '/enclosu/s/^.* \([^ ][^ ]*\) *$/\1/p')
                for enclosure in $enclosures; do
-                       set -- $(sg_ses -p aes $enclosure | \
+                       set -- $(sg_ses -p aes "$enclosure" | \
                                awk "/device slot number:/{slot=\$12} \
                                        /SAS address: $sas_address/\
                                        {print slot}")
@@ -298,42 +441,55 @@ sas_handler() {
                return
        fi
 
-       CHAN=`map_channel $PCI_ID $PORT`
-       SLOT=`map_slot $SLOT $CHAN`
-       if [ -z "$CHAN" ] ; then
-               return
+       if [ "$MULTIJBOD_MODE" = "yes" ] ; then
+               CHAN=$(map_channel "$PCI_ID" "$PORT")
+               SLOT=$(map_slot "$SLOT" "$CHAN")
+               JBOD=$(map_jbod "$DEV")
+
+               if [ -z "$CHAN" ] ; then
+                       return
+               fi
+               echo "${CHAN}"-"${JBOD}"-"${SLOT}${PART}"
+       else
+               CHAN=$(map_channel "$PCI_ID" "$PORT")
+               SLOT=$(map_slot "$SLOT" "$CHAN")
+
+               if [ -z "$CHAN" ] ; then
+                       return
+               fi
+               echo "${CHAN}${SLOT}${PART}"
        fi
-       echo ${CHAN}${SLOT}${PART}
 }
 
 scsi_handler() {
        if [ -z "$FIRST_BAY_NUMBER" ] ; then
-               FIRST_BAY_NUMBER=`awk "\\$1 == \"first_bay_number\" \
-                       {print \\$2; exit}" $CONFIG`
+               FIRST_BAY_NUMBER=$(awk '$1 == "first_bay_number" \
+                       {print $2; exit}' $CONFIG)
        fi
        FIRST_BAY_NUMBER=${FIRST_BAY_NUMBER:-0}
 
        if [ -z "$PHYS_PER_PORT" ] ; then
-               PHYS_PER_PORT=`awk "\\$1 == \"phys_per_port\" \
-                       {print \\$2; exit}" $CONFIG`
+               PHYS_PER_PORT=$(awk '$1 == "phys_per_port" \
+                       {print $2; exit}' $CONFIG)
        fi
        PHYS_PER_PORT=${PHYS_PER_PORT:-4}
-       if ! echo $PHYS_PER_PORT | grep -q -E '^[0-9]+$' ; then
+
+       if ! echo "$PHYS_PER_PORT" | grep -q -E '^[0-9]+$' ; then
                echo "Error: phys_per_port value $PHYS_PER_PORT is non-numeric"
                exit 1
        fi
 
        if [ -z "$MULTIPATH_MODE" ] ; then
*** 11470 LINES SKIPPED ***
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to