From owner-svn-src-vendor@freebsd.org Fri Sep 4 21:32:05 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4278C3D0346; Fri, 4 Sep 2020 21:32:05 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BjrVF1Ljpz4d8S; Fri, 4 Sep 2020 21:32:05 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1127B1319A; Fri, 4 Sep 2020 21:32:05 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 084LW5du017956; Fri, 4 Sep 2020 21:32:05 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 084LVxU1017922; Fri, 4 Sep 2020 21:31:59 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <202009042131.084LVxU1017922@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 Sep 2020 21:31:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365340 - in vendor-sys/openzfs/dist: . cmd/zfs config etc/systemd/system etc/systemd/system-generators include include/os/freebsd/spl/sys include/os/freebsd/zfs/sys include/os/linux/ke... X-SVN-Group: vendor-sys X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in vendor-sys/openzfs/dist: . cmd/zfs config etc/systemd/system etc/systemd/system-generators include include/os/freebsd/spl/sys include/os/freebsd/zfs/sys include/os/linux/kernel/linux include/os/lin... X-SVN-Commit-Revision: 365340 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2020 21:32:05 -0000 Author: mmacy Date: Fri Sep 4 21:31:58 2020 New Revision: 365340 URL: https://svnweb.freebsd.org/changeset/base/365340 Log: Update vendor openzfs to fd20a8 Added: vendor-sys/openzfs/dist/include/sys/zfs_vfsops.h (contents, props changed) vendor-sys/openzfs/dist/lib/libspl/os/freebsd/zone.c (contents, props changed) vendor-sys/openzfs/dist/tests/zfs-tests/tests/functional/cli_root/zfs_rename/zfs_rename_nounmount.ksh Modified: vendor-sys/openzfs/dist/cmd/zfs/zfs_main.c vendor-sys/openzfs/dist/config/kernel-global_page_state.m4 vendor-sys/openzfs/dist/config/zfs-build.m4 vendor-sys/openzfs/dist/etc/systemd/system-generators/zfs-mount-generator.in vendor-sys/openzfs/dist/etc/systemd/system/zfs-mount.service.in vendor-sys/openzfs/dist/include/libzfs.h vendor-sys/openzfs/dist/include/libzfs_impl.h vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/cred.h vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/zone.h vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/Makefile.am vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h vendor-sys/openzfs/dist/include/os/linux/kernel/linux/page_compat.h vendor-sys/openzfs/dist/include/os/linux/spl/sys/vmsystm.h vendor-sys/openzfs/dist/include/os/linux/zfs/sys/Makefile.am vendor-sys/openzfs/dist/include/sys/Makefile.am vendor-sys/openzfs/dist/lib/libspl/Makefile.am vendor-sys/openzfs/dist/lib/libspl/include/limits.h vendor-sys/openzfs/dist/lib/libspl/include/zone.h vendor-sys/openzfs/dist/lib/libspl/zone.c vendor-sys/openzfs/dist/lib/libzfs/libzfs_changelist.c vendor-sys/openzfs/dist/lib/libzfs/libzfs_dataset.c vendor-sys/openzfs/dist/lib/libzpool/kernel.c vendor-sys/openzfs/dist/man/man8/zfs-rename.8 vendor-sys/openzfs/dist/module/avl/avl.c vendor-sys/openzfs/dist/module/nvpair/nvpair.c vendor-sys/openzfs/dist/module/os/freebsd/spl/spl_kstat.c vendor-sys/openzfs/dist/module/os/freebsd/spl/spl_zone.c vendor-sys/openzfs/dist/module/os/freebsd/zfs/spa_stats.c vendor-sys/openzfs/dist/module/os/freebsd/zfs/zfs_vfsops.c vendor-sys/openzfs/dist/module/os/freebsd/zfs/zvol_os.c vendor-sys/openzfs/dist/module/os/linux/spl/spl-kstat.c vendor-sys/openzfs/dist/module/os/linux/zfs/Makefile.in vendor-sys/openzfs/dist/module/os/linux/zfs/arc_os.c vendor-sys/openzfs/dist/module/os/linux/zfs/spa_stats.c vendor-sys/openzfs/dist/module/os/linux/zfs/zfs_vfsops.c vendor-sys/openzfs/dist/module/os/linux/zfs/zpl_super.c vendor-sys/openzfs/dist/module/zfs/Makefile.in vendor-sys/openzfs/dist/module/zfs/arc.c vendor-sys/openzfs/dist/module/zfs/dsl_dir.c vendor-sys/openzfs/dist/module/zfs/spa.c vendor-sys/openzfs/dist/module/zfs/spa_config.c vendor-sys/openzfs/dist/module/zfs/vdev.c vendor-sys/openzfs/dist/module/zfs/vdev_indirect.c vendor-sys/openzfs/dist/module/zfs/vdev_raidz.c vendor-sys/openzfs/dist/module/zfs/zfs_fm.c vendor-sys/openzfs/dist/module/zfs/zfs_ioctl.c vendor-sys/openzfs/dist/module/zfs/zio.c vendor-sys/openzfs/dist/tests/runfiles/common.run vendor-sys/openzfs/dist/tests/zfs-tests/include/tunables.cfg vendor-sys/openzfs/dist/tests/zfs-tests/tests/functional/cli_root/zfs_rename/Makefile.am vendor-sys/openzfs/dist/tests/zfs-tests/tests/functional/cli_root/zfs_rename/zfs_rename_mountpoint.ksh Directory Properties: vendor-sys/openzfs/dist/zfs.release.in (props changed) Modified: vendor-sys/openzfs/dist/cmd/zfs/zfs_main.c ============================================================================== --- vendor-sys/openzfs/dist/cmd/zfs/zfs_main.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/cmd/zfs/zfs_main.c Fri Sep 4 21:31:58 2020 (r365340) @@ -311,7 +311,8 @@ get_usage(zfs_help_t idx) case HELP_RENAME: return (gettext("\trename [-f] " "\n" - "\trename [-f] -p \n" + "\trename -p [-f] \n" + "\trename -u [-f] \n" "\trename -r \n")); case HELP_ROLLBACK: return (gettext("\trollback [-rRf] \n")); @@ -401,7 +402,7 @@ get_usage(zfs_help_t idx) "<-a | filesystem|volume>\n")); case HELP_CHANGE_KEY: return (gettext("\tchange-key [-l] [-o keyformat=]\n" - "\t [-o keylocation=] [-o pbkfd2iters=]\n" + "\t [-o keylocation=] [-o pbkdf2iters=]\n" "\t \n" "\tchange-key -i [-l] \n")); case HELP_VERSION: @@ -3603,36 +3604,40 @@ zfs_do_list(int argc, char **argv) } /* - * zfs rename [-f] + * zfs rename [-fu] * zfs rename [-f] -p - * zfs rename -r + * zfs rename [-u] -r * * Renames the given dataset to another of the same type. * * The '-p' flag creates all the non-existing ancestors of the target first. + * The '-u' flag prevents file systems from being remounted during rename. */ /* ARGSUSED */ static int zfs_do_rename(int argc, char **argv) { zfs_handle_t *zhp; + renameflags_t flags = { 0 }; int c; int ret = 0; - boolean_t recurse = B_FALSE; + int types; boolean_t parents = B_FALSE; - boolean_t force_unmount = B_FALSE; /* check options */ - while ((c = getopt(argc, argv, "prf")) != -1) { + while ((c = getopt(argc, argv, "pruf")) != -1) { switch (c) { case 'p': parents = B_TRUE; break; case 'r': - recurse = B_TRUE; + flags.recursive = B_TRUE; break; + case 'u': + flags.nounmount = B_TRUE; + break; case 'f': - force_unmount = B_TRUE; + flags.forceunmount = B_TRUE; break; case '?': default: @@ -3661,20 +3666,32 @@ zfs_do_rename(int argc, char **argv) usage(B_FALSE); } - if (recurse && parents) { + if (flags.recursive && parents) { (void) fprintf(stderr, gettext("-p and -r options are mutually " "exclusive\n")); usage(B_FALSE); } - if (recurse && strchr(argv[0], '@') == 0) { + if (flags.nounmount && parents) { + (void) fprintf(stderr, gettext("-u and -p options are mutually " + "exclusive\n")); + usage(B_FALSE); + } + + if (flags.recursive && strchr(argv[0], '@') == 0) { (void) fprintf(stderr, gettext("source dataset for recursive " "rename must be a snapshot\n")); usage(B_FALSE); } - if ((zhp = zfs_open(g_zfs, argv[0], parents ? ZFS_TYPE_FILESYSTEM | - ZFS_TYPE_VOLUME : ZFS_TYPE_DATASET)) == NULL) + if (flags.nounmount) + types = ZFS_TYPE_FILESYSTEM; + else if (parents) + types = ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME; + else + types = ZFS_TYPE_DATASET; + + if ((zhp = zfs_open(g_zfs, argv[0], types)) == NULL) return (1); /* If we were asked and the name looks good, try to create ancestors. */ @@ -3684,7 +3701,7 @@ zfs_do_rename(int argc, char **argv) return (1); } - ret = (zfs_rename(zhp, argv[1], recurse, force_unmount) != 0); + ret = (zfs_rename(zhp, argv[1], flags) != 0); zfs_close(zhp); return (ret); Modified: vendor-sys/openzfs/dist/config/kernel-global_page_state.m4 ============================================================================== --- vendor-sys/openzfs/dist/config/kernel-global_page_state.m4 Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/config/kernel-global_page_state.m4 Fri Sep 4 21:31:58 2020 (r365340) @@ -94,9 +94,6 @@ AC_DEFUN([ZFS_AC_KERNEL_GLOBAL_ZONE_PAGE_STATE_SANITY] ZFS_AC_KERNEL_GLOBAL_PAGE_STATE_ENUM_CHECK([NR_FILE_PAGES]) ZFS_AC_KERNEL_GLOBAL_PAGE_STATE_ENUM_CHECK([NR_INACTIVE_ANON]) ZFS_AC_KERNEL_GLOBAL_PAGE_STATE_ENUM_CHECK([NR_INACTIVE_FILE]) - AS_IF([test -z "$ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B"],[ - ZFS_AC_KERNEL_GLOBAL_PAGE_STATE_ENUM_CHECK([NR_SLAB_RECLAIMABLE]) - ]) AC_MSG_RESULT(yes) ]) @@ -119,18 +116,12 @@ AC_DEFUN([ZFS_AC_KERNEL_GLOBAL_PAGE_STATE], [ [node_stat_item], [$LINUX/include/linux/mmzone.h]) ZFS_AC_KERNEL_ENUM_MEMBER([NR_INACTIVE_FILE], [node_stat_item], [$LINUX/include/linux/mmzone.h]) - ZFS_AC_KERNEL_ENUM_MEMBER([NR_SLAB_RECLAIMABLE], - [node_stat_item], [$LINUX/include/linux/mmzone.h]) - ZFS_AC_KERNEL_ENUM_MEMBER([NR_SLAB_RECLAIMABLE_B], - [node_stat_item], [$LINUX/include/linux/mmzone.h]) ZFS_AC_KERNEL_ENUM_MEMBER([NR_FILE_PAGES], [zone_stat_item], [$LINUX/include/linux/mmzone.h]) ZFS_AC_KERNEL_ENUM_MEMBER([NR_INACTIVE_ANON], [zone_stat_item], [$LINUX/include/linux/mmzone.h]) ZFS_AC_KERNEL_ENUM_MEMBER([NR_INACTIVE_FILE], - [zone_stat_item], [$LINUX/include/linux/mmzone.h]) - ZFS_AC_KERNEL_ENUM_MEMBER([NR_SLAB_RECLAIMABLE], [zone_stat_item], [$LINUX/include/linux/mmzone.h]) ZFS_AC_KERNEL_GLOBAL_ZONE_PAGE_STATE_SANITY Modified: vendor-sys/openzfs/dist/config/zfs-build.m4 ============================================================================== --- vendor-sys/openzfs/dist/config/zfs-build.m4 Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/config/zfs-build.m4 Fri Sep 4 21:31:58 2020 (r365340) @@ -418,33 +418,43 @@ dnl # package type for 'make pkg': (rpm | deb | tgz) dnl # AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ AC_MSG_CHECKING([os distribution]) - if test -f /etc/toss-release ; then - VENDOR=toss ; - elif test -f /etc/fedora-release ; then - VENDOR=fedora ; - elif test -f /etc/redhat-release ; then - VENDOR=redhat ; - elif test -f /etc/gentoo-release ; then - VENDOR=gentoo ; - elif test -f /etc/arch-release ; then - VENDOR=arch ; - elif test -f /etc/SuSE-release ; then - VENDOR=sles ; - elif test -f /etc/slackware-version ; then - VENDOR=slackware ; - elif test -f /etc/lunar.release ; then - VENDOR=lunar ; - elif test -f /etc/lsb-release ; then - VENDOR=ubuntu ; - elif test -f /etc/debian_version ; then - VENDOR=debian ; - elif test -f /etc/alpine-release ; then - VENDOR=alpine ; - elif test -f /bin/freebsd-version ; then - VENDOR=freebsd ; - else - VENDOR= ; - fi + AC_ARG_WITH([vendor], + [AS_HELP_STRING([--with-vendor], + [Distribution vendor @<:@default=check@:>@])], + [with_vendor=$withval], + [with_vendor=check]) + AS_IF([test "x$with_vendor" = "xcheck"],[ + if test -f /etc/toss-release ; then + VENDOR=toss ; + elif test -f /etc/fedora-release ; then + VENDOR=fedora ; + elif test -f /etc/redhat-release ; then + VENDOR=redhat ; + elif test -f /etc/gentoo-release ; then + VENDOR=gentoo ; + elif test -f /etc/arch-release ; then + VENDOR=arch ; + elif test -f /etc/SuSE-release ; then + VENDOR=sles ; + elif test -f /etc/slackware-version ; then + VENDOR=slackware ; + elif test -f /etc/lunar.release ; then + VENDOR=lunar ; + elif test -f /etc/lsb-release ; then + VENDOR=ubuntu ; + elif test -f /etc/debian_version ; then + VENDOR=debian ; + elif test -f /etc/alpine-release ; then + VENDOR=alpine ; + elif test -f /bin/freebsd-version ; then + VENDOR=freebsd ; + else + VENDOR= ; + fi], + [ test "x${with_vendor}" != x],[ + VENDOR="$with_vendor" ], + [ VENDOR= ; ] + ) AC_MSG_RESULT([$VENDOR]) AC_SUBST(VENDOR) Modified: vendor-sys/openzfs/dist/etc/systemd/system-generators/zfs-mount-generator.in ============================================================================== --- vendor-sys/openzfs/dist/etc/systemd/system-generators/zfs-mount-generator.in Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/etc/systemd/system-generators/zfs-mount-generator.in Fri Sep 4 21:31:58 2020 (r365340) @@ -38,8 +38,6 @@ do_fail() { is_known() { query="$1" IFS=' ' - # protect against special characters - set -f for element in $2 ; do if [ "$query" = "$element" ] ; then return 0 @@ -54,8 +52,7 @@ is_known() { create_dependencies() { unitfile="$1" suffix="$2" - # protect against special characters - set -f + IFS=' ' for target in $3 ; do target_dir="${dest_norm}/${target}.${suffix}/" mkdir -p "${target_dir}" @@ -72,6 +69,7 @@ else do_fail "zero or three arguments required" fi +pools=$(zpool list -H -o name || true) # All needed information about each ZFS is available from # zfs list -H -t filesystem -o @@ -83,11 +81,11 @@ process_line() { # zfs list -H -o name,... # fields are tab separated IFS="$(printf '\t')" - # protect against special characters in, e.g., mountpoints - set -f # shellcheck disable=SC2086 set -- $1 + dataset="${1}" + pool="${dataset%%/*}" p_mountpoint="${2}" p_canmount="${3}" p_atime="${4}" @@ -120,6 +118,25 @@ process_line() { requiredby="" noauto="off" + # If the pool is already imported, zfs-import.target is not needed. This + # avoids a dependency loop on root-on-ZFS systems: + # systemd-random-seed.service After (via RequiresMountsFor) var-lib.mount + # After zfs-import.target After zfs-import-{cache,scan}.service After + # cryptsetup.service After systemd-random-seed.service. + # + # Pools are newline-separated and may contain spaces in their names. + # There is no better portable way to set IFS to just a newline. Using + # $(printf '\n') doesn't work because $(...) strips trailing newlines. + IFS=" +" + for p in $pools ; do + if [ "$p" = "$pool" ] ; then + after="" + wants="" + break + fi + done + if [ -n "${p_systemd_after}" ] && \ [ "${p_systemd_after}" != "-" ] ; then after="${p_systemd_after} ${after}" @@ -204,6 +221,10 @@ ${keymountdep} [Service] Type=oneshot RemainAfterExit=yes +# This avoids a dependency loop involving systemd-journald.socket if this +# dataset is a parent of the root filesystem. +StandardOutput=null +StandardError=null ExecStart=${keyloadcmd} ExecStop=${keyunloadcmd}" > "${dest_norm}/${keyloadunit}" fi @@ -438,6 +459,8 @@ Options=defaults${opts},zfsutil" > "${dest_norm}/${mou } for cachefile in "${FSLIST}/"* ; do + # Disable glob expansion to protect against special characters when parsing. + set -f # Sort cachefile's lines by canmount, "on" before "noauto" # and feed each line into process_line sort -t "$(printf '\t')" -k 3 -r "${cachefile}" | \ Modified: vendor-sys/openzfs/dist/etc/systemd/system/zfs-mount.service.in ============================================================================== --- vendor-sys/openzfs/dist/etc/systemd/system/zfs-mount.service.in Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/etc/systemd/system/zfs-mount.service.in Fri Sep 4 21:31:58 2020 (r365340) @@ -6,7 +6,6 @@ After=systemd-udev-settle.service After=zfs-import.target After=systemd-remount-fs.service Before=local-fs.target -Before=systemd-random-seed.service ConditionPathIsDirectory=/sys/module/zfs [Service] Modified: vendor-sys/openzfs/dist/include/libzfs.h ============================================================================== --- vendor-sys/openzfs/dist/include/libzfs.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/libzfs.h Fri Sep 4 21:31:58 2020 (r365340) @@ -642,7 +642,19 @@ extern int zfs_snapshot(libzfs_handle_t *, const char extern int zfs_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, nvlist_t *props); extern int zfs_rollback(zfs_handle_t *, zfs_handle_t *, boolean_t); -extern int zfs_rename(zfs_handle_t *, const char *, boolean_t, boolean_t); + +typedef struct renameflags { + /* recursive rename */ + int recursive : 1; + + /* don't unmount file systems */ + int nounmount : 1; + + /* force unmount file systems */ + int forceunmount : 1; +} renameflags_t; + +extern int zfs_rename(zfs_handle_t *, const char *, renameflags_t); typedef struct sendflags { /* Amount of extra information to print. */ Modified: vendor-sys/openzfs/dist/include/libzfs_impl.h ============================================================================== --- vendor-sys/openzfs/dist/include/libzfs_impl.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/libzfs_impl.h Fri Sep 4 21:31:58 2020 (r365340) @@ -166,6 +166,10 @@ int zprop_expand_list(libzfs_handle_t *hdl, zprop_list * changelist_gather() flag to force it to iterate on mounted datasets only */ #define CL_GATHER_ITER_MOUNTED 2 +/* + * Use this changelist_gather() flag to prevent unmounting of file systems. + */ +#define CL_GATHER_DONT_UNMOUNT 4 typedef struct prop_changelist prop_changelist_t; Modified: vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/cred.h ============================================================================== --- vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/cred.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/cred.h Fri Sep 4 21:31:58 2020 (r365340) @@ -93,7 +93,7 @@ extern cred_t *zone_kcred(void); extern gid_t crgetrgid(const cred_t *); extern gid_t crgetsgid(const cred_t *); -#define crgetzoneid(x) (0) +#define crgetzoneid(cr) ((cr)->cr_prison->pr_id) extern projid_t crgetprojid(const cred_t *); extern cred_t *crgetmapped(const cred_t *); Modified: vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/zone.h ============================================================================== --- vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/zone.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/freebsd/spl/sys/zone.h Fri Sep 4 21:31:58 2020 (r365340) @@ -29,6 +29,8 @@ #ifndef _OPENSOLARIS_SYS_ZONE_H_ #define _OPENSOLARIS_SYS_ZONE_H_ +#include + /* * Macros to help with zone visibility restrictions. */ @@ -36,12 +38,9 @@ #define GLOBAL_ZONEID 0 /* - * Is thread in the global zone? + * Is proc in the global zone? */ -#define INGLOBALZONE(p) in_globalzone((p)) - - -extern boolean_t in_globalzone(struct proc *); +#define INGLOBALZONE(proc) (!jailed((proc)->p_ucred)) /* * Attach the given dataset to the given jail. Modified: vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/Makefile.am ============================================================================== --- vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/Makefile.am Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/Makefile.am Fri Sep 4 21:31:58 2020 (r365340) @@ -6,7 +6,7 @@ KERNEL_H = \ zfs_ctldir.h \ zfs_dir.h \ zfs_ioctl_compat.h \ - zfs_vfsops.h \ + zfs_vfsops_os.h \ zfs_vnops.h \ zfs_znode_impl.h \ zpl.h Modified: vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h ============================================================================== --- vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h Fri Sep 4 21:31:58 2020 (r365340) @@ -168,7 +168,6 @@ extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs); extern int zfs_get_temporary_prop(struct dsl_dataset *ds, zfs_prop_t zfs_prop, uint64_t *val, char *setpoint); extern int zfs_busy(void); -extern void zfsvfs_update_fromname(const char *oldname, const char *newname); #ifdef __cplusplus } Modified: vendor-sys/openzfs/dist/include/os/linux/kernel/linux/page_compat.h ============================================================================== --- vendor-sys/openzfs/dist/include/os/linux/kernel/linux/page_compat.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/linux/kernel/linux/page_compat.h Fri Sep 4 21:31:58 2020 (r365340) @@ -35,16 +35,6 @@ #else #define nr_inactive_file_pages() global_zone_page_state(NR_INACTIVE_FILE) #endif -#if defined(ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B) -#define nr_slab_reclaimable_pages() \ - global_node_page_state(NR_SLAB_RECLAIMABLE_B) -#else -#if defined(ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE) -#define nr_slab_reclaimable_pages() global_node_page_state(NR_SLAB_RECLAIMABLE) -#else -#define nr_slab_reclaimable_pages() global_zone_page_state(NR_SLAB_RECLAIMABLE) -#endif -#endif #elif defined(ZFS_GLOBAL_NODE_PAGE_STATE) @@ -64,16 +54,6 @@ #else #define nr_inactive_file_pages() global_page_state(NR_INACTIVE_FILE) #endif -#if defined(ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B) -#define nr_slab_reclaimable_pages() \ - global_node_page_state(NR_SLAB_RECLAIMABLE_B) -#else -#if defined(ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE) -#define nr_slab_reclaimable_pages() global_node_page_state(NR_SLAB_RECLAIMABLE) -#else -#define nr_slab_reclaimable_pages() global_page_state(NR_SLAB_RECLAIMABLE) -#endif -#endif #else @@ -81,11 +61,6 @@ #define nr_file_pages() global_page_state(NR_FILE_PAGES) #define nr_inactive_anon_pages() global_page_state(NR_INACTIVE_ANON) #define nr_inactive_file_pages() global_page_state(NR_INACTIVE_FILE) -#ifdef ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B -#define nr_slab_reclaimable_pages() global_page_state(NR_SLAB_RECLAIMABLE_B) -#else -#define nr_slab_reclaimable_pages() global_page_state(NR_SLAB_RECLAIMABLE) -#endif /* ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B */ #endif /* ZFS_GLOBAL_ZONE_PAGE_STATE */ Modified: vendor-sys/openzfs/dist/include/os/linux/spl/sys/vmsystm.h ============================================================================== --- vendor-sys/openzfs/dist/include/os/linux/spl/sys/vmsystm.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/linux/spl/sys/vmsystm.h Fri Sep 4 21:31:58 2020 (r365340) @@ -47,17 +47,6 @@ #define membar_producer() smp_wmb() #define physmem zfs_totalram_pages -#ifdef ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B -#define freemem (nr_free_pages() + \ - global_page_state(NR_INACTIVE_FILE) + \ - global_page_state(NR_INACTIVE_ANON) + \ - global_page_state(NR_SLAB_RECLAIMABLE_B)) -#else -#define freemem (nr_free_pages() + \ - global_page_state(NR_INACTIVE_FILE) + \ - global_page_state(NR_INACTIVE_ANON) + \ - global_page_state(NR_SLAB_RECLAIMABLE)) -#endif /* ZFS_ENUM_NODE_STAT_ITEM_NR_SLAB_RECLAIMABLE_B */ #define xcopyin(from, to, size) copy_from_user(to, from, size) #define xcopyout(from, to, size) copy_to_user(to, from, size) Modified: vendor-sys/openzfs/dist/include/os/linux/zfs/sys/Makefile.am ============================================================================== --- vendor-sys/openzfs/dist/include/os/linux/zfs/sys/Makefile.am Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/os/linux/zfs/sys/Makefile.am Fri Sep 4 21:31:58 2020 (r365340) @@ -19,7 +19,7 @@ KERNEL_H = \ zfs_context_os.h \ zfs_ctldir.h \ zfs_dir.h \ - zfs_vfsops.h \ + zfs_vfsops_os.h \ zfs_vnops.h \ zfs_znode_impl.h \ zpl.h Modified: vendor-sys/openzfs/dist/include/sys/Makefile.am ============================================================================== --- vendor-sys/openzfs/dist/include/sys/Makefile.am Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/include/sys/Makefile.am Fri Sep 4 21:31:58 2020 (r365340) @@ -115,6 +115,7 @@ COMMON_H = \ zfs_sa.h \ zfs_stat.h \ zfs_sysfs.h \ + zfs_vfsops.h \ zfs_znode.h \ zil.h \ zil_impl.h \ Added: vendor-sys/openzfs/dist/include/sys/zfs_vfsops.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/include/sys/zfs_vfsops.h Fri Sep 4 21:31:58 2020 (r365340) @@ -0,0 +1,35 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Portions Copyright 2020 iXsystems, Inc. + */ + +#ifndef _SYS_ZFS_VFSOPS_H +#define _SYS_ZFS_VFSOPS_H + +#ifdef _KERNEL +#include +#endif + +extern void zfsvfs_update_fromname(const char *, const char *); + +#endif /* _SYS_ZFS_VFSOPS_H */ Modified: vendor-sys/openzfs/dist/lib/libspl/Makefile.am ============================================================================== --- vendor-sys/openzfs/dist/lib/libspl/Makefile.am Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libspl/Makefile.am Fri Sep 4 21:31:58 2020 (r365340) @@ -27,7 +27,6 @@ USER_C = \ strlcat.c \ strlcpy.c \ timestamp.c \ - zone.c \ include/sys/list.h \ include/sys/list_impl.h @@ -35,7 +34,8 @@ if BUILD_LINUX USER_C += \ os/linux/getexecname.c \ os/linux/gethostid.c \ - os/linux/getmntany.c + os/linux/getmntany.c \ + os/linux/zone.c endif if BUILD_FREEBSD @@ -43,7 +43,8 @@ USER_C += \ os/freebsd/getexecname.c \ os/freebsd/gethostid.c \ os/freebsd/getmntany.c \ - os/freebsd/mnttab.c + os/freebsd/mnttab.c \ + os/freebsd/zone.c endif libspl_la_SOURCES = \ Modified: vendor-sys/openzfs/dist/lib/libspl/include/limits.h ============================================================================== --- vendor-sys/openzfs/dist/lib/libspl/include/limits.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libspl/include/limits.h Fri Sep 4 21:31:58 2020 (r365340) @@ -25,16 +25,21 @@ */ #include_next +#include #ifndef _LIBSPL_LIMITS_H #define _LIBSPL_LIMITS_H +#ifndef DBL_DIG #define DBL_DIG 15 #define DBL_MAX 1.7976931348623157081452E+308 #define DBL_MIN 2.2250738585072013830903E-308 +#endif +#ifndef FLT_DIG #define FLT_DIG 6 #define FLT_MAX 3.4028234663852885981170E+38F #define FLT_MIN 1.1754943508222875079688E-38F +#endif #endif /* _LIBSPL_LIMITS_H */ Modified: vendor-sys/openzfs/dist/lib/libspl/include/zone.h ============================================================================== --- vendor-sys/openzfs/dist/lib/libspl/include/zone.h Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libspl/include/zone.h Fri Sep 4 21:31:58 2020 (r365340) @@ -26,25 +26,16 @@ #ifndef _LIBSPL_ZONE_H #define _LIBSPL_ZONE_H - - #include #include -#include #ifdef __cplusplus extern "C" { #endif #define GLOBAL_ZONEID 0 -#define GLOBAL_ZONEID_NAME "global" -/* - * Functions for mapping between id and name for active zones. - */ extern zoneid_t getzoneid(void); -extern zoneid_t getzoneidbyname(const char *); -extern ssize_t getzonenamebyid(zoneid_t, char *, size_t); #ifdef __cplusplus } Added: vendor-sys/openzfs/dist/lib/libspl/os/freebsd/zone.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/lib/libspl/os/freebsd/zone.c Fri Sep 4 21:31:58 2020 (r365340) @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2007 Pawel Jakub Dawidek + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include + +zoneid_t +getzoneid(void) +{ + size_t size; + int jailid; + + /* Information that we are in jail or not is enough for our needs. */ + size = sizeof (jailid); + if (sysctlbyname("security.jail.jailed", &jailid, &size, NULL, 0) == -1) + assert(!"No security.jail.jailed sysctl!"); + return ((zoneid_t)jailid); +} Modified: vendor-sys/openzfs/dist/lib/libspl/zone.c ============================================================================== --- vendor-sys/openzfs/dist/lib/libspl/zone.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libspl/zone.c Fri Sep 4 21:31:58 2020 (r365340) @@ -24,40 +24,9 @@ */ #include -#include -#include zoneid_t getzoneid() { return (GLOBAL_ZONEID); -} - -zoneid_t -getzoneidbyname(const char *name) -{ - if (name == NULL) - return (GLOBAL_ZONEID); - - if (strcmp(name, GLOBAL_ZONEID_NAME) == 0) - return (GLOBAL_ZONEID); - - return (EINVAL); -} - -ssize_t -getzonenamebyid(zoneid_t id, char *buf, size_t buflen) -{ - if (id != GLOBAL_ZONEID) - return (EINVAL); - - ssize_t ret = strlen(GLOBAL_ZONEID_NAME) + 1; - - if (buf == NULL || buflen == 0) - return (ret); - - strncpy(buf, GLOBAL_ZONEID_NAME, buflen); - buf[buflen - 1] = '\0'; - - return (ret); } Modified: vendor-sys/openzfs/dist/lib/libzfs/libzfs_changelist.c ============================================================================== --- vendor-sys/openzfs/dist/lib/libzfs/libzfs_changelist.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libzfs/libzfs_changelist.c Fri Sep 4 21:31:58 2020 (r365340) @@ -128,6 +128,8 @@ changelist_prefix(prop_changelist_t *clp) */ switch (clp->cl_prop) { case ZFS_PROP_MOUNTPOINT: + if (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) + break; if (zfs_unmount(cn->cn_handle, NULL, clp->cl_mflags) != 0) { ret = -1; @@ -184,7 +186,8 @@ changelist_postfix(prop_changelist_t *clp) if ((cn = uu_avl_last(clp->cl_tree)) == NULL) return (0); - if (clp->cl_prop == ZFS_PROP_MOUNTPOINT) + if (clp->cl_prop == ZFS_PROP_MOUNTPOINT && + !(clp->cl_gflags & CL_GATHER_DONT_UNMOUNT)) remove_mountpoint(cn->cn_handle); /* @@ -235,7 +238,8 @@ changelist_postfix(prop_changelist_t *clp) needs_key = (zfs_prop_get_int(cn->cn_handle, ZFS_PROP_KEYSTATUS) == ZFS_KEYSTATUS_UNAVAILABLE); - mounted = zfs_is_mounted(cn->cn_handle, NULL); + mounted = (clp->cl_gflags & CL_GATHER_DONT_UNMOUNT) || + zfs_is_mounted(cn->cn_handle, NULL); if (!mounted && !needs_key && (cn->cn_mounted || ((sharenfs || sharesmb || clp->cl_waslegacy) && Modified: vendor-sys/openzfs/dist/lib/libzfs/libzfs_dataset.c ============================================================================== --- vendor-sys/openzfs/dist/lib/libzfs/libzfs_dataset.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libzfs/libzfs_dataset.c Fri Sep 4 21:31:58 2020 (r365340) @@ -4370,14 +4370,14 @@ zfs_rollback(zfs_handle_t *zhp, zfs_handle_t *snap, bo * Renames the given dataset. */ int -zfs_rename(zfs_handle_t *zhp, const char *target, boolean_t recursive, - boolean_t force_unmount) +zfs_rename(zfs_handle_t *zhp, const char *target, renameflags_t flags) { int ret = 0; zfs_cmd_t zc = {"\0"}; char *delim; prop_changelist_t *cl = NULL; char parent[ZFS_MAX_DATASET_NAME_LEN]; + char property[ZFS_MAXPROPLEN]; libzfs_handle_t *hdl = zhp->zfs_hdl; char errbuf[1024]; @@ -4429,7 +4429,7 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool if (!zfs_validate_name(hdl, target, zhp->zfs_type, B_TRUE)) return (zfs_error(hdl, EZFS_INVALIDNAME, errbuf)); } else { - if (recursive) { + if (flags.recursive) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "recursive rename must be a snapshot")); return (zfs_error(hdl, EZFS_BADTYPE, errbuf)); @@ -4470,8 +4470,19 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool return (zfs_error(hdl, EZFS_ZONED, errbuf)); } - if (recursive) { - zfs_handle_t *zhrp; + /* + * Avoid unmounting file systems with mountpoint property set to + * 'legacy' or 'none' even if -u option is not given. + */ + if (zhp->zfs_type == ZFS_TYPE_FILESYSTEM && + !flags.recursive && !flags.nounmount && + zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, property, + sizeof (property), NULL, NULL, 0, B_FALSE) == 0 && + (strcmp(property, "legacy") == 0 || + strcmp(property, "none") == 0)) { + flags.nounmount = B_TRUE; + } + if (flags.recursive) { char *parentname = zfs_strdup(zhp->zfs_hdl, zhp->zfs_name); if (parentname == NULL) { ret = -1; @@ -4479,7 +4490,8 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool } delim = strchr(parentname, '@'); *delim = '\0'; - zhrp = zfs_open(zhp->zfs_hdl, parentname, ZFS_TYPE_DATASET); + zfs_handle_t *zhrp = zfs_open(zhp->zfs_hdl, parentname, + ZFS_TYPE_DATASET); free(parentname); if (zhrp == NULL) { ret = -1; @@ -4488,8 +4500,9 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool zfs_close(zhrp); } else if (zhp->zfs_type != ZFS_TYPE_SNAPSHOT) { if ((cl = changelist_gather(zhp, ZFS_PROP_NAME, + flags.nounmount ? CL_GATHER_DONT_UNMOUNT : CL_GATHER_ITER_MOUNTED, - force_unmount ? MS_FORCE : 0)) == NULL) + flags.forceunmount ? MS_FORCE : 0)) == NULL) return (-1); if (changelist_haszonedchild(cl)) { @@ -4513,7 +4526,8 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); (void) strlcpy(zc.zc_value, target, sizeof (zc.zc_value)); - zc.zc_cookie = recursive; + zc.zc_cookie = !!flags.recursive; + zc.zc_cookie |= (!!flags.nounmount) << 1; if ((ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_RENAME, &zc)) != 0) { /* @@ -4523,7 +4537,7 @@ zfs_rename(zfs_handle_t *zhp, const char *target, bool (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN, "cannot rename '%s'"), zc.zc_name); - if (recursive && errno == EEXIST) { + if (flags.recursive && errno == EEXIST) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "a child dataset already has a snapshot " "with the new name")); Modified: vendor-sys/openzfs/dist/lib/libzpool/kernel.c ============================================================================== --- vendor-sys/openzfs/dist/lib/libzpool/kernel.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/lib/libzpool/kernel.c Fri Sep 4 21:31:58 2020 (r365340) @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -1407,4 +1408,9 @@ void zfs_file_put(int fd) { abort(); +} + +void +zfsvfs_update_fromname(const char *oldname, const char *newname) +{ } Modified: vendor-sys/openzfs/dist/man/man8/zfs-rename.8 ============================================================================== --- vendor-sys/openzfs/dist/man/man8/zfs-rename.8 Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/man/man8/zfs-rename.8 Fri Sep 4 21:31:58 2020 (r365340) @@ -44,9 +44,16 @@ .Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot .Nm .Cm rename -.Op Fl fp +.Fl p +.Op Fl f .Ar filesystem Ns | Ns Ar volume .Ar filesystem Ns | Ns Ar volume +.Nm +.Cm rename +.Fl u +.Op Fl f +.Ar filesystem +.Ar filesystem .Sh DESCRIPTION .Bl -tag -width "" .It Xo @@ -59,10 +66,19 @@ .It Xo .Nm .Cm rename -.Op Fl fp +.Fl p +.Op Fl f .Ar filesystem Ns | Ns Ar volume .Ar filesystem Ns | Ns Ar volume .Xc +.It Xo +.Nm +.Cm rename +.Fl u +.Op Fl f +.Ar filesystem +.Ar filesystem +.Xc Renames the given dataset. The new target can be located anywhere in the ZFS hierarchy, with the exception of snapshots. @@ -73,12 +89,24 @@ Renamed file systems can inherit new mount points, in unmounted and remounted at the new mount point. .Bl -tag -width "-a" .It Fl f -Force unmount any filesystems that need to be unmounted in the process. +Force unmount any file systems that need to be unmounted in the process. +This flag has no effect if used together with the +.Fl u +flag. .It Fl p Creates all the nonexistent parent datasets. Datasets created in this manner are automatically mounted according to the .Sy mountpoint property inherited from their parent. +.It Fl u +Do not remount file systems during rename. +If a file system's +.Sy mountpoint +property is set to +.Sy legacy +or +.Sy none , +the file system is not unmounted even if this option is not given. .El .It Xo .Nm Modified: vendor-sys/openzfs/dist/module/avl/avl.c ============================================================================== --- vendor-sys/openzfs/dist/module/avl/avl.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/module/avl/avl.c Fri Sep 4 21:31:58 2020 (r365340) @@ -96,6 +96,9 @@ * which each have their own compilation environments and subsequent * requirements. Each of these environments must be considered when adding * dependencies from avl.c. + * + * Link to Illumos.org for more information on avl function: + * [1] https://illumos.org/man/9f/avl */ #include Modified: vendor-sys/openzfs/dist/module/nvpair/nvpair.c ============================================================================== --- vendor-sys/openzfs/dist/module/nvpair/nvpair.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/module/nvpair/nvpair.c Fri Sep 4 21:31:58 2020 (r365340) @@ -25,6 +25,15 @@ * Copyright 2018 RackTop Systems. */ +/* + * Links to Illumos.org for more information on Interface Libraries: + * [1] https://illumos.org/man/3lib/libnvpair + * [2] https://illumos.org/man/3nvpair/nvlist_alloc + * [3] https://illumos.org/man/9f/nvlist_alloc + * [4] https://illumos.org/man/9f/nvlist_next_nvpair + * [5] https://illumos.org/man/9f/nvpair_value_byte + */ + #include #include #include Modified: vendor-sys/openzfs/dist/module/os/freebsd/spl/spl_kstat.c ============================================================================== --- vendor-sys/openzfs/dist/module/os/freebsd/spl/spl_kstat.c Fri Sep 4 21:21:23 2020 (r365339) +++ vendor-sys/openzfs/dist/module/os/freebsd/spl/spl_kstat.c Fri Sep 4 21:31:58 2020 (r365340) @@ -22,6 +22,10 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * Links to Illumos.org for more information on kstat function: + * [1] https://illumos.org/man/1M/kstat + * [2] https://illumos.org/man/9f/kstat_create */ #include @@ -34,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include static MALLOC_DEFINE(M_KSTAT, "kstat_data", "Kernel statistics"); @@ -61,6 +66,156 @@ kstat_default_update(kstat_t *ksp, int rw) return (0); } +static int +kstat_resize_raw(kstat_t *ksp) +{ + if (ksp->ks_raw_bufsize == KSTAT_RAW_MAX) + return (ENOMEM); + + free(ksp->ks_raw_buf, M_TEMP); + ksp->ks_raw_bufsize = MIN(ksp->ks_raw_bufsize * 2, KSTAT_RAW_MAX); + ksp->ks_raw_buf = malloc(ksp->ks_raw_bufsize, M_TEMP, M_WAITOK); + + return (0); +} + +static void * +kstat_raw_default_addr(kstat_t *ksp, loff_t n) +{ + if (n == 0) + return (ksp->ks_data); + return (NULL); +} + +static int +kstat_sysctl(SYSCTL_HANDLER_ARGS) +{ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@freebsd.org Fri Sep 4 21:34:48 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 54C073D0634; Fri, 4 Sep 2020 21:34:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BjrYN1ZDQz4dJX; Fri, 4 Sep 2020 21:34:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0079412ED8; Fri, 4 Sep 2020 21:34:48 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 084LYlWk018820; Fri, 4 Sep 2020 21:34:47 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 084LYl8i018819; Fri, 4 Sep 2020 21:34:47 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <202009042134.084LYl8i018819@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 Sep 2020 21:34:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365341 - vendor-sys/openzfs/2.0-rc1-gfd20a8 X-SVN-Group: vendor-sys X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: vendor-sys/openzfs/2.0-rc1-gfd20a8 X-SVN-Commit-Revision: 365341 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2020 21:34:48 -0000 Author: mmacy Date: Fri Sep 4 21:34:47 2020 New Revision: 365341 URL: https://svnweb.freebsd.org/changeset/base/365341 Log: snapshot openzfs 2.0-rc1 update Added: vendor-sys/openzfs/2.0-rc1-gfd20a8/ - copied from r365340, vendor-sys/openzfs/dist/ From owner-svn-src-vendor@freebsd.org Fri Sep 4 21:48:37 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8CBCC3D0D70; Fri, 4 Sep 2020 21:48:37 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BjrsK3VBjz4f6Z; Fri, 4 Sep 2020 21:48:37 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 568C013664; Fri, 4 Sep 2020 21:48:37 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 084LmbvN025044; Fri, 4 Sep 2020 21:48:37 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 084Lmab1025042; Fri, 4 Sep 2020 21:48:36 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <202009042148.084Lmab1025042@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 Sep 2020 21:48:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365343 - in vendor-sys/openzfs/dist/include/os: freebsd/zfs/sys linux/zfs/sys X-SVN-Group: vendor-sys X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in vendor-sys/openzfs/dist/include/os: freebsd/zfs/sys linux/zfs/sys X-SVN-Commit-Revision: 365343 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2020 21:48:37 -0000 Author: mmacy Date: Fri Sep 4 21:48:36 2020 New Revision: 365343 URL: https://svnweb.freebsd.org/changeset/base/365343 Log: Add missed move Added: vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops_os.h - copied unchanged from r365342, vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops_os.h - copied unchanged from r365342, vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops.h Deleted: vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops.h Copied: vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops_os.h (from r365342, vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops_os.h Fri Sep 4 21:48:36 2020 (r365343, copy of r365342, vendor-sys/openzfs/dist/include/os/freebsd/zfs/sys/zfs_vfsops.h) @@ -0,0 +1,176 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011 Pawel Jakub Dawidek . + * All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_VFSOPS_H +#define _SYS_FS_ZFS_VFSOPS_H + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct zfsvfs zfsvfs_t; +struct znode; + +struct zfsvfs { + vfs_t *z_vfs; /* generic fs struct */ + zfsvfs_t *z_parent; /* parent fs */ + objset_t *z_os; /* objset reference */ + uint64_t z_flags; /* super_block flags */ + uint64_t z_root; /* id of root znode */ + uint64_t z_unlinkedobj; /* id of unlinked zapobj */ + uint64_t z_max_blksz; /* maximum block size for files */ + uint64_t z_fuid_obj; /* fuid table object number */ + uint64_t z_fuid_size; /* fuid table size */ + avl_tree_t z_fuid_idx; /* fuid tree keyed by index */ + avl_tree_t z_fuid_domain; /* fuid tree keyed by domain */ + krwlock_t z_fuid_lock; /* fuid lock */ + boolean_t z_fuid_loaded; /* fuid tables are loaded */ + boolean_t z_fuid_dirty; /* need to sync fuid table ? */ + struct zfs_fuid_info *z_fuid_replay; /* fuid info for replay */ + zilog_t *z_log; /* intent log pointer */ + uint_t z_acl_mode; /* acl chmod/mode behavior */ + uint_t z_acl_inherit; /* acl inheritance behavior */ + zfs_case_t z_case; /* case-sense */ + boolean_t z_utf8; /* utf8-only */ + int z_norm; /* normalization flags */ + boolean_t z_atime; /* enable atimes mount option */ + boolean_t z_unmounted; /* unmounted */ + rrmlock_t z_teardown_lock; + krwlock_t z_teardown_inactive_lock; + list_t z_all_znodes; /* all vnodes in the fs */ + uint64_t z_nr_znodes; /* number of znodes in the fs */ + kmutex_t z_znodes_lock; /* lock for z_all_znodes */ + struct zfsctl_root *z_ctldir; /* .zfs directory pointer */ + boolean_t z_show_ctldir; /* expose .zfs in the root dir */ + boolean_t z_issnap; /* true if this is a snapshot */ + boolean_t z_vscan; /* virus scan on/off */ + boolean_t z_use_fuids; /* version allows fuids */ + boolean_t z_replay; /* set during ZIL replay */ + boolean_t z_use_sa; /* version allow system attributes */ + boolean_t z_xattr_sa; /* allow xattrs to be stores as SA */ + boolean_t z_use_namecache; /* make use of FreeBSD name cache */ + uint8_t z_xattr; /* xattr type in use */ + uint64_t z_version; /* ZPL version */ + uint64_t z_shares_dir; /* hidden shares dir */ + dataset_kstats_t z_kstat; /* fs kstats */ + kmutex_t z_lock; + uint64_t z_userquota_obj; + uint64_t z_groupquota_obj; + uint64_t z_userobjquota_obj; + uint64_t z_groupobjquota_obj; + uint64_t z_projectquota_obj; + uint64_t z_projectobjquota_obj; + uint64_t z_replay_eof; /* New end of file - replay only */ + sa_attr_type_t *z_attr_table; /* SA attr mapping->id */ +#define ZFS_OBJ_MTX_SZ 64 + kmutex_t z_hold_mtx[ZFS_OBJ_MTX_SZ]; /* znode hold locks */ + struct task z_unlinked_drain_task; +}; + +#define ZSB_XATTR 0x0001 /* Enable user xattrs */ +/* + * Normal filesystems (those not under .zfs/snapshot) have a total + * file ID size limited to 12 bytes (including the length field) due to + * NFSv2 protocol's limitation of 32 bytes for a filehandle. For historical + * reasons, this same limit is being imposed by the Solaris NFSv3 implementation + * (although the NFSv3 protocol actually permits a maximum of 64 bytes). It + * is not possible to expand beyond 12 bytes without abandoning support + * of NFSv2. + * + * For normal filesystems, we partition up the available space as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * + * We reserve only 48 bits for the object number, as this is the limit + * currently defined and imposed by the DMU. + */ +typedef struct zfid_short { + uint16_t zf_len; + uint8_t zf_object[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_gen[4]; /* gen[i] = gen >> (8 * i) */ +} zfid_short_t; + +/* + * Filesystems under .zfs/snapshot have a total file ID size of 22[*] bytes + * (including the length field). This makes files under .zfs/snapshot + * accessible by NFSv3 and NFSv4, but not NFSv2. + * + * For files under .zfs/snapshot, we partition up the available space + * as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * 6 bytes objset id (48 bits) + * 4 bytes[**] currently just zero (32 bits) + * + * We reserve only 48 bits for the object number and objset id, as these are + * the limits currently defined and imposed by the DMU. + * + * [*] 20 bytes on FreeBSD to fit into the size of struct fid. + * [**] 2 bytes on FreeBSD for the above reason. + */ +typedef struct zfid_long { + zfid_short_t z_fid; + uint8_t zf_setid[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_setgen[2]; /* gen[i] = gen >> (8 * i) */ +} zfid_long_t; + +#define SHORT_FID_LEN (sizeof (zfid_short_t) - sizeof (uint16_t)) +#define LONG_FID_LEN (sizeof (zfid_long_t) - sizeof (uint16_t)) + +extern uint_t zfs_fsyncer_key; +extern int zfs_super_owner; + +extern void zfs_init(void); +extern void zfs_fini(void); + +extern int zfs_suspend_fs(zfsvfs_t *zfsvfs); +extern int zfs_resume_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds); +extern int zfs_end_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds); +extern int zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers); +extern int zfsvfs_create(const char *name, boolean_t readonly, zfsvfs_t **zfvp); +extern int zfsvfs_create_impl(zfsvfs_t **zfvp, zfsvfs_t *zfsvfs, objset_t *os); +extern void zfsvfs_free(zfsvfs_t *zfsvfs); +extern int zfs_check_global_label(const char *dsname, const char *hexsl); +extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs); +extern int zfs_get_temporary_prop(struct dsl_dataset *ds, zfs_prop_t zfs_prop, + uint64_t *val, char *setpoint); +extern int zfs_busy(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_VFSOPS_H */ Copied: vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops_os.h (from r365342, vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops_os.h Fri Sep 4 21:48:36 2020 (r365343, copy of r365342, vendor-sys/openzfs/dist/include/os/linux/zfs/sys/zfs_vfsops.h) @@ -0,0 +1,227 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2018 by Delphix. All rights reserved. + */ + +#ifndef _SYS_FS_ZFS_VFSOPS_H +#define _SYS_FS_ZFS_VFSOPS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct zfsvfs zfsvfs_t; +struct znode; + +/* + * This structure emulates the vfs_t from other platforms. It's purpose + * is to facilitate the handling of mount options and minimize structural + * differences between the platforms. + */ +typedef struct vfs { + struct zfsvfs *vfs_data; + char *vfs_mntpoint; /* Primary mount point */ + uint64_t vfs_xattr; + boolean_t vfs_readonly; + boolean_t vfs_do_readonly; + boolean_t vfs_setuid; + boolean_t vfs_do_setuid; + boolean_t vfs_exec; + boolean_t vfs_do_exec; + boolean_t vfs_devices; + boolean_t vfs_do_devices; + boolean_t vfs_do_xattr; + boolean_t vfs_atime; + boolean_t vfs_do_atime; + boolean_t vfs_relatime; + boolean_t vfs_do_relatime; + boolean_t vfs_nbmand; + boolean_t vfs_do_nbmand; +} vfs_t; + +typedef struct zfs_mnt { + const char *mnt_osname; /* Objset name */ + char *mnt_data; /* Raw mount options */ +} zfs_mnt_t; + +struct zfsvfs { + vfs_t *z_vfs; /* generic fs struct */ + struct super_block *z_sb; /* generic super_block */ + struct zfsvfs *z_parent; /* parent fs */ + objset_t *z_os; /* objset reference */ + uint64_t z_flags; /* super_block flags */ + uint64_t z_root; /* id of root znode */ + uint64_t z_unlinkedobj; /* id of unlinked zapobj */ + uint64_t z_max_blksz; /* maximum block size for files */ + uint64_t z_fuid_obj; /* fuid table object number */ + uint64_t z_fuid_size; /* fuid table size */ + avl_tree_t z_fuid_idx; /* fuid tree keyed by index */ + avl_tree_t z_fuid_domain; /* fuid tree keyed by domain */ + krwlock_t z_fuid_lock; /* fuid lock */ + boolean_t z_fuid_loaded; /* fuid tables are loaded */ + boolean_t z_fuid_dirty; /* need to sync fuid table ? */ + struct zfs_fuid_info *z_fuid_replay; /* fuid info for replay */ + zilog_t *z_log; /* intent log pointer */ + uint_t z_acl_mode; /* acl chmod/mode behavior */ + uint_t z_acl_inherit; /* acl inheritance behavior */ + uint_t z_acl_type; /* type of ACL usable on this FS */ + zfs_case_t z_case; /* case-sense */ + boolean_t z_utf8; /* utf8-only */ + int z_norm; /* normalization flags */ + boolean_t z_relatime; /* enable relatime mount option */ + boolean_t z_unmounted; /* unmounted */ + rrmlock_t z_teardown_lock; + krwlock_t z_teardown_inactive_lock; + list_t z_all_znodes; /* all znodes in the fs */ + uint64_t z_nr_znodes; /* number of znodes in the fs */ + unsigned long z_rollback_time; /* last online rollback time */ + unsigned long z_snap_defer_time; /* last snapshot unmount deferral */ + kmutex_t z_znodes_lock; /* lock for z_all_znodes */ + arc_prune_t *z_arc_prune; /* called by ARC to prune caches */ + struct inode *z_ctldir; /* .zfs directory inode */ + boolean_t z_show_ctldir; /* expose .zfs in the root dir */ + boolean_t z_issnap; /* true if this is a snapshot */ + boolean_t z_vscan; /* virus scan on/off */ + boolean_t z_use_fuids; /* version allows fuids */ + boolean_t z_replay; /* set during ZIL replay */ + boolean_t z_use_sa; /* version allow system attributes */ + boolean_t z_xattr_sa; /* allow xattrs to be stores as SA */ + boolean_t z_draining; /* is true when drain is active */ + boolean_t z_drain_cancel; /* signal the unlinked drain to stop */ + uint64_t z_version; /* ZPL version */ + uint64_t z_shares_dir; /* hidden shares dir */ + dataset_kstats_t z_kstat; /* fs kstats */ + kmutex_t z_lock; + uint64_t z_userquota_obj; + uint64_t z_groupquota_obj; + uint64_t z_userobjquota_obj; + uint64_t z_groupobjquota_obj; + uint64_t z_projectquota_obj; + uint64_t z_projectobjquota_obj; + uint64_t z_replay_eof; /* New end of file - replay only */ + sa_attr_type_t *z_attr_table; /* SA attr mapping->id */ + uint64_t z_hold_size; /* znode hold array size */ + avl_tree_t *z_hold_trees; /* znode hold trees */ + kmutex_t *z_hold_locks; /* znode hold locks */ + taskqid_t z_drain_task; /* task id for the unlink drain task */ +}; + +#define ZSB_XATTR 0x0001 /* Enable user xattrs */ + +/* + * Allow a maximum number of links. While ZFS does not internally limit + * this the inode->i_nlink member is defined as an unsigned int. To be + * safe we use 2^31-1 as the limit. + */ +#define ZFS_LINK_MAX ((1U << 31) - 1U) + +/* + * Normal filesystems (those not under .zfs/snapshot) have a total + * file ID size limited to 12 bytes (including the length field) due to + * NFSv2 protocol's limitation of 32 bytes for a filehandle. For historical + * reasons, this same limit is being imposed by the Solaris NFSv3 implementation + * (although the NFSv3 protocol actually permits a maximum of 64 bytes). It + * is not possible to expand beyond 12 bytes without abandoning support + * of NFSv2. + * + * For normal filesystems, we partition up the available space as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * + * We reserve only 48 bits for the object number, as this is the limit + * currently defined and imposed by the DMU. + */ +typedef struct zfid_short { + uint16_t zf_len; + uint8_t zf_object[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_gen[4]; /* gen[i] = gen >> (8 * i) */ +} zfid_short_t; + +/* + * Filesystems under .zfs/snapshot have a total file ID size of 22 bytes + * (including the length field). This makes files under .zfs/snapshot + * accessible by NFSv3 and NFSv4, but not NFSv2. + * + * For files under .zfs/snapshot, we partition up the available space + * as follows: + * 2 bytes fid length (required) + * 6 bytes object number (48 bits) + * 4 bytes generation number (32 bits) + * 6 bytes objset id (48 bits) + * 4 bytes currently just zero (32 bits) + * + * We reserve only 48 bits for the object number and objset id, as these are + * the limits currently defined and imposed by the DMU. + */ +typedef struct zfid_long { + zfid_short_t z_fid; + uint8_t zf_setid[6]; /* obj[i] = obj >> (8 * i) */ + uint8_t zf_setgen[4]; /* gen[i] = gen >> (8 * i) */ +} zfid_long_t; + +#define SHORT_FID_LEN (sizeof (zfid_short_t) - sizeof (uint16_t)) +#define LONG_FID_LEN (sizeof (zfid_long_t) - sizeof (uint16_t)) + +extern void zfs_init(void); +extern void zfs_fini(void); + +extern int zfs_suspend_fs(zfsvfs_t *zfsvfs); +extern int zfs_resume_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds); +extern int zfs_end_fs(zfsvfs_t *zfsvfs, struct dsl_dataset *ds); +extern void zfs_exit_fs(zfsvfs_t *zfsvfs); +extern int zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers); +extern int zfsvfs_create(const char *name, boolean_t readony, zfsvfs_t **zfvp); +extern int zfsvfs_create_impl(zfsvfs_t **zfvp, zfsvfs_t *zfsvfs, objset_t *os); +extern void zfsvfs_free(zfsvfs_t *zfsvfs); +extern int zfs_check_global_label(const char *dsname, const char *hexsl); + +extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs); +extern int zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent); +extern void zfs_preumount(struct super_block *sb); +extern int zfs_umount(struct super_block *sb); +extern int zfs_remount(struct super_block *sb, int *flags, zfs_mnt_t *zm); +extern int zfs_statvfs(struct inode *ip, struct kstatfs *statp); +extern int zfs_vget(struct super_block *sb, struct inode **ipp, fid_t *fidp); +extern int zfs_prune(struct super_block *sb, unsigned long nr_to_scan, + int *objects); +extern int zfs_get_temporary_prop(dsl_dataset_t *ds, zfs_prop_t zfs_prop, + uint64_t *val, char *setpoint); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_FS_ZFS_VFSOPS_H */ From owner-svn-src-vendor@freebsd.org Fri Sep 4 21:55:35 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D040E3D129E; Fri, 4 Sep 2020 21:55:35 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Bjs1M5DS2z4fy8; Fri, 4 Sep 2020 21:55:35 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 98108132F3; Fri, 4 Sep 2020 21:55:35 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 084LtZKA031047; Fri, 4 Sep 2020 21:55:35 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 084LtZBF031046; Fri, 4 Sep 2020 21:55:35 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <202009042155.084LtZBF031046@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 Sep 2020 21:55:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365345 - in vendor-sys/openzfs/dist/lib/libspl: . os/linux X-SVN-Group: vendor-sys X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in vendor-sys/openzfs/dist/lib/libspl: . os/linux X-SVN-Commit-Revision: 365345 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2020 21:55:35 -0000 Author: mmacy Date: Fri Sep 4 21:55:35 2020 New Revision: 365345 URL: https://svnweb.freebsd.org/changeset/base/365345 Log: Another missed move Added: vendor-sys/openzfs/dist/lib/libspl/os/linux/zone.c - copied unchanged from r365344, vendor-sys/openzfs/dist/lib/libspl/zone.c Deleted: vendor-sys/openzfs/dist/lib/libspl/zone.c Copied: vendor-sys/openzfs/dist/lib/libspl/os/linux/zone.c (from r365344, vendor-sys/openzfs/dist/lib/libspl/zone.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/lib/libspl/os/linux/zone.c Fri Sep 4 21:55:35 2020 (r365345, copy of r365344, vendor-sys/openzfs/dist/lib/libspl/zone.c) @@ -0,0 +1,32 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2006 Ricardo Correia. All rights reserved. + * Use is subject to license terms. + */ + +#include + +zoneid_t +getzoneid() +{ + return (GLOBAL_ZONEID); +} From owner-svn-src-vendor@freebsd.org Fri Sep 4 22:11:59 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 47F773D1880; Fri, 4 Sep 2020 22:11:59 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BjsNH1Wygz4gBN; Fri, 4 Sep 2020 22:11:59 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1796013631; Fri, 4 Sep 2020 22:11:59 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 084MBw75040178; Fri, 4 Sep 2020 22:11:58 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 084MBwUu040177; Fri, 4 Sep 2020 22:11:58 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <202009042211.084MBwUu040177@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 Sep 2020 22:11:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365346 - in vendor-sys/openzfs/dist/module: os/freebsd/zfs os/linux/zfs zfs X-SVN-Group: vendor-sys X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in vendor-sys/openzfs/dist/module: os/freebsd/zfs os/linux/zfs zfs X-SVN-Commit-Revision: 365346 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Sep 2020 22:11:59 -0000 Author: mmacy Date: Fri Sep 4 22:11:58 2020 New Revision: 365346 URL: https://svnweb.freebsd.org/changeset/base/365346 Log: make spa_stats.c common Added: vendor-sys/openzfs/dist/module/zfs/spa_stats.c - copied unchanged from r365345, vendor-sys/openzfs/dist/module/os/linux/zfs/spa_stats.c Deleted: vendor-sys/openzfs/dist/module/os/freebsd/zfs/spa_stats.c vendor-sys/openzfs/dist/module/os/linux/zfs/spa_stats.c Copied: vendor-sys/openzfs/dist/module/zfs/spa_stats.c (from r365345, vendor-sys/openzfs/dist/module/os/linux/zfs/spa_stats.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor-sys/openzfs/dist/module/zfs/spa_stats.c Fri Sep 4 22:11:58 2020 (r365346, copy of r365345, vendor-sys/openzfs/dist/module/os/linux/zfs/spa_stats.c) @@ -0,0 +1,1043 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +#include +#include +#include +#include +#include + +/* + * Keeps stats on last N reads per spa_t, disabled by default. + */ +int zfs_read_history = 0; + +/* + * Include cache hits in history, disabled by default. + */ +int zfs_read_history_hits = 0; + +/* + * Keeps stats on the last 100 txgs by default. + */ +int zfs_txg_history = 100; + +/* + * Keeps stats on the last N MMP updates, disabled by default. + */ +int zfs_multihost_history = 0; + +/* + * ========================================================================== + * SPA Read History Routines + * ========================================================================== + */ + +/* + * Read statistics - Information exported regarding each arc_read call + */ +typedef struct spa_read_history { + hrtime_t start; /* time read completed */ + uint64_t objset; /* read from this objset */ + uint64_t object; /* read of this object number */ + uint64_t level; /* block's indirection level */ + uint64_t blkid; /* read of this block id */ + char origin[24]; /* read originated from here */ + uint32_t aflags; /* ARC flags (cached, prefetch, etc.) */ + pid_t pid; /* PID of task doing read */ + char comm[16]; /* process name of task doing read */ + procfs_list_node_t srh_node; +} spa_read_history_t; + +static int +spa_read_history_show_header(struct seq_file *f) +{ + seq_printf(f, "%-8s %-16s %-8s %-8s %-8s %-8s %-8s " + "%-24s %-8s %-16s\n", "UID", "start", "objset", "object", + "level", "blkid", "aflags", "origin", "pid", "process"); + + return (0); +} + +static int +spa_read_history_show(struct seq_file *f, void *data) +{ + spa_read_history_t *srh = (spa_read_history_t *)data; + + seq_printf(f, "%-8llu %-16llu 0x%-6llx " + "%-8lli %-8lli %-8lli 0x%-6x %-24s %-8i %-16s\n", + (u_longlong_t)srh->srh_node.pln_id, srh->start, + (longlong_t)srh->objset, (longlong_t)srh->object, + (longlong_t)srh->level, (longlong_t)srh->blkid, + srh->aflags, srh->origin, srh->pid, srh->comm); + + return (0); +} + +/* Remove oldest elements from list until there are no more than 'size' left */ +static void +spa_read_history_truncate(spa_history_list_t *shl, unsigned int size) +{ + spa_read_history_t *srh; + while (shl->size > size) { + srh = list_remove_head(&shl->procfs_list.pl_list); + ASSERT3P(srh, !=, NULL); + kmem_free(srh, sizeof (spa_read_history_t)); + shl->size--; + } + + if (size == 0) + ASSERT(list_is_empty(&shl->procfs_list.pl_list)); +} + +static int +spa_read_history_clear(procfs_list_t *procfs_list) +{ + spa_history_list_t *shl = procfs_list->pl_private; + mutex_enter(&procfs_list->pl_lock); + spa_read_history_truncate(shl, 0); + mutex_exit(&procfs_list->pl_lock); + return (0); +} + +static void +spa_read_history_init(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.read_history; + char *module; + + shl->size = 0; + + module = kmem_asprintf("zfs/%s", spa_name(spa)); + + shl->procfs_list.pl_private = shl; + procfs_list_install(module, + "reads", + 0600, + &shl->procfs_list, + spa_read_history_show, + spa_read_history_show_header, + spa_read_history_clear, + offsetof(spa_read_history_t, srh_node)); + + kmem_strfree(module); +} + +static void +spa_read_history_destroy(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.read_history; + procfs_list_uninstall(&shl->procfs_list); + spa_read_history_truncate(shl, 0); + procfs_list_destroy(&shl->procfs_list); +} + +void +spa_read_history_add(spa_t *spa, const zbookmark_phys_t *zb, uint32_t aflags) +{ + spa_history_list_t *shl = &spa->spa_stats.read_history; + spa_read_history_t *srh; + + ASSERT3P(spa, !=, NULL); + ASSERT3P(zb, !=, NULL); + + if (zfs_read_history == 0 && shl->size == 0) + return; + + if (zfs_read_history_hits == 0 && (aflags & ARC_FLAG_CACHED)) + return; + + srh = kmem_zalloc(sizeof (spa_read_history_t), KM_SLEEP); + strlcpy(srh->comm, getcomm(), sizeof (srh->comm)); + srh->start = gethrtime(); + srh->objset = zb->zb_objset; + srh->object = zb->zb_object; + srh->level = zb->zb_level; + srh->blkid = zb->zb_blkid; + srh->aflags = aflags; + srh->pid = getpid(); + + mutex_enter(&shl->procfs_list.pl_lock); + + procfs_list_add(&shl->procfs_list, srh); + shl->size++; + + spa_read_history_truncate(shl, zfs_read_history); + + mutex_exit(&shl->procfs_list.pl_lock); +} + +/* + * ========================================================================== + * SPA TXG History Routines + * ========================================================================== + */ + +/* + * Txg statistics - Information exported regarding each txg sync + */ + +typedef struct spa_txg_history { + uint64_t txg; /* txg id */ + txg_state_t state; /* active txg state */ + uint64_t nread; /* number of bytes read */ + uint64_t nwritten; /* number of bytes written */ + uint64_t reads; /* number of read operations */ + uint64_t writes; /* number of write operations */ + uint64_t ndirty; /* number of dirty bytes */ + hrtime_t times[TXG_STATE_COMMITTED]; /* completion times */ + procfs_list_node_t sth_node; +} spa_txg_history_t; + +static int +spa_txg_history_show_header(struct seq_file *f) +{ + seq_printf(f, "%-8s %-16s %-5s %-12s %-12s %-12s " + "%-8s %-8s %-12s %-12s %-12s %-12s\n", "txg", "birth", "state", + "ndirty", "nread", "nwritten", "reads", "writes", + "otime", "qtime", "wtime", "stime"); + return (0); +} + +static int +spa_txg_history_show(struct seq_file *f, void *data) +{ + spa_txg_history_t *sth = (spa_txg_history_t *)data; + uint64_t open = 0, quiesce = 0, wait = 0, sync = 0; + char state; + + switch (sth->state) { + case TXG_STATE_BIRTH: state = 'B'; break; + case TXG_STATE_OPEN: state = 'O'; break; + case TXG_STATE_QUIESCED: state = 'Q'; break; + case TXG_STATE_WAIT_FOR_SYNC: state = 'W'; break; + case TXG_STATE_SYNCED: state = 'S'; break; + case TXG_STATE_COMMITTED: state = 'C'; break; + default: state = '?'; break; + } + + if (sth->times[TXG_STATE_OPEN]) + open = sth->times[TXG_STATE_OPEN] - + sth->times[TXG_STATE_BIRTH]; + + if (sth->times[TXG_STATE_QUIESCED]) + quiesce = sth->times[TXG_STATE_QUIESCED] - + sth->times[TXG_STATE_OPEN]; + + if (sth->times[TXG_STATE_WAIT_FOR_SYNC]) + wait = sth->times[TXG_STATE_WAIT_FOR_SYNC] - + sth->times[TXG_STATE_QUIESCED]; + + if (sth->times[TXG_STATE_SYNCED]) + sync = sth->times[TXG_STATE_SYNCED] - + sth->times[TXG_STATE_WAIT_FOR_SYNC]; + + seq_printf(f, "%-8llu %-16llu %-5c %-12llu " + "%-12llu %-12llu %-8llu %-8llu %-12llu %-12llu %-12llu %-12llu\n", + (longlong_t)sth->txg, sth->times[TXG_STATE_BIRTH], state, + (u_longlong_t)sth->ndirty, + (u_longlong_t)sth->nread, (u_longlong_t)sth->nwritten, + (u_longlong_t)sth->reads, (u_longlong_t)sth->writes, + (u_longlong_t)open, (u_longlong_t)quiesce, (u_longlong_t)wait, + (u_longlong_t)sync); + + return (0); +} + +/* Remove oldest elements from list until there are no more than 'size' left */ +static void +spa_txg_history_truncate(spa_history_list_t *shl, unsigned int size) +{ + spa_txg_history_t *sth; + while (shl->size > size) { + sth = list_remove_head(&shl->procfs_list.pl_list); + ASSERT3P(sth, !=, NULL); + kmem_free(sth, sizeof (spa_txg_history_t)); + shl->size--; + } + + if (size == 0) + ASSERT(list_is_empty(&shl->procfs_list.pl_list)); + +} + +static int +spa_txg_history_clear(procfs_list_t *procfs_list) +{ + spa_history_list_t *shl = procfs_list->pl_private; + mutex_enter(&procfs_list->pl_lock); + spa_txg_history_truncate(shl, 0); + mutex_exit(&procfs_list->pl_lock); + return (0); +} + +static void +spa_txg_history_init(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.txg_history; + char *module; + + shl->size = 0; + + module = kmem_asprintf("zfs/%s", spa_name(spa)); + + shl->procfs_list.pl_private = shl; + procfs_list_install(module, + "txgs", + 0644, + &shl->procfs_list, + spa_txg_history_show, + spa_txg_history_show_header, + spa_txg_history_clear, + offsetof(spa_txg_history_t, sth_node)); + + kmem_strfree(module); +} + +static void +spa_txg_history_destroy(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.txg_history; + procfs_list_uninstall(&shl->procfs_list); + spa_txg_history_truncate(shl, 0); + procfs_list_destroy(&shl->procfs_list); +} + +/* + * Add a new txg to historical record. + */ +void +spa_txg_history_add(spa_t *spa, uint64_t txg, hrtime_t birth_time) +{ + spa_history_list_t *shl = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + + if (zfs_txg_history == 0 && shl->size == 0) + return; + + sth = kmem_zalloc(sizeof (spa_txg_history_t), KM_SLEEP); + sth->txg = txg; + sth->state = TXG_STATE_OPEN; + sth->times[TXG_STATE_BIRTH] = birth_time; + + mutex_enter(&shl->procfs_list.pl_lock); + procfs_list_add(&shl->procfs_list, sth); + shl->size++; + spa_txg_history_truncate(shl, zfs_txg_history); + mutex_exit(&shl->procfs_list.pl_lock); +} + +/* + * Set txg state completion time and increment current state. + */ +int +spa_txg_history_set(spa_t *spa, uint64_t txg, txg_state_t completed_state, + hrtime_t completed_time) +{ + spa_history_list_t *shl = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + int error = ENOENT; + + if (zfs_txg_history == 0) + return (0); + + mutex_enter(&shl->procfs_list.pl_lock); + for (sth = list_tail(&shl->procfs_list.pl_list); sth != NULL; + sth = list_prev(&shl->procfs_list.pl_list, sth)) { + if (sth->txg == txg) { + sth->times[completed_state] = completed_time; + sth->state++; + error = 0; + break; + } + } + mutex_exit(&shl->procfs_list.pl_lock); + + return (error); +} + +/* + * Set txg IO stats. + */ +static int +spa_txg_history_set_io(spa_t *spa, uint64_t txg, uint64_t nread, + uint64_t nwritten, uint64_t reads, uint64_t writes, uint64_t ndirty) +{ + spa_history_list_t *shl = &spa->spa_stats.txg_history; + spa_txg_history_t *sth; + int error = ENOENT; + + if (zfs_txg_history == 0) + return (0); + + mutex_enter(&shl->procfs_list.pl_lock); + for (sth = list_tail(&shl->procfs_list.pl_list); sth != NULL; + sth = list_prev(&shl->procfs_list.pl_list, sth)) { + if (sth->txg == txg) { + sth->nread = nread; + sth->nwritten = nwritten; + sth->reads = reads; + sth->writes = writes; + sth->ndirty = ndirty; + error = 0; + break; + } + } + mutex_exit(&shl->procfs_list.pl_lock); + + return (error); +} + +txg_stat_t * +spa_txg_history_init_io(spa_t *spa, uint64_t txg, dsl_pool_t *dp) +{ + txg_stat_t *ts; + + if (zfs_txg_history == 0) + return (NULL); + + ts = kmem_alloc(sizeof (txg_stat_t), KM_SLEEP); + + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + vdev_get_stats(spa->spa_root_vdev, &ts->vs1); + spa_config_exit(spa, SCL_CONFIG, FTAG); + + ts->txg = txg; + ts->ndirty = dp->dp_dirty_pertxg[txg & TXG_MASK]; + + spa_txg_history_set(spa, txg, TXG_STATE_WAIT_FOR_SYNC, gethrtime()); + + return (ts); +} + +void +spa_txg_history_fini_io(spa_t *spa, txg_stat_t *ts) +{ + if (ts == NULL) + return; + + if (zfs_txg_history == 0) { + kmem_free(ts, sizeof (txg_stat_t)); + return; + } + + spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); + vdev_get_stats(spa->spa_root_vdev, &ts->vs2); + spa_config_exit(spa, SCL_CONFIG, FTAG); + + spa_txg_history_set(spa, ts->txg, TXG_STATE_SYNCED, gethrtime()); + spa_txg_history_set_io(spa, ts->txg, + ts->vs2.vs_bytes[ZIO_TYPE_READ] - ts->vs1.vs_bytes[ZIO_TYPE_READ], + ts->vs2.vs_bytes[ZIO_TYPE_WRITE] - ts->vs1.vs_bytes[ZIO_TYPE_WRITE], + ts->vs2.vs_ops[ZIO_TYPE_READ] - ts->vs1.vs_ops[ZIO_TYPE_READ], + ts->vs2.vs_ops[ZIO_TYPE_WRITE] - ts->vs1.vs_ops[ZIO_TYPE_WRITE], + ts->ndirty); + + kmem_free(ts, sizeof (txg_stat_t)); +} + +/* + * ========================================================================== + * SPA TX Assign Histogram Routines + * ========================================================================== + */ + +/* + * Tx statistics - Information exported regarding dmu_tx_assign time. + */ + +/* + * When the kstat is written zero all buckets. When the kstat is read + * count the number of trailing buckets set to zero and update ks_ndata + * such that they are not output. + */ +static int +spa_tx_assign_update(kstat_t *ksp, int rw) +{ + spa_t *spa = ksp->ks_private; + spa_history_kstat_t *shk = &spa->spa_stats.tx_assign_histogram; + int i; + + if (rw == KSTAT_WRITE) { + for (i = 0; i < shk->count; i++) + ((kstat_named_t *)shk->priv)[i].value.ui64 = 0; + } + + for (i = shk->count; i > 0; i--) + if (((kstat_named_t *)shk->priv)[i-1].value.ui64 != 0) + break; + + ksp->ks_ndata = i; + ksp->ks_data_size = i * sizeof (kstat_named_t); + + return (0); +} + +static void +spa_tx_assign_init(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.tx_assign_histogram; + char *name; + kstat_named_t *ks; + kstat_t *ksp; + int i; + + mutex_init(&shk->lock, NULL, MUTEX_DEFAULT, NULL); + + shk->count = 42; /* power of two buckets for 1ns to 2,199s */ + shk->size = shk->count * sizeof (kstat_named_t); + shk->priv = kmem_alloc(shk->size, KM_SLEEP); + + name = kmem_asprintf("zfs/%s", spa_name(spa)); + + for (i = 0; i < shk->count; i++) { + ks = &((kstat_named_t *)shk->priv)[i]; + ks->data_type = KSTAT_DATA_UINT64; + ks->value.ui64 = 0; + (void) snprintf(ks->name, KSTAT_STRLEN, "%llu ns", + (u_longlong_t)1 << i); + } + + ksp = kstat_create(name, 0, "dmu_tx_assign", "misc", + KSTAT_TYPE_NAMED, 0, KSTAT_FLAG_VIRTUAL); + shk->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &shk->lock; + ksp->ks_data = shk->priv; + ksp->ks_ndata = shk->count; + ksp->ks_data_size = shk->size; + ksp->ks_private = spa; + ksp->ks_update = spa_tx_assign_update; + kstat_install(ksp); + } + kmem_strfree(name); +} + +static void +spa_tx_assign_destroy(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.tx_assign_histogram; + kstat_t *ksp; + + ksp = shk->kstat; + if (ksp) + kstat_delete(ksp); + + kmem_free(shk->priv, shk->size); + mutex_destroy(&shk->lock); +} + +void +spa_tx_assign_add_nsecs(spa_t *spa, uint64_t nsecs) +{ + spa_history_kstat_t *shk = &spa->spa_stats.tx_assign_histogram; + uint64_t idx = 0; + + while (((1ULL << idx) < nsecs) && (idx < shk->size - 1)) + idx++; + + atomic_inc_64(&((kstat_named_t *)shk->priv)[idx].value.ui64); +} + +/* + * ========================================================================== + * SPA IO History Routines + * ========================================================================== + */ +static int +spa_io_history_update(kstat_t *ksp, int rw) +{ + if (rw == KSTAT_WRITE) + memset(ksp->ks_data, 0, ksp->ks_data_size); + + return (0); +} + +static void +spa_io_history_init(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.io_history; + char *name; + kstat_t *ksp; + + mutex_init(&shk->lock, NULL, MUTEX_DEFAULT, NULL); + + name = kmem_asprintf("zfs/%s", spa_name(spa)); + + ksp = kstat_create(name, 0, "io", "disk", KSTAT_TYPE_IO, 1, 0); + shk->kstat = ksp; + + if (ksp) { + ksp->ks_lock = &shk->lock; + ksp->ks_private = spa; + ksp->ks_update = spa_io_history_update; + kstat_install(ksp); + } + kmem_strfree(name); +} + +static void +spa_io_history_destroy(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.io_history; + + if (shk->kstat) + kstat_delete(shk->kstat); + + mutex_destroy(&shk->lock); +} + +/* + * ========================================================================== + * SPA MMP History Routines + * ========================================================================== + */ + +/* + * MMP statistics - Information exported regarding attempted MMP writes + * For MMP writes issued, fields used as per comments below. + * For MMP writes skipped, an entry represents a span of time when + * writes were skipped for same reason (error from mmp_random_leaf). + * Differences are: + * timestamp time first write skipped, if >1 skipped in a row + * mmp_delay delay value at timestamp + * vdev_guid number of writes skipped + * io_error one of enum mmp_error + * duration time span (ns) of skipped writes + */ + +typedef struct spa_mmp_history { + uint64_t mmp_node_id; /* unique # for updates */ + uint64_t txg; /* txg of last sync */ + uint64_t timestamp; /* UTC time MMP write issued */ + uint64_t mmp_delay; /* mmp_thread.mmp_delay at timestamp */ + uint64_t vdev_guid; /* unique ID of leaf vdev */ + char *vdev_path; + int vdev_label; /* vdev label */ + int io_error; /* error status of MMP write */ + hrtime_t error_start; /* hrtime of start of error period */ + hrtime_t duration; /* time from submission to completion */ + procfs_list_node_t smh_node; +} spa_mmp_history_t; + +static int +spa_mmp_history_show_header(struct seq_file *f) +{ + seq_printf(f, "%-10s %-10s %-10s %-6s %-10s %-12s %-24s " + "%-10s %s\n", "id", "txg", "timestamp", "error", "duration", + "mmp_delay", "vdev_guid", "vdev_label", "vdev_path"); + return (0); +} + +static int +spa_mmp_history_show(struct seq_file *f, void *data) +{ + spa_mmp_history_t *smh = (spa_mmp_history_t *)data; + char skip_fmt[] = "%-10llu %-10llu %10llu %#6llx %10lld %12llu %-24llu " + "%-10lld %s\n"; + char write_fmt[] = "%-10llu %-10llu %10llu %6lld %10lld %12llu %-24llu " + "%-10lld %s\n"; + + seq_printf(f, (smh->error_start ? skip_fmt : write_fmt), + (u_longlong_t)smh->mmp_node_id, (u_longlong_t)smh->txg, + (u_longlong_t)smh->timestamp, (longlong_t)smh->io_error, + (longlong_t)smh->duration, (u_longlong_t)smh->mmp_delay, + (u_longlong_t)smh->vdev_guid, (u_longlong_t)smh->vdev_label, + (smh->vdev_path ? smh->vdev_path : "-")); + + return (0); +} + +/* Remove oldest elements from list until there are no more than 'size' left */ +static void +spa_mmp_history_truncate(spa_history_list_t *shl, unsigned int size) +{ + spa_mmp_history_t *smh; + while (shl->size > size) { + smh = list_remove_head(&shl->procfs_list.pl_list); + if (smh->vdev_path) + kmem_strfree(smh->vdev_path); + kmem_free(smh, sizeof (spa_mmp_history_t)); + shl->size--; + } + + if (size == 0) + ASSERT(list_is_empty(&shl->procfs_list.pl_list)); + +} + +static int +spa_mmp_history_clear(procfs_list_t *procfs_list) +{ + spa_history_list_t *shl = procfs_list->pl_private; + mutex_enter(&procfs_list->pl_lock); + spa_mmp_history_truncate(shl, 0); + mutex_exit(&procfs_list->pl_lock); + return (0); +} + +static void +spa_mmp_history_init(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.mmp_history; + char *module; + + shl->size = 0; + + module = kmem_asprintf("zfs/%s", spa_name(spa)); + + shl->procfs_list.pl_private = shl; + procfs_list_install(module, + "multihost", + 0644, + &shl->procfs_list, + spa_mmp_history_show, + spa_mmp_history_show_header, + spa_mmp_history_clear, + offsetof(spa_mmp_history_t, smh_node)); + + kmem_strfree(module); +} + +static void +spa_mmp_history_destroy(spa_t *spa) +{ + spa_history_list_t *shl = &spa->spa_stats.mmp_history; + procfs_list_uninstall(&shl->procfs_list); + spa_mmp_history_truncate(shl, 0); + procfs_list_destroy(&shl->procfs_list); +} + +/* + * Set duration in existing "skip" record to how long we have waited for a leaf + * vdev to become available. + * + * Important that we start search at the tail of the list where new + * records are inserted, so this is normally an O(1) operation. + */ +int +spa_mmp_history_set_skip(spa_t *spa, uint64_t mmp_node_id) +{ + spa_history_list_t *shl = &spa->spa_stats.mmp_history; + spa_mmp_history_t *smh; + int error = ENOENT; + + if (zfs_multihost_history == 0 && shl->size == 0) + return (0); + + mutex_enter(&shl->procfs_list.pl_lock); + for (smh = list_tail(&shl->procfs_list.pl_list); smh != NULL; + smh = list_prev(&shl->procfs_list.pl_list, smh)) { + if (smh->mmp_node_id == mmp_node_id) { + ASSERT3U(smh->io_error, !=, 0); + smh->duration = gethrtime() - smh->error_start; + smh->vdev_guid++; + error = 0; + break; + } + } + mutex_exit(&shl->procfs_list.pl_lock); + + return (error); +} + +/* + * Set MMP write duration and error status in existing record. + * See comment re: search order above spa_mmp_history_set_skip(). + */ +int +spa_mmp_history_set(spa_t *spa, uint64_t mmp_node_id, int io_error, + hrtime_t duration) +{ + spa_history_list_t *shl = &spa->spa_stats.mmp_history; + spa_mmp_history_t *smh; + int error = ENOENT; + + if (zfs_multihost_history == 0 && shl->size == 0) + return (0); + + mutex_enter(&shl->procfs_list.pl_lock); + for (smh = list_tail(&shl->procfs_list.pl_list); smh != NULL; + smh = list_prev(&shl->procfs_list.pl_list, smh)) { + if (smh->mmp_node_id == mmp_node_id) { + ASSERT(smh->io_error == 0); + smh->io_error = io_error; + smh->duration = duration; + error = 0; + break; + } + } + mutex_exit(&shl->procfs_list.pl_lock); + + return (error); +} + +/* + * Add a new MMP historical record. + * error == 0 : a write was issued. + * error != 0 : a write was not issued because no leaves were found. + */ +void +spa_mmp_history_add(spa_t *spa, uint64_t txg, uint64_t timestamp, + uint64_t mmp_delay, vdev_t *vd, int label, uint64_t mmp_node_id, + int error) +{ + spa_history_list_t *shl = &spa->spa_stats.mmp_history; + spa_mmp_history_t *smh; + + if (zfs_multihost_history == 0 && shl->size == 0) + return; + + smh = kmem_zalloc(sizeof (spa_mmp_history_t), KM_SLEEP); + smh->txg = txg; + smh->timestamp = timestamp; + smh->mmp_delay = mmp_delay; + if (vd) { + smh->vdev_guid = vd->vdev_guid; + if (vd->vdev_path) + smh->vdev_path = kmem_strdup(vd->vdev_path); + } + smh->vdev_label = label; + smh->mmp_node_id = mmp_node_id; + + if (error) { + smh->io_error = error; + smh->error_start = gethrtime(); + smh->vdev_guid = 1; + } + + mutex_enter(&shl->procfs_list.pl_lock); + procfs_list_add(&shl->procfs_list, smh); + shl->size++; + spa_mmp_history_truncate(shl, zfs_multihost_history); + mutex_exit(&shl->procfs_list.pl_lock); +} + +static void * +spa_state_addr(kstat_t *ksp, loff_t n) +{ + if (n == 0) + return (ksp->ks_private); /* return the spa_t */ + return (NULL); +} + +static int +spa_state_data(char *buf, size_t size, void *data) +{ + spa_t *spa = (spa_t *)data; + (void) snprintf(buf, size, "%s\n", spa_state_to_name(spa)); + return (0); +} + +/* + * Return the state of the pool in /proc/spl/kstat/zfs//state. + * + * This is a lock-less read of the pool's state (unlike using 'zpool', which + * can potentially block for seconds). Because it doesn't block, it can useful + * as a pool heartbeat value. + */ +static void +spa_state_init(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.state; + char *name; + kstat_t *ksp; + + mutex_init(&shk->lock, NULL, MUTEX_DEFAULT, NULL); + + name = kmem_asprintf("zfs/%s", spa_name(spa)); + ksp = kstat_create(name, 0, "state", "misc", + KSTAT_TYPE_RAW, 0, KSTAT_FLAG_VIRTUAL); + + shk->kstat = ksp; + if (ksp) { + ksp->ks_lock = &shk->lock; + ksp->ks_data = NULL; + ksp->ks_private = spa; + ksp->ks_flags |= KSTAT_FLAG_NO_HEADERS; + kstat_set_raw_ops(ksp, NULL, spa_state_data, spa_state_addr); + kstat_install(ksp); + } + + kmem_strfree(name); +} + +static void +spa_health_destroy(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.state; + kstat_t *ksp = shk->kstat; + if (ksp) + kstat_delete(ksp); + + mutex_destroy(&shk->lock); +} + +static spa_iostats_t spa_iostats_template = { + { "trim_extents_written", KSTAT_DATA_UINT64 }, + { "trim_bytes_written", KSTAT_DATA_UINT64 }, + { "trim_extents_skipped", KSTAT_DATA_UINT64 }, + { "trim_bytes_skipped", KSTAT_DATA_UINT64 }, + { "trim_extents_failed", KSTAT_DATA_UINT64 }, + { "trim_bytes_failed", KSTAT_DATA_UINT64 }, + { "autotrim_extents_written", KSTAT_DATA_UINT64 }, + { "autotrim_bytes_written", KSTAT_DATA_UINT64 }, + { "autotrim_extents_skipped", KSTAT_DATA_UINT64 }, + { "autotrim_bytes_skipped", KSTAT_DATA_UINT64 }, + { "autotrim_extents_failed", KSTAT_DATA_UINT64 }, + { "autotrim_bytes_failed", KSTAT_DATA_UINT64 }, + { "simple_trim_extents_written", KSTAT_DATA_UINT64 }, + { "simple_trim_bytes_written", KSTAT_DATA_UINT64 }, + { "simple_trim_extents_skipped", KSTAT_DATA_UINT64 }, + { "simple_trim_bytes_skipped", KSTAT_DATA_UINT64 }, + { "simple_trim_extents_failed", KSTAT_DATA_UINT64 }, + { "simple_trim_bytes_failed", KSTAT_DATA_UINT64 }, +}; + +#define SPA_IOSTATS_ADD(stat, val) \ + atomic_add_64(&iostats->stat.value.ui64, (val)); + +void +spa_iostats_trim_add(spa_t *spa, trim_type_t type, + uint64_t extents_written, uint64_t bytes_written, + uint64_t extents_skipped, uint64_t bytes_skipped, + uint64_t extents_failed, uint64_t bytes_failed) +{ + spa_history_kstat_t *shk = &spa->spa_stats.iostats; + kstat_t *ksp = shk->kstat; + spa_iostats_t *iostats; + + if (ksp == NULL) + return; + + iostats = ksp->ks_data; + if (type == TRIM_TYPE_MANUAL) { + SPA_IOSTATS_ADD(trim_extents_written, extents_written); + SPA_IOSTATS_ADD(trim_bytes_written, bytes_written); + SPA_IOSTATS_ADD(trim_extents_skipped, extents_skipped); + SPA_IOSTATS_ADD(trim_bytes_skipped, bytes_skipped); + SPA_IOSTATS_ADD(trim_extents_failed, extents_failed); + SPA_IOSTATS_ADD(trim_bytes_failed, bytes_failed); + } else if (type == TRIM_TYPE_AUTO) { + SPA_IOSTATS_ADD(autotrim_extents_written, extents_written); + SPA_IOSTATS_ADD(autotrim_bytes_written, bytes_written); + SPA_IOSTATS_ADD(autotrim_extents_skipped, extents_skipped); + SPA_IOSTATS_ADD(autotrim_bytes_skipped, bytes_skipped); + SPA_IOSTATS_ADD(autotrim_extents_failed, extents_failed); + SPA_IOSTATS_ADD(autotrim_bytes_failed, bytes_failed); + } else { + SPA_IOSTATS_ADD(simple_trim_extents_written, extents_written); + SPA_IOSTATS_ADD(simple_trim_bytes_written, bytes_written); + SPA_IOSTATS_ADD(simple_trim_extents_skipped, extents_skipped); + SPA_IOSTATS_ADD(simple_trim_bytes_skipped, bytes_skipped); + SPA_IOSTATS_ADD(simple_trim_extents_failed, extents_failed); + SPA_IOSTATS_ADD(simple_trim_bytes_failed, bytes_failed); + } +} + +static int +spa_iostats_update(kstat_t *ksp, int rw) +{ + if (rw == KSTAT_WRITE) { + memcpy(ksp->ks_data, &spa_iostats_template, + sizeof (spa_iostats_t)); + } + + return (0); +} + +static void +spa_iostats_init(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.iostats; + + mutex_init(&shk->lock, NULL, MUTEX_DEFAULT, NULL); + + char *name = kmem_asprintf("zfs/%s", spa_name(spa)); + kstat_t *ksp = kstat_create(name, 0, "iostats", "misc", + KSTAT_TYPE_NAMED, sizeof (spa_iostats_t) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL); + + shk->kstat = ksp; + if (ksp) { + int size = sizeof (spa_iostats_t); + ksp->ks_lock = &shk->lock; + ksp->ks_private = spa; + ksp->ks_update = spa_iostats_update; + ksp->ks_data = kmem_alloc(size, KM_SLEEP); + memcpy(ksp->ks_data, &spa_iostats_template, size); + kstat_install(ksp); + } + + kmem_strfree(name); +} + +static void +spa_iostats_destroy(spa_t *spa) +{ + spa_history_kstat_t *shk = &spa->spa_stats.iostats; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@freebsd.org Sat Sep 5 16:11:07 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 03A683CF9B3; Sat, 5 Sep 2020 16:11:07 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BkKKQ5vC8z4b5c; Sat, 5 Sep 2020 16:11:06 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AD3642026B; Sat, 5 Sep 2020 16:11:06 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 085GB6cI007372; Sat, 5 Sep 2020 16:11:06 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 085GB5gx007365; Sat, 5 Sep 2020 16:11:05 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202009051611.085GB5gx007365@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Sat, 5 Sep 2020 16:11:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365361 - in vendor/NetBSD/bmake/dist: . lst.lib mk mk/sys unit-tests X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in vendor/NetBSD/bmake/dist: . lst.lib mk mk/sys unit-tests X-SVN-Commit-Revision: 365361 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2020 16:11:07 -0000 Author: sjg Date: Sat Sep 5 16:11:04 2020 New Revision: 365361 URL: https://svnweb.freebsd.org/changeset/base/365361 Log: Import bmake-20200902 Lots of code refactoring, simplification and cleanup. Lots of new unit-tests providing much higher code coverage. All courtesy of rillig at netbsd. Other significant changes: o new read-only variable .SHELL which provides the path of the shell used to run scripts (as defined by the .SHELL target). o new debug option -dl: LINT mode, does the equivalent of := for all variable assignments so that file and line number are reported for variable parse errors. Added: vendor/NetBSD/bmake/dist/enum.c (contents, props changed) vendor/NetBSD/bmake/dist/enum.h (contents, props changed) vendor/NetBSD/bmake/dist/lst.c (contents, props changed) vendor/NetBSD/bmake/dist/mk/dirdeps-cache-update.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/archive-suffix.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/archive-suffix.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/archive.exp vendor/NetBSD/bmake/dist/unit-tests/archive.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cmd-interrupt.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cmd-interrupt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cmdline.exp vendor/NetBSD/bmake/dist/unit-tests/cmdline.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-eq.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-eq.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-ge.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-ge.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-gt.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-gt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-le.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-le.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-lt.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-lt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-ne.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric-ne.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-numeric.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-string.exp vendor/NetBSD/bmake/dist/unit-tests/cond-cmp-string.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-commands.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-commands.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-defined.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-defined.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-empty.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-empty.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-exists.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-exists.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-make.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-make.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func-target.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func-target.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-func.exp vendor/NetBSD/bmake/dist/unit-tests/cond-func.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-op-and.exp vendor/NetBSD/bmake/dist/unit-tests/cond-op-and.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-op-not.exp vendor/NetBSD/bmake/dist/unit-tests/cond-op-not.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-op-or.exp vendor/NetBSD/bmake/dist/unit-tests/cond-op-or.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-op-parentheses.exp vendor/NetBSD/bmake/dist/unit-tests/cond-op-parentheses.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-op.exp vendor/NetBSD/bmake/dist/unit-tests/cond-op.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-token-number.exp vendor/NetBSD/bmake/dist/unit-tests/cond-token-number.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-token-plain.exp vendor/NetBSD/bmake/dist/unit-tests/cond-token-plain.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-token-string.exp vendor/NetBSD/bmake/dist/unit-tests/cond-token-string.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/cond-token-var.exp vendor/NetBSD/bmake/dist/unit-tests/cond-token-var.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/counter.exp vendor/NetBSD/bmake/dist/unit-tests/counter.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-colon.exp vendor/NetBSD/bmake/dist/unit-tests/dep-colon.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-double-colon.exp vendor/NetBSD/bmake/dist/unit-tests/dep-double-colon.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-exclam.exp vendor/NetBSD/bmake/dist/unit-tests/dep-exclam.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-none.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-none.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-var.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-var.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep-wildcards.exp vendor/NetBSD/bmake/dist/unit-tests/dep-wildcards.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dep.exp vendor/NetBSD/bmake/dist/unit-tests/dep.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-exec.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-exec.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-ignore.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-ignore.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-made.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-made.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-make.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-make.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-meta.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-meta.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-nometa.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-nometa.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-nometa_cmp.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-nometa_cmp.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-nopath.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-nopath.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-notmain.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-notmain.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-optional.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-optional.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-phony.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-phony.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-precious.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-precious.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-recursive.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-recursive.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-silent.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-silent.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-use.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-use.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-usebefore-double-colon.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-usebefore-double-colon.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-usebefore.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-usebefore.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc-wait.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc-wait.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/depsrc.exp vendor/NetBSD/bmake/dist/unit-tests/depsrc.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-begin.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-begin.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-default.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-default.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-delete_on_error.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-delete_on_error.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-end.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-end.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-error.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-error.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-ignore.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-ignore.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-interrupt.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-interrupt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-main.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-main.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-makeflags.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-makeflags.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-no_parallel.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-no_parallel.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-nopath.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-nopath.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-notparallel.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-notparallel.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-objdir.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-objdir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-order.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-order.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-path-suffix.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-path-suffix.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-path.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-path.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-phony.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-phony.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-precious.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-precious.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-shell.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-shell.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-silent.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-silent.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-stale.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-stale.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt-suffixes.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt-suffixes.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/deptgt.exp vendor/NetBSD/bmake/dist/unit-tests/deptgt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dir-expand-path.exp vendor/NetBSD/bmake/dist/unit-tests/dir-expand-path.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/dir.exp vendor/NetBSD/bmake/dist/unit-tests/dir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-elif.exp vendor/NetBSD/bmake/dist/unit-tests/directive-elif.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-elifdef.exp vendor/NetBSD/bmake/dist/unit-tests/directive-elifdef.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-elifmake.exp vendor/NetBSD/bmake/dist/unit-tests/directive-elifmake.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-elifndef.exp vendor/NetBSD/bmake/dist/unit-tests/directive-elifndef.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-elifnmake.exp vendor/NetBSD/bmake/dist/unit-tests/directive-elifnmake.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-else.exp vendor/NetBSD/bmake/dist/unit-tests/directive-else.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-endif.exp vendor/NetBSD/bmake/dist/unit-tests/directive-endif.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-error.exp vendor/NetBSD/bmake/dist/unit-tests/directive-error.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-export-env.exp vendor/NetBSD/bmake/dist/unit-tests/directive-export-env.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-export-literal.exp vendor/NetBSD/bmake/dist/unit-tests/directive-export-literal.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-export.exp vendor/NetBSD/bmake/dist/unit-tests/directive-export.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-for-generating-endif.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-for-generating-endif.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-for.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-for.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-if.exp vendor/NetBSD/bmake/dist/unit-tests/directive-if.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-ifdef.exp vendor/NetBSD/bmake/dist/unit-tests/directive-ifdef.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-ifmake.exp vendor/NetBSD/bmake/dist/unit-tests/directive-ifmake.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-ifndef.exp vendor/NetBSD/bmake/dist/unit-tests/directive-ifndef.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-ifnmake.exp vendor/NetBSD/bmake/dist/unit-tests/directive-ifnmake.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-info.exp vendor/NetBSD/bmake/dist/unit-tests/directive-info.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-undef.exp vendor/NetBSD/bmake/dist/unit-tests/directive-undef.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-unexport-env.exp vendor/NetBSD/bmake/dist/unit-tests/directive-unexport-env.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-unexport.exp vendor/NetBSD/bmake/dist/unit-tests/directive-unexport.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive-warning.exp vendor/NetBSD/bmake/dist/unit-tests/directive-warning.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directive.exp vendor/NetBSD/bmake/dist/unit-tests/directive.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/directives.exp vendor/NetBSD/bmake/dist/unit-tests/directives.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/envfirst.exp vendor/NetBSD/bmake/dist/unit-tests/envfirst.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/export-variants.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/export-variants.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/lint.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/lint.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/make-exported.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/make-exported.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-backwards.exp vendor/NetBSD/bmake/dist/unit-tests/opt-backwards.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-chdir.exp vendor/NetBSD/bmake/dist/unit-tests/opt-chdir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-debug-g1.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-debug-g1.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-debug.exp vendor/NetBSD/bmake/dist/unit-tests/opt-debug.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-define.exp vendor/NetBSD/bmake/dist/unit-tests/opt-define.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-env.exp vendor/NetBSD/bmake/dist/unit-tests/opt-env.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-file.exp vendor/NetBSD/bmake/dist/unit-tests/opt-file.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-ignore.exp vendor/NetBSD/bmake/dist/unit-tests/opt-ignore.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-include-dir.exp vendor/NetBSD/bmake/dist/unit-tests/opt-include-dir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-jobs-internal.exp vendor/NetBSD/bmake/dist/unit-tests/opt-jobs-internal.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-jobs.exp vendor/NetBSD/bmake/dist/unit-tests/opt-jobs.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-keep-going.exp vendor/NetBSD/bmake/dist/unit-tests/opt-keep-going.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-m-include-dir.exp vendor/NetBSD/bmake/dist/unit-tests/opt-m-include-dir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-no-action-at-all.exp vendor/NetBSD/bmake/dist/unit-tests/opt-no-action-at-all.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-no-action.exp vendor/NetBSD/bmake/dist/unit-tests/opt-no-action.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-query.exp vendor/NetBSD/bmake/dist/unit-tests/opt-query.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-raw.exp vendor/NetBSD/bmake/dist/unit-tests/opt-raw.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-silent.exp vendor/NetBSD/bmake/dist/unit-tests/opt-silent.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-touch.exp vendor/NetBSD/bmake/dist/unit-tests/opt-touch.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-tracefile.exp vendor/NetBSD/bmake/dist/unit-tests/opt-tracefile.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-var-expanded.exp vendor/NetBSD/bmake/dist/unit-tests/opt-var-expanded.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-var-literal.exp vendor/NetBSD/bmake/dist/unit-tests/opt-var-literal.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-warnings-as-errors.exp vendor/NetBSD/bmake/dist/unit-tests/opt-warnings-as-errors.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-where-am-i.exp vendor/NetBSD/bmake/dist/unit-tests/opt-where-am-i.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt-x-reduce-exported.exp vendor/NetBSD/bmake/dist/unit-tests/opt-x-reduce-exported.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/opt.exp vendor/NetBSD/bmake/dist/unit-tests/opt.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/recursive.exp vendor/NetBSD/bmake/dist/unit-tests/recursive.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-dots.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-dots.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-jobs-error.exp vendor/NetBSD/bmake/dist/unit-tests/sh-jobs-error.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-jobs.exp vendor/NetBSD/bmake/dist/unit-tests/sh-jobs.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-leading-at.exp vendor/NetBSD/bmake/dist/unit-tests/sh-leading-at.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-leading-hyphen.exp vendor/NetBSD/bmake/dist/unit-tests/sh-leading-hyphen.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-leading-plus.exp vendor/NetBSD/bmake/dist/unit-tests/sh-leading-plus.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-meta-chars.exp vendor/NetBSD/bmake/dist/unit-tests/sh-meta-chars.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-multi-line.exp vendor/NetBSD/bmake/dist/unit-tests/sh-multi-line.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh-single-line.exp vendor/NetBSD/bmake/dist/unit-tests/sh-single-line.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/sh.exp vendor/NetBSD/bmake/dist/unit-tests/sh.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/use-inference.exp vendor/NetBSD/bmake/dist/unit-tests/use-inference.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class-cmdline.exp vendor/NetBSD/bmake/dist/unit-tests/var-class-cmdline.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class-env.exp vendor/NetBSD/bmake/dist/unit-tests/var-class-env.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class-global.exp vendor/NetBSD/bmake/dist/unit-tests/var-class-global.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class-local-legacy.exp vendor/NetBSD/bmake/dist/unit-tests/var-class-local-legacy.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class-local.exp vendor/NetBSD/bmake/dist/unit-tests/var-class-local.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-class.exp vendor/NetBSD/bmake/dist/unit-tests/var-class.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op-append.exp vendor/NetBSD/bmake/dist/unit-tests/var-op-append.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op-assign.exp vendor/NetBSD/bmake/dist/unit-tests/var-op-assign.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op-default.exp vendor/NetBSD/bmake/dist/unit-tests/var-op-default.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op-expand.exp vendor/NetBSD/bmake/dist/unit-tests/var-op-expand.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op-shell.exp vendor/NetBSD/bmake/dist/unit-tests/var-op-shell.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/var-op.exp vendor/NetBSD/bmake/dist/unit-tests/var-op.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/vardebug.exp vendor/NetBSD/bmake/dist/unit-tests/vardebug.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varfind.exp vendor/NetBSD/bmake/dist/unit-tests/varfind.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-assign.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-assign.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-defined.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-defined.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-exclam-shell.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-exclam-shell.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-extension.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-extension.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-gmtime.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-gmtime.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-hash.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-hash.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-head.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-head.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-ifelse.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-ifelse.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-l-name-to-value.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-l-name-to-value.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-localtime.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-localtime.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-loop.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-loop.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-match-escape.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-match-escape.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-match.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-match.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-no-match.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-no-match.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-order-reverse.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-order-reverse.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-order-shuffle.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-order-shuffle.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-order.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-order.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-path.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-path.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-quote-dollar.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-quote-dollar.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-quote.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-quote.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-range.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-range.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-remember.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-remember.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-root.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-root.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-select-words.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-select-words.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-shell.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-shell.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-subst-regex.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-subst-regex.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-subst.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-subst.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-sysv.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-sysv.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-tail.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-tail.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-abs.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-abs.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-lower.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-lower.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-many-words.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-many-words.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-one-word.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-one-word.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-separator.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-separator.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-to-upper.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-to-upper.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-undefined.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-undefined.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod-unique.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-unique.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varmod.exp vendor/NetBSD/bmake/dist/unit-tests/varmod.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dollar.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dollar.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-alltargets.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-alltargets.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-curdir.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-curdir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includedfromdir.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includedfromdir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includedfromfile.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includedfromfile.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includes.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-includes.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-libs.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-libs.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-dependfile.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-dependfile.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-expand_variables.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-expand_variables.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-exported.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-exported.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-jobs-prefix.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-jobs-prefix.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-jobs.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-jobs.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-level.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-level.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-makefile_preference.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-makefile_preference.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-makefiles.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-makefiles.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-bailiwick.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-bailiwick.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-created.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-created.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-files.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-files.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_filter.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_filter.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_paths.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_paths.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_patterns.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-ignore_patterns.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-prefix.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-meta-prefix.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-mode.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-mode.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-path_filemon.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-path_filemon.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-pid.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-pid.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-ppid.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-ppid.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-save_dollars.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-make-save_dollars.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-makeoverrides.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-makeoverrides.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-newline.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-newline.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-objdir.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-objdir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-parsedir.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-parsedir.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-parsefile.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-parsefile.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-path.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-path.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-shell.exp (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-shell.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-dot-targets.exp vendor/NetBSD/bmake/dist/unit-tests/varname-dot-targets.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-empty.exp vendor/NetBSD/bmake/dist/unit-tests/varname-empty.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-make.exp vendor/NetBSD/bmake/dist/unit-tests/varname-make.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-make_print_var_on_error.exp vendor/NetBSD/bmake/dist/unit-tests/varname-make_print_var_on_error.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-makeflags.exp vendor/NetBSD/bmake/dist/unit-tests/varname-makeflags.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-pwd.exp vendor/NetBSD/bmake/dist/unit-tests/varname-pwd.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname-vpath.exp vendor/NetBSD/bmake/dist/unit-tests/varname-vpath.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varname.exp vendor/NetBSD/bmake/dist/unit-tests/varname.mk (contents, props changed) vendor/NetBSD/bmake/dist/unit-tests/varparse-dynamic.exp vendor/NetBSD/bmake/dist/unit-tests/varparse-dynamic.mk (contents, props changed) Deleted: vendor/NetBSD/bmake/dist/lst.lib/Makefile vendor/NetBSD/bmake/dist/lst.lib/lstAppend.c vendor/NetBSD/bmake/dist/lst.lib/lstAtEnd.c vendor/NetBSD/bmake/dist/lst.lib/lstAtFront.c vendor/NetBSD/bmake/dist/lst.lib/lstClose.c vendor/NetBSD/bmake/dist/lst.lib/lstConcat.c vendor/NetBSD/bmake/dist/lst.lib/lstDatum.c vendor/NetBSD/bmake/dist/lst.lib/lstDeQueue.c vendor/NetBSD/bmake/dist/lst.lib/lstDestroy.c vendor/NetBSD/bmake/dist/lst.lib/lstDupl.c vendor/NetBSD/bmake/dist/lst.lib/lstEnQueue.c vendor/NetBSD/bmake/dist/lst.lib/lstFind.c vendor/NetBSD/bmake/dist/lst.lib/lstFindFrom.c vendor/NetBSD/bmake/dist/lst.lib/lstFirst.c vendor/NetBSD/bmake/dist/lst.lib/lstForEach.c vendor/NetBSD/bmake/dist/lst.lib/lstForEachFrom.c vendor/NetBSD/bmake/dist/lst.lib/lstInit.c vendor/NetBSD/bmake/dist/lst.lib/lstInsert.c vendor/NetBSD/bmake/dist/lst.lib/lstInt.h vendor/NetBSD/bmake/dist/lst.lib/lstIsAtEnd.c vendor/NetBSD/bmake/dist/lst.lib/lstIsEmpty.c vendor/NetBSD/bmake/dist/lst.lib/lstLast.c vendor/NetBSD/bmake/dist/lst.lib/lstMember.c vendor/NetBSD/bmake/dist/lst.lib/lstNext.c vendor/NetBSD/bmake/dist/lst.lib/lstOpen.c vendor/NetBSD/bmake/dist/lst.lib/lstPrev.c vendor/NetBSD/bmake/dist/lst.lib/lstRemove.c vendor/NetBSD/bmake/dist/lst.lib/lstReplace.c vendor/NetBSD/bmake/dist/lst.lib/lstSucc.c vendor/NetBSD/bmake/dist/sprite.h vendor/NetBSD/bmake/dist/unit-tests/modorder.exp vendor/NetBSD/bmake/dist/unit-tests/modorder.mk Modified: vendor/NetBSD/bmake/dist/ChangeLog vendor/NetBSD/bmake/dist/FILES vendor/NetBSD/bmake/dist/LICENSE vendor/NetBSD/bmake/dist/Makefile vendor/NetBSD/bmake/dist/VERSION vendor/NetBSD/bmake/dist/arch.c vendor/NetBSD/bmake/dist/bmake.1 vendor/NetBSD/bmake/dist/bmake.cat1 vendor/NetBSD/bmake/dist/bsd.after-import.mk vendor/NetBSD/bmake/dist/buf.c vendor/NetBSD/bmake/dist/buf.h vendor/NetBSD/bmake/dist/compat.c vendor/NetBSD/bmake/dist/cond.c vendor/NetBSD/bmake/dist/dir.c vendor/NetBSD/bmake/dist/dir.h vendor/NetBSD/bmake/dist/for.c vendor/NetBSD/bmake/dist/hash.c vendor/NetBSD/bmake/dist/hash.h vendor/NetBSD/bmake/dist/job.c vendor/NetBSD/bmake/dist/job.h vendor/NetBSD/bmake/dist/lst.h vendor/NetBSD/bmake/dist/main.c vendor/NetBSD/bmake/dist/make-conf.h vendor/NetBSD/bmake/dist/make.1 vendor/NetBSD/bmake/dist/make.c vendor/NetBSD/bmake/dist/make.h vendor/NetBSD/bmake/dist/make_malloc.c vendor/NetBSD/bmake/dist/make_malloc.h vendor/NetBSD/bmake/dist/meta.c vendor/NetBSD/bmake/dist/metachar.c vendor/NetBSD/bmake/dist/metachar.h vendor/NetBSD/bmake/dist/mk/ChangeLog vendor/NetBSD/bmake/dist/mk/FILES vendor/NetBSD/bmake/dist/mk/README vendor/NetBSD/bmake/dist/mk/auto.dep.mk vendor/NetBSD/bmake/dist/mk/auto.obj.mk vendor/NetBSD/bmake/dist/mk/autoconf.mk vendor/NetBSD/bmake/dist/mk/autodep.mk vendor/NetBSD/bmake/dist/mk/compiler.mk vendor/NetBSD/bmake/dist/mk/cython.mk vendor/NetBSD/bmake/dist/mk/dirdeps-options.mk vendor/NetBSD/bmake/dist/mk/dirdeps-targets.mk vendor/NetBSD/bmake/dist/mk/dirdeps.mk vendor/NetBSD/bmake/dist/mk/dpadd.mk vendor/NetBSD/bmake/dist/mk/files.mk vendor/NetBSD/bmake/dist/mk/gendirdeps.mk vendor/NetBSD/bmake/dist/mk/host-target.mk vendor/NetBSD/bmake/dist/mk/host.libnames.mk vendor/NetBSD/bmake/dist/mk/inc.mk vendor/NetBSD/bmake/dist/mk/init.mk vendor/NetBSD/bmake/dist/mk/install-mk vendor/NetBSD/bmake/dist/mk/install-new.mk vendor/NetBSD/bmake/dist/mk/java.mk vendor/NetBSD/bmake/dist/mk/lib.mk vendor/NetBSD/bmake/dist/mk/libnames.mk vendor/NetBSD/bmake/dist/mk/libs.mk vendor/NetBSD/bmake/dist/mk/links.mk vendor/NetBSD/bmake/dist/mk/manifest.mk vendor/NetBSD/bmake/dist/mk/meta.autodep.mk vendor/NetBSD/bmake/dist/mk/meta.stage.mk vendor/NetBSD/bmake/dist/mk/meta.subdir.mk vendor/NetBSD/bmake/dist/mk/meta.sys.mk vendor/NetBSD/bmake/dist/mk/meta2deps.py vendor/NetBSD/bmake/dist/mk/meta2deps.sh vendor/NetBSD/bmake/dist/mk/mk-files.txt vendor/NetBSD/bmake/dist/mk/mkopt.sh vendor/NetBSD/bmake/dist/mk/obj.mk vendor/NetBSD/bmake/dist/mk/options.mk vendor/NetBSD/bmake/dist/mk/own.mk vendor/NetBSD/bmake/dist/mk/prlist.mk vendor/NetBSD/bmake/dist/mk/prog.mk vendor/NetBSD/bmake/dist/mk/progs.mk vendor/NetBSD/bmake/dist/mk/rst2htm.mk vendor/NetBSD/bmake/dist/mk/scripts.mk vendor/NetBSD/bmake/dist/mk/srctop.mk vendor/NetBSD/bmake/dist/mk/stage-install.sh vendor/NetBSD/bmake/dist/mk/sys.clean-env.mk vendor/NetBSD/bmake/dist/mk/sys.debug.mk vendor/NetBSD/bmake/dist/mk/sys.dependfile.mk vendor/NetBSD/bmake/dist/mk/sys.mk vendor/NetBSD/bmake/dist/mk/sys.vars.mk vendor/NetBSD/bmake/dist/mk/sys/AIX.mk vendor/NetBSD/bmake/dist/mk/sys/Darwin.mk vendor/NetBSD/bmake/dist/mk/sys/Generic.mk vendor/NetBSD/bmake/dist/mk/sys/HP-UX.mk vendor/NetBSD/bmake/dist/mk/sys/IRIX.mk vendor/NetBSD/bmake/dist/mk/sys/Linux.mk vendor/NetBSD/bmake/dist/mk/sys/NetBSD.mk vendor/NetBSD/bmake/dist/mk/sys/OSF1.mk vendor/NetBSD/bmake/dist/mk/sys/OpenBSD.mk vendor/NetBSD/bmake/dist/mk/sys/SunOS.mk vendor/NetBSD/bmake/dist/mk/sys/UnixWare.mk vendor/NetBSD/bmake/dist/mk/target-flags.mk vendor/NetBSD/bmake/dist/mk/warnings.mk vendor/NetBSD/bmake/dist/mk/whats.mk vendor/NetBSD/bmake/dist/mk/yacc.mk vendor/NetBSD/bmake/dist/nonints.h vendor/NetBSD/bmake/dist/os.sh vendor/NetBSD/bmake/dist/parse.c vendor/NetBSD/bmake/dist/str.c vendor/NetBSD/bmake/dist/strlist.c vendor/NetBSD/bmake/dist/strlist.h vendor/NetBSD/bmake/dist/suff.c vendor/NetBSD/bmake/dist/targ.c vendor/NetBSD/bmake/dist/trace.c vendor/NetBSD/bmake/dist/unit-tests/Makefile vendor/NetBSD/bmake/dist/unit-tests/cond-late.exp vendor/NetBSD/bmake/dist/unit-tests/cond-late.mk vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk vendor/NetBSD/bmake/dist/unit-tests/export-all.mk vendor/NetBSD/bmake/dist/unit-tests/export.exp vendor/NetBSD/bmake/dist/unit-tests/export.mk vendor/NetBSD/bmake/dist/unit-tests/forloop.mk vendor/NetBSD/bmake/dist/unit-tests/impsrc.exp vendor/NetBSD/bmake/dist/unit-tests/impsrc.mk vendor/NetBSD/bmake/dist/unit-tests/include-main.mk vendor/NetBSD/bmake/dist/unit-tests/moderrs.exp vendor/NetBSD/bmake/dist/unit-tests/moderrs.mk vendor/NetBSD/bmake/dist/unit-tests/modmatch.exp vendor/NetBSD/bmake/dist/unit-tests/modmatch.mk vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk vendor/NetBSD/bmake/dist/unit-tests/modts.exp vendor/NetBSD/bmake/dist/unit-tests/modts.mk vendor/NetBSD/bmake/dist/unit-tests/phony-end.exp vendor/NetBSD/bmake/dist/unit-tests/posix1.mk vendor/NetBSD/bmake/dist/unit-tests/sysv.exp vendor/NetBSD/bmake/dist/unit-tests/sysv.mk vendor/NetBSD/bmake/dist/unit-tests/unexport-env.mk vendor/NetBSD/bmake/dist/unit-tests/unexport.mk vendor/NetBSD/bmake/dist/unit-tests/varmisc.exp vendor/NetBSD/bmake/dist/unit-tests/varmisc.mk vendor/NetBSD/bmake/dist/unit-tests/varmod-edge.exp vendor/NetBSD/bmake/dist/unit-tests/varmod-edge.mk vendor/NetBSD/bmake/dist/util.c vendor/NetBSD/bmake/dist/var.c Modified: vendor/NetBSD/bmake/dist/ChangeLog ============================================================================== --- vendor/NetBSD/bmake/dist/ChangeLog Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/ChangeLog Sat Sep 5 16:11:04 2020 (r365361) @@ -1,3 +1,243 @@ +2020-09-02 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200902 + Merge with NetBSD make, pick up + o use make_stat to ensure no confusion over valid fields + returned by cached_stat + o var.c: make VarQuote const-correct + o add unit tests for .for + +2020-09-01 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200901 + Merge with NetBSD make, pick up + o rename Hash_Table fields + o make data types in Dir_HasWildcards more precise + +2020-08-31 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200831 + Merge with NetBSD make, pick up + o suff.c: fix unbalanced Lst_Open/Lst_Close in SuffFindCmds + o lst.c: Lst_Open renable assert that list isn't open + o unit test for .TARGET dependent flags + o var.c: fix aliasing bug in VarUniq + o more unit tests for :u + +2020-08-30 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200830 + Merge with NetBSD make, pick up + o allow for strict type checking for Boolean + o Var_Parse never returns NULL + o Var_Subst never returns NULL + o Lst_Find now takes boolean match function + o rename Lst_Memeber to Lst_FindDatum + o rename LstNode functions to match their type + o rename GNode.iParents to implicitParents + o fix assertion failure for .SUFFIXES in archives + o compat.c: clean up documentation for CompatInterrupt and Compat_Run + remove unreachable code from CompatRunCommand + o main.c: simplify getBoolean + o stc.c: replace brk_string with simpler Str_Words + o suff.c: add debug macros + +2020-08-28 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200828 + Merge with NetBSD make, pick up + o lst.c: inline LstIsValid and LstNodeIsValid + o remove trailing S from Lst function names after migration complete + o more comment cleanup/clarification + o suff.c: clean up suffix handling + o more unit tests + +2020-08-26 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200826 + Merge with NetBSD make, pick up + o enum.c: distinguish between bitsets containing flags and + ordinary enums + o var.c: fix error message for ::!= modifier with shell error + o fix bugs in -DCLEANUP mode + +2020-08-24 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200824 + Merge with NetBSD make, pick up + o in debug mode, print GNode details in symbols + +2020-08-23 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200823 + Merge with NetBSD make, pick up + o lst.c: more asserts, + make args to Lst_Find match others. + o var.c: pass flags to VarAdd + o arch.c: use Buffer + o str.c: brk_string return size_t for nwords + o more unit tests + +2020-08-22 Simon J Gerraty + + * VERSION (_MAKE_VERSION): + Merge with NetBSD make, pick up + o var.c: support for read-only variables eg .SHELL + being the shell used to run scripts. + o lst.c: more simplification + o more documentation and style cleanup + o more unit tests + o ensure unit-test/Makefile is run by TEST_MAKE + o reduce duplication of header inclusion + +2020-08-21 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200821 + Merge with NetBSD make, pick up + o lst.c: revert invalid assertion - but document it + o dir.c: split Dir_Init into two functions + +2020-08-20 Simon J Gerraty + + * lst.c: needs inttypes.h on Linux + + * VERSION (_MAKE_VERSION): 20200820 + Merge with NetBSD make, pick up + o make.1: clarify some passages + o var.c: more cleanup, clarify comments + o make_malloc.c: remove unreachable code + o cond.c: make CondGetString easier to debug + o simplify list usage + o unit-tests: more + +2020-08-16 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200816 + Merge with NetBSD make, pick up + o refactor unit-tests to be more fine grained + not all tests moved yet + +2020-08-14 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200814 + Merge with NetBSD make, pick up + o more str_concat variants + o more enums for flags + o var.c: cleanup for higher warnings level + +2020-08-10 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200810 + Merge with NetBSD make, pick up + o more unit tests + o general comment and style cleanup + +2020-08-08 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200808 + Merge with NetBSD make, pick up + o enum.[ch]: streamline, enums for use in flags and debug output + o cond.c: cleanup + o var.c: reduce duplicate code for modifiers + debug logging for Var_Parse + more detailed debug output + o more unit tests + +2020-08-06 Simon J Gerraty + + * unit-tests/Makefile: -r for recursive and include Makefile.inc + so I can run tests in meta mode + supress extra noise if in meta mode + + * VERSION (_MAKE_VERSION): 20200806 + Merge with NetBSD make, pick up + o parse.c: remove VARE_WANTRES for LINT + we just want to check parsing (for now). + +2020-08-05 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200805 + Merge with NetBSD make, pick up + o make.1: Rework the description of dependence operators + +2020-08-03 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200803 + Merge with NetBSD make, pick up + o revert some C99 usage, for max portability + o unit-tests/lint + +2020-08-02 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200802 + Merge with NetBSD make, pick up + o more unit tests + +2020-08-01 Simon J Gerraty + + * Remove NetBSD specific plumbing from unit-tests/Makefile + + * VERSION (_MAKE_VERSION): 20200801 + Merge with NetBSD make, pick up + o make Var_Value return const + o size_t for buf sizes + o optimize some buffer operations - avoid strlen + +2020-07-31 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200731 + Merge with NetBSD make, pick up + o var.c: fix undefinded behavior for incomplete :t modifier + fixes unit-test/moderrs on Ubuntu + o parse.c: When parsing variable assignments other than := + if DEBUG(LINT) test substition of value, so we get a file and + line number in the resulting error. + o dir.c: fix parsing of nested braces in dependency lines + add unit-tests + +2020-07-30 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200730 + Merge with NetBSD make, pick up + o var.c: minor cleanup + o unit-tests: more tests to improve code coverage + +2020-07-28 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200728 + Merge with NetBSD make, pick up + o var.c: more optimizations + +2020-07-26 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200726 + Merge with NetBSD make, pick up + o collapse lsd.lib into lst.c - reduce code size and allow inlining + o lots of function comment updates + o var.c: more optimizations + o make return of Var_Parse const + +2020-07-20 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200720 + Merge with NetBSD make, pick up + o DEBUG_HASH report stats at end and tone down the noise + o var.c: each flag type gets its own prefix. + move SysV string matching to var.c + make ampersand in ${VAR:from=to&} an ordinary character + cleanup and simplify implementation of modifiers + o make.1: move documentation for assignment modifiers + +2020-07-18 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200718 + Merge with NetBSD make, pick up + o DEBUG_HASH to see how well the hash tables are working + +2020-07-11 Simon J Gerraty + + * bsd.after-import.mk: make sure we update unit-tests/Makefile + 2020-07-10 Simon J Gerraty * configure.in: use AC_INCLUDES_DEFAULT rather than AC_HEADER_STDC Modified: vendor/NetBSD/bmake/dist/FILES ============================================================================== --- vendor/NetBSD/bmake/dist/FILES Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/FILES Sat Sep 5 16:11:04 2020 (r365361) @@ -23,6 +23,8 @@ configure.in dir.c dir.h dirname.c +enum.c +enum.h filemon/filemon.h filemon/filemon_dev.c filemon/filemon_ktrace.c @@ -34,36 +36,8 @@ hash.h install-sh job.c job.h +lst.c lst.h -lst.lib/Makefile -lst.lib/lstAppend.c -lst.lib/lstAtEnd.c -lst.lib/lstAtFront.c -lst.lib/lstClose.c -lst.lib/lstConcat.c -lst.lib/lstDatum.c -lst.lib/lstDeQueue.c -lst.lib/lstDestroy.c -lst.lib/lstDupl.c -lst.lib/lstEnQueue.c -lst.lib/lstFind.c -lst.lib/lstFindFrom.c -lst.lib/lstFirst.c -lst.lib/lstForEach.c -lst.lib/lstForEachFrom.c -lst.lib/lstInit.c -lst.lib/lstInsert.c -lst.lib/lstInt.h -lst.lib/lstIsAtEnd.c -lst.lib/lstIsEmpty.c -lst.lib/lstLast.c -lst.lib/lstMember.c -lst.lib/lstNext.c -lst.lib/lstOpen.c -lst.lib/lstPrev.c -lst.lib/lstRemove.c -lst.lib/lstReplace.c -lst.lib/lstSucc.c machine.sh main.c make-bootstrap.sh.in @@ -88,7 +62,6 @@ ranlib.h realpath.c setenv.c sigcompat.c -sprite.h str.c stresep.c strlcpy.c @@ -100,22 +73,234 @@ trace.c trace.h unit-tests/Makefile unit-tests/Makefile.config.in +unit-tests/archive.exp +unit-tests/archive.mk +unit-tests/archive-suffix.exp +unit-tests/archive-suffix.mk +unit-tests/cmd-interrupt.exp +unit-tests/cmd-interrupt.mk +unit-tests/cmdline.exp +unit-tests/cmdline.mk unit-tests/comment.exp unit-tests/comment.mk +unit-tests/cond-cmp-numeric-eq.exp +unit-tests/cond-cmp-numeric-eq.mk +unit-tests/cond-cmp-numeric-ge.exp +unit-tests/cond-cmp-numeric-ge.mk +unit-tests/cond-cmp-numeric-gt.exp +unit-tests/cond-cmp-numeric-gt.mk +unit-tests/cond-cmp-numeric-le.exp +unit-tests/cond-cmp-numeric-le.mk +unit-tests/cond-cmp-numeric-lt.exp +unit-tests/cond-cmp-numeric-lt.mk +unit-tests/cond-cmp-numeric-ne.exp +unit-tests/cond-cmp-numeric-ne.mk +unit-tests/cond-cmp-numeric.exp +unit-tests/cond-cmp-numeric.mk +unit-tests/cond-cmp-string.exp +unit-tests/cond-cmp-string.mk +unit-tests/cond-func.exp +unit-tests/cond-func.mk +unit-tests/cond-func-commands.exp +unit-tests/cond-func-commands.mk +unit-tests/cond-func-defined.exp +unit-tests/cond-func-defined.mk +unit-tests/cond-func-empty.exp +unit-tests/cond-func-empty.mk +unit-tests/cond-func-exists.exp +unit-tests/cond-func-exists.mk +unit-tests/cond-func-make.exp +unit-tests/cond-func-make.mk +unit-tests/cond-func-target.exp +unit-tests/cond-func-target.mk +unit-tests/cond-late.exp +unit-tests/cond-late.mk +unit-tests/cond-op-and.exp +unit-tests/cond-op-and.mk +unit-tests/cond-op-not.exp +unit-tests/cond-op-not.mk +unit-tests/cond-op-or.exp +unit-tests/cond-op-or.mk +unit-tests/cond-op-parentheses.exp +unit-tests/cond-op-parentheses.mk +unit-tests/cond-op.exp +unit-tests/cond-op.mk +unit-tests/cond-short.exp +unit-tests/cond-short.mk +unit-tests/cond-token-number.exp +unit-tests/cond-token-number.mk +unit-tests/cond-token-plain.exp +unit-tests/cond-token-plain.mk +unit-tests/cond-token-string.exp +unit-tests/cond-token-string.mk +unit-tests/cond-token-var.exp +unit-tests/cond-token-var.mk unit-tests/cond1.exp unit-tests/cond1.mk unit-tests/cond2.exp unit-tests/cond2.mk -unit-tests/cond-late.mk -unit-tests/cond-late.exp -unit-tests/cond-short.mk -unit-tests/cond-short.exp +unit-tests/counter.exp +unit-tests/counter.mk +unit-tests/dep-colon.exp +unit-tests/dep-colon.mk +unit-tests/dep-double-colon.exp +unit-tests/dep-double-colon.mk +unit-tests/dep-exclam.exp +unit-tests/dep-exclam.mk +unit-tests/dep-none.exp +unit-tests/dep-none.mk +unit-tests/dep-var.exp +unit-tests/dep-var.mk +unit-tests/dep-wildcards.exp +unit-tests/dep-wildcards.mk +unit-tests/dep.exp +unit-tests/dep.mk +unit-tests/depsrc-exec.exp +unit-tests/depsrc-exec.mk +unit-tests/depsrc-ignore.exp +unit-tests/depsrc-ignore.mk +unit-tests/depsrc-made.exp +unit-tests/depsrc-made.mk +unit-tests/depsrc-make.exp +unit-tests/depsrc-make.mk +unit-tests/depsrc-meta.exp +unit-tests/depsrc-meta.mk +unit-tests/depsrc-nometa.exp +unit-tests/depsrc-nometa.mk +unit-tests/depsrc-nometa_cmp.exp +unit-tests/depsrc-nometa_cmp.mk +unit-tests/depsrc-nopath.exp +unit-tests/depsrc-nopath.mk +unit-tests/depsrc-notmain.exp +unit-tests/depsrc-notmain.mk +unit-tests/depsrc-optional.exp +unit-tests/depsrc-optional.mk +unit-tests/depsrc-phony.exp +unit-tests/depsrc-phony.mk +unit-tests/depsrc-precious.exp +unit-tests/depsrc-precious.mk +unit-tests/depsrc-recursive.exp +unit-tests/depsrc-recursive.mk +unit-tests/depsrc-silent.exp +unit-tests/depsrc-silent.mk +unit-tests/depsrc-use.exp +unit-tests/depsrc-use.mk +unit-tests/depsrc-usebefore.exp +unit-tests/depsrc-usebefore.mk +unit-tests/depsrc-usebefore-double-colon.exp +unit-tests/depsrc-usebefore-double-colon.mk +unit-tests/depsrc-wait.exp +unit-tests/depsrc-wait.mk +unit-tests/depsrc.exp +unit-tests/depsrc.mk +unit-tests/deptgt-begin.exp +unit-tests/deptgt-begin.mk +unit-tests/deptgt-default.exp +unit-tests/deptgt-default.mk +unit-tests/deptgt-delete_on_error.exp +unit-tests/deptgt-delete_on_error.mk +unit-tests/deptgt-end.exp +unit-tests/deptgt-end.mk +unit-tests/deptgt-error.exp +unit-tests/deptgt-error.mk +unit-tests/deptgt-ignore.exp +unit-tests/deptgt-ignore.mk +unit-tests/deptgt-interrupt.exp +unit-tests/deptgt-interrupt.mk +unit-tests/deptgt-main.exp +unit-tests/deptgt-main.mk +unit-tests/deptgt-makeflags.exp +unit-tests/deptgt-makeflags.mk +unit-tests/deptgt-no_parallel.exp +unit-tests/deptgt-no_parallel.mk +unit-tests/deptgt-nopath.exp +unit-tests/deptgt-nopath.mk +unit-tests/deptgt-notparallel.exp +unit-tests/deptgt-notparallel.mk +unit-tests/deptgt-objdir.exp +unit-tests/deptgt-objdir.mk +unit-tests/deptgt-order.exp +unit-tests/deptgt-order.mk +unit-tests/deptgt-path-suffix.exp +unit-tests/deptgt-path-suffix.mk +unit-tests/deptgt-path.exp +unit-tests/deptgt-path.mk +unit-tests/deptgt-phony.exp +unit-tests/deptgt-phony.mk +unit-tests/deptgt-precious.exp +unit-tests/deptgt-precious.mk +unit-tests/deptgt-shell.exp +unit-tests/deptgt-shell.mk +unit-tests/deptgt-silent.exp +unit-tests/deptgt-silent.mk +unit-tests/deptgt-stale.exp +unit-tests/deptgt-stale.mk +unit-tests/deptgt-suffixes.exp +unit-tests/deptgt-suffixes.mk +unit-tests/deptgt.exp +unit-tests/deptgt.mk +unit-tests/dir.exp +unit-tests/dir.mk +unit-tests/dir-expand-path.exp +unit-tests/dir-expand-path.mk +unit-tests/directive-elif.exp +unit-tests/directive-elif.mk +unit-tests/directive-elifdef.exp +unit-tests/directive-elifdef.mk +unit-tests/directive-elifmake.exp +unit-tests/directive-elifmake.mk +unit-tests/directive-elifndef.exp +unit-tests/directive-elifndef.mk +unit-tests/directive-elifnmake.exp +unit-tests/directive-elifnmake.mk +unit-tests/directive-else.exp +unit-tests/directive-else.mk +unit-tests/directive-endif.exp +unit-tests/directive-endif.mk +unit-tests/directive-error.exp +unit-tests/directive-error.mk +unit-tests/directive-export-env.exp +unit-tests/directive-export-env.mk +unit-tests/directive-export-literal.exp +unit-tests/directive-export-literal.mk +unit-tests/directive-export.exp +unit-tests/directive-export.mk +unit-tests/directive-for.exp +unit-tests/directive-for.mk +unit-tests/directive-for-generating-endif.exp +unit-tests/directive-for-generating-endif.mk +unit-tests/directive-if.exp +unit-tests/directive-if.mk +unit-tests/directive-ifdef.exp +unit-tests/directive-ifdef.mk +unit-tests/directive-ifmake.exp +unit-tests/directive-ifmake.mk +unit-tests/directive-ifndef.exp +unit-tests/directive-ifndef.mk +unit-tests/directive-ifnmake.exp +unit-tests/directive-ifnmake.mk +unit-tests/directive-info.exp +unit-tests/directive-info.mk +unit-tests/directive-undef.exp +unit-tests/directive-undef.mk +unit-tests/directive-unexport-env.exp +unit-tests/directive-unexport-env.mk +unit-tests/directive-unexport.exp +unit-tests/directive-unexport.mk +unit-tests/directive-warning.exp +unit-tests/directive-warning.mk +unit-tests/directive.exp +unit-tests/directive.mk +unit-tests/directives.exp +unit-tests/directives.mk unit-tests/dollar.exp unit-tests/dollar.mk unit-tests/doterror.exp unit-tests/doterror.mk unit-tests/dotwait.exp unit-tests/dotwait.mk +unit-tests/envfirst.exp +unit-tests/envfirst.mk unit-tests/error.exp unit-tests/error.mk unit-tests/escape.exp @@ -124,6 +309,8 @@ unit-tests/export-all.exp unit-tests/export-all.mk unit-tests/export-env.exp unit-tests/export-env.mk +unit-tests/export-variants.exp +unit-tests/export-variants.mk unit-tests/export.exp unit-tests/export.mk unit-tests/forloop.exp @@ -138,6 +325,10 @@ unit-tests/include-main.exp unit-tests/include-main.mk unit-tests/include-sub.mk unit-tests/include-subsub.mk +unit-tests/lint.exp +unit-tests/lint.mk +unit-tests/make-exported.exp +unit-tests/make-exported.mk unit-tests/misc.exp unit-tests/misc.mk unit-tests/moderrs.exp @@ -146,12 +337,62 @@ unit-tests/modmatch.exp unit-tests/modmatch.mk unit-tests/modmisc.exp unit-tests/modmisc.mk -unit-tests/modorder.exp -unit-tests/modorder.mk unit-tests/modts.exp unit-tests/modts.mk unit-tests/modword.exp unit-tests/modword.mk +unit-tests/opt-backwards.exp +unit-tests/opt-backwards.mk +unit-tests/opt-chdir.exp +unit-tests/opt-chdir.mk +unit-tests/opt-debug.exp +unit-tests/opt-debug.mk +unit-tests/opt-debug-g1.exp +unit-tests/opt-debug-g1.mk +unit-tests/opt-define.exp +unit-tests/opt-define.mk +unit-tests/opt-env.exp +unit-tests/opt-env.mk +unit-tests/opt-file.exp +unit-tests/opt-file.mk +unit-tests/opt-ignore.exp +unit-tests/opt-ignore.mk +unit-tests/opt-include-dir.exp +unit-tests/opt-include-dir.mk +unit-tests/opt-jobs-internal.exp +unit-tests/opt-jobs-internal.mk +unit-tests/opt-jobs.exp +unit-tests/opt-jobs.mk +unit-tests/opt-keep-going.exp +unit-tests/opt-keep-going.mk +unit-tests/opt-m-include-dir.exp +unit-tests/opt-m-include-dir.mk +unit-tests/opt-no-action-at-all.exp +unit-tests/opt-no-action-at-all.mk +unit-tests/opt-no-action.exp +unit-tests/opt-no-action.mk +unit-tests/opt-query.exp +unit-tests/opt-query.mk +unit-tests/opt-raw.exp +unit-tests/opt-raw.mk +unit-tests/opt-silent.exp +unit-tests/opt-silent.mk +unit-tests/opt-touch.exp +unit-tests/opt-touch.mk +unit-tests/opt-tracefile.exp +unit-tests/opt-tracefile.mk +unit-tests/opt-var-expanded.exp +unit-tests/opt-var-expanded.mk +unit-tests/opt-var-literal.exp +unit-tests/opt-var-literal.mk +unit-tests/opt-warnings-as-errors.exp +unit-tests/opt-warnings-as-errors.mk +unit-tests/opt-where-am-i.exp +unit-tests/opt-where-am-i.mk +unit-tests/opt-x-reduce-exported.exp +unit-tests/opt-x-reduce-exported.mk +unit-tests/opt.exp +unit-tests/opt.mk unit-tests/order.exp unit-tests/order.mk unit-tests/phony-end.exp @@ -162,6 +403,28 @@ unit-tests/posix1.exp unit-tests/posix1.mk unit-tests/qequals.exp unit-tests/qequals.mk +unit-tests/recursive.exp +unit-tests/recursive.mk +unit-tests/sh-dots.exp +unit-tests/sh-dots.mk +unit-tests/sh-jobs-error.exp +unit-tests/sh-jobs-error.mk +unit-tests/sh-jobs.exp +unit-tests/sh-jobs.mk +unit-tests/sh-leading-at.exp +unit-tests/sh-leading-at.mk +unit-tests/sh-leading-hyphen.exp +unit-tests/sh-leading-hyphen.mk +unit-tests/sh-leading-plus.exp +unit-tests/sh-leading-plus.mk +unit-tests/sh-meta-chars.exp +unit-tests/sh-meta-chars.mk +unit-tests/sh-multi-line.exp +unit-tests/sh-multi-line.mk +unit-tests/sh-single-line.exp +unit-tests/sh-single-line.mk +unit-tests/sh.exp +unit-tests/sh.mk unit-tests/suffixes.exp unit-tests/suffixes.mk unit-tests/sunshcmd.exp @@ -174,12 +437,204 @@ unit-tests/unexport-env.exp unit-tests/unexport-env.mk unit-tests/unexport.exp unit-tests/unexport.mk +unit-tests/use-inference.exp +unit-tests/use-inference.mk +unit-tests/var-class-cmdline.exp +unit-tests/var-class-cmdline.mk +unit-tests/var-class-env.exp +unit-tests/var-class-env.mk +unit-tests/var-class-global.exp +unit-tests/var-class-global.mk +unit-tests/var-class-local-legacy.exp +unit-tests/var-class-local-legacy.mk +unit-tests/var-class-local.exp +unit-tests/var-class-local.mk +unit-tests/var-class.exp +unit-tests/var-class.mk +unit-tests/var-op-append.exp +unit-tests/var-op-append.mk +unit-tests/var-op-assign.exp +unit-tests/var-op-assign.mk +unit-tests/var-op-default.exp +unit-tests/var-op-default.mk +unit-tests/var-op-expand.exp +unit-tests/var-op-expand.mk +unit-tests/var-op-shell.exp +unit-tests/var-op-shell.mk +unit-tests/var-op.exp +unit-tests/var-op.mk unit-tests/varcmd.exp unit-tests/varcmd.mk +unit-tests/vardebug.exp +unit-tests/vardebug.mk +unit-tests/varfind.exp +unit-tests/varfind.mk unit-tests/varmisc.exp unit-tests/varmisc.mk +unit-tests/varmod-assign.exp +unit-tests/varmod-assign.mk +unit-tests/varmod-defined.exp +unit-tests/varmod-defined.mk unit-tests/varmod-edge.exp unit-tests/varmod-edge.mk +unit-tests/varmod-exclam-shell.exp +unit-tests/varmod-exclam-shell.mk +unit-tests/varmod-extension.exp +unit-tests/varmod-extension.mk +unit-tests/varmod-gmtime.exp +unit-tests/varmod-gmtime.mk +unit-tests/varmod-hash.exp +unit-tests/varmod-hash.mk +unit-tests/varmod-head.exp +unit-tests/varmod-head.mk +unit-tests/varmod-ifelse.exp +unit-tests/varmod-ifelse.mk +unit-tests/varmod-l-name-to-value.exp +unit-tests/varmod-l-name-to-value.mk +unit-tests/varmod-localtime.exp +unit-tests/varmod-localtime.mk +unit-tests/varmod-loop.exp +unit-tests/varmod-loop.mk +unit-tests/varmod-match-escape.exp +unit-tests/varmod-match-escape.mk +unit-tests/varmod-match.exp +unit-tests/varmod-match.mk +unit-tests/varmod-no-match.exp +unit-tests/varmod-no-match.mk +unit-tests/varmod-order-reverse.exp +unit-tests/varmod-order-reverse.mk +unit-tests/varmod-order-shuffle.exp +unit-tests/varmod-order-shuffle.mk +unit-tests/varmod-order.exp +unit-tests/varmod-order.mk +unit-tests/varmod-path.exp +unit-tests/varmod-path.mk +unit-tests/varmod-quote-dollar.exp +unit-tests/varmod-quote-dollar.mk +unit-tests/varmod-quote.exp +unit-tests/varmod-quote.mk +unit-tests/varmod-range.exp +unit-tests/varmod-range.mk +unit-tests/varmod-remember.exp +unit-tests/varmod-remember.mk +unit-tests/varmod-root.exp +unit-tests/varmod-root.mk +unit-tests/varmod-select-words.exp +unit-tests/varmod-select-words.mk +unit-tests/varmod-shell.exp +unit-tests/varmod-shell.mk +unit-tests/varmod-subst-regex.exp +unit-tests/varmod-subst-regex.mk +unit-tests/varmod-subst.exp +unit-tests/varmod-subst.mk +unit-tests/varmod-sysv.exp +unit-tests/varmod-sysv.mk +unit-tests/varmod-tail.exp +unit-tests/varmod-tail.mk +unit-tests/varmod-to-abs.exp +unit-tests/varmod-to-abs.mk +unit-tests/varmod-to-lower.exp +unit-tests/varmod-to-lower.mk +unit-tests/varmod-to-many-words.exp +unit-tests/varmod-to-many-words.mk +unit-tests/varmod-to-one-word.exp +unit-tests/varmod-to-one-word.mk +unit-tests/varmod-to-separator.exp +unit-tests/varmod-to-separator.mk +unit-tests/varmod-to-upper.exp +unit-tests/varmod-to-upper.mk +unit-tests/varmod-undefined.exp +unit-tests/varmod-undefined.mk +unit-tests/varmod-unique.exp +unit-tests/varmod-unique.mk +unit-tests/varmod.exp +unit-tests/varmod.mk +unit-tests/varname-dollar.exp +unit-tests/varname-dollar.mk +unit-tests/varname-dot-alltargets.exp +unit-tests/varname-dot-alltargets.mk +unit-tests/varname-dot-curdir.exp +unit-tests/varname-dot-curdir.mk +unit-tests/varname-dot-includes.exp +unit-tests/varname-dot-includes.mk +unit-tests/varname-dot-includedfromdir.exp +unit-tests/varname-dot-includedfromdir.mk +unit-tests/varname-dot-includedfromfile.exp +unit-tests/varname-dot-includedfromfile.mk +unit-tests/varname-dot-libs.exp +unit-tests/varname-dot-libs.mk +unit-tests/varname-dot-make-dependfile.exp +unit-tests/varname-dot-make-dependfile.mk +unit-tests/varname-dot-make-expand_variables.exp +unit-tests/varname-dot-make-expand_variables.mk +unit-tests/varname-dot-make-exported.exp +unit-tests/varname-dot-make-exported.mk +unit-tests/varname-dot-make-jobs-prefix.exp +unit-tests/varname-dot-make-jobs-prefix.mk +unit-tests/varname-dot-make-jobs.exp +unit-tests/varname-dot-make-jobs.mk +unit-tests/varname-dot-make-level.exp +unit-tests/varname-dot-make-level.mk +unit-tests/varname-dot-make-makefile_preference.exp +unit-tests/varname-dot-make-makefile_preference.mk +unit-tests/varname-dot-make-makefiles.exp +unit-tests/varname-dot-make-makefiles.mk +unit-tests/varname-dot-make-meta-bailiwick.exp +unit-tests/varname-dot-make-meta-bailiwick.mk +unit-tests/varname-dot-make-meta-created.exp +unit-tests/varname-dot-make-meta-created.mk +unit-tests/varname-dot-make-meta-files.exp +unit-tests/varname-dot-make-meta-files.mk +unit-tests/varname-dot-make-meta-ignore_filter.exp +unit-tests/varname-dot-make-meta-ignore_filter.mk +unit-tests/varname-dot-make-meta-ignore_paths.exp +unit-tests/varname-dot-make-meta-ignore_paths.mk +unit-tests/varname-dot-make-meta-ignore_patterns.exp +unit-tests/varname-dot-make-meta-ignore_patterns.mk +unit-tests/varname-dot-make-meta-prefix.exp +unit-tests/varname-dot-make-meta-prefix.mk +unit-tests/varname-dot-make-mode.exp +unit-tests/varname-dot-make-mode.mk +unit-tests/varname-dot-make-path_filemon.exp +unit-tests/varname-dot-make-path_filemon.mk +unit-tests/varname-dot-make-pid.exp +unit-tests/varname-dot-make-pid.mk +unit-tests/varname-dot-make-ppid.exp +unit-tests/varname-dot-make-ppid.mk +unit-tests/varname-dot-make-save_dollars.exp +unit-tests/varname-dot-make-save_dollars.mk +unit-tests/varname-dot-makeoverrides.exp +unit-tests/varname-dot-makeoverrides.mk +unit-tests/varname-dot-newline.exp +unit-tests/varname-dot-newline.mk +unit-tests/varname-dot-objdir.exp +unit-tests/varname-dot-objdir.mk +unit-tests/varname-dot-parsedir.exp +unit-tests/varname-dot-parsedir.mk +unit-tests/varname-dot-parsefile.exp +unit-tests/varname-dot-parsefile.mk +unit-tests/varname-dot-path.exp +unit-tests/varname-dot-path.mk +unit-tests/varname-dot-shell.exp +unit-tests/varname-dot-shell.mk +unit-tests/varname-dot-targets.exp +unit-tests/varname-dot-targets.mk +unit-tests/varname-empty.exp +unit-tests/varname-empty.mk +unit-tests/varname-make.exp +unit-tests/varname-make.mk +unit-tests/varname-make_print_var_on_error.exp +unit-tests/varname-make_print_var_on_error.mk +unit-tests/varname-makeflags.exp +unit-tests/varname-makeflags.mk +unit-tests/varname-pwd.exp +unit-tests/varname-pwd.mk +unit-tests/varname-vpath.exp +unit-tests/varname-vpath.mk +unit-tests/varname.exp +unit-tests/varname.mk +unit-tests/varparse-dynamic.exp +unit-tests/varparse-dynamic.mk unit-tests/varquote.exp unit-tests/varquote.mk unit-tests/varshell.exp Modified: vendor/NetBSD/bmake/dist/LICENSE ============================================================================== --- vendor/NetBSD/bmake/dist/LICENSE Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/LICENSE Sat Sep 5 16:11:04 2020 (r365361) @@ -3,6 +3,7 @@ original contributors or assignees. Including: Copyright (c) 1993-2020, Simon J Gerraty + Copyright (c) 2020, Roland Illig Copyright (c) 2009-2016, Juniper Networks, Inc. Copyright (c) 2009, John Birrell. Copyright (c) 1997-2020 The NetBSD Foundation, Inc. Modified: vendor/NetBSD/bmake/dist/Makefile ============================================================================== --- vendor/NetBSD/bmake/dist/Makefile Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/Makefile Sat Sep 5 16:11:04 2020 (r365361) @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.107 2020/06/07 21:18:46 sjg Exp $ +# $Id: Makefile,v 1.112 2020/08/28 16:26:17 sjg Exp $ PROG= bmake @@ -8,9 +8,11 @@ SRCS= \ compat.c \ cond.c \ dir.c \ + enum.c \ for.c \ hash.c \ job.c \ + lst.c \ main.c \ make.c \ make_malloc.c \ @@ -25,36 +27,6 @@ SRCS= \ util.c \ var.c -# from lst.lib/ -SRCS+= \ - lstAppend.c \ - lstAtEnd.c \ - lstAtFront.c \ - lstClose.c \ - lstConcat.c \ - lstDatum.c \ - lstDeQueue.c \ - lstDestroy.c \ - lstDupl.c \ - lstEnQueue.c \ - lstFind.c \ - lstFindFrom.c \ - lstFirst.c \ - lstForEach.c \ - lstForEachFrom.c \ - lstInit.c \ - lstInsert.c \ - lstIsAtEnd.c \ - lstIsEmpty.c \ - lstLast.c \ - lstMember.c \ - lstNext.c \ - lstOpen.c \ - lstPrev.c \ - lstRemove.c \ - lstReplace.c \ - lstSucc.c - .-include "VERSION" .-include "Makefile.inc" @@ -97,7 +69,6 @@ COPTS.filemon_dev.c += -DHAVE_FILEMON_H -I${FILEMON_H: .endif # USE_FILEMON .PATH: ${srcdir} -.PATH: ${srcdir}/lst.lib .if make(obj) || make(clean) SUBDIR+= unit-tests @@ -109,7 +80,7 @@ SUBDIR+= unit-tests # list of OS's which are derrived from BSD4.4 BSD44_LIST= NetBSD FreeBSD OpenBSD DragonFly MirBSD Bitrig # we are... -OS!= uname -s +OS := ${.MAKE.OS:U${uname -s:L:sh}} # are we 4.4BSD ? isBSD44:=${BSD44_LIST:M${OS}} @@ -237,5 +208,8 @@ install-mk: # end-delete2 # A simple unit-test driver to help catch regressions +TEST_MAKE ?= ${.OBJDIR}/${PROG:T} accept test: - cd ${.CURDIR}/unit-tests && MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET} + cd ${.CURDIR}/unit-tests && \ + MAKEFLAGS= ${TEST_MAKE} -r -m / ${.TARGET} ${TESTS:DTESTS=${TESTS:Q}} + Modified: vendor/NetBSD/bmake/dist/VERSION ============================================================================== --- vendor/NetBSD/bmake/dist/VERSION Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/VERSION Sat Sep 5 16:11:04 2020 (r365361) @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200710 +_MAKE_VERSION=20200902 Modified: vendor/NetBSD/bmake/dist/arch.c ============================================================================== --- vendor/NetBSD/bmake/dist/arch.c Sat Sep 5 10:16:24 2020 (r365360) +++ vendor/NetBSD/bmake/dist/arch.c Sat Sep 5 16:11:04 2020 (r365361) @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: arch.c,v 1.107 2020/08/30 11:15:05 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.107 2020/08/30 11:15:05 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: arch.c,v 1.107 2020/08/30 11:15:05 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -94,7 +94,7 @@ __RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 ri * The interface to this module is: * Arch_ParseArchive Given an archive specification, return a list * of GNode's, one for each member in the spec. - * FAILURE is returned if the specification is + * FALSE is returned if the specification is * invalid for some reason. * * Arch_Touch Alter the modification time of the archive @@ -184,12 +184,9 @@ typedef struct Arch { size_t fnamesize; /* Size of the string table */ } Arch; -static int ArchFindArchive(const void *, const void *); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@freebsd.org Sat Sep 5 16:44:38 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0C9AF3D07DC; Sat, 5 Sep 2020 16:44:38 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BkL456YSfz4dCP; Sat, 5 Sep 2020 16:44:37 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AB06220B2E; Sat, 5 Sep 2020 16:44:37 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 085Gibej029449; Sat, 5 Sep 2020 16:44:37 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 085GibwG029448; Sat, 5 Sep 2020 16:44:37 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202009051644.085GibwG029448@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Sat, 5 Sep 2020 16:44:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r365363 - vendor/NetBSD/bmake/20200902 X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: vendor/NetBSD/bmake/20200902 X-SVN-Commit-Revision: 365363 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Sep 2020 16:44:38 -0000 Author: sjg Date: Sat Sep 5 16:44:37 2020 New Revision: 365363 URL: https://svnweb.freebsd.org/changeset/base/365363 Log: tag bmake-20200902 Added: vendor/NetBSD/bmake/20200902/ - copied from r365362, vendor/NetBSD/bmake/dist/