From owner-svn-src-projects@freebsd.org Mon Apr 11 15:25:04 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D33C9B0BF3B for ; Mon, 11 Apr 2016 15:25:04 +0000 (UTC) (envelope-from gjb@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 mx1.freebsd.org (Postfix) with ESMTPS id 5C86915AD; Mon, 11 Apr 2016 15:25:04 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3BFP3SD092583; Mon, 11 Apr 2016 15:25:03 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3BFOxpt092539; Mon, 11 Apr 2016 15:24:59 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201604111524.u3BFOxpt092539@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Mon, 11 Apr 2016 15:24:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297824 - in projects/release-pkg: bin/csh bin/sh bin/sh/tests/builtins cddl/contrib/opensolaris/cmd/dtrace cddl/contrib/opensolaris/cmd/zdb cddl/contrib/opensolaris/cmd/zpool cddl/cont... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2016 15:25:04 -0000 Author: gjb Date: Mon Apr 11 15:24:59 2016 New Revision: 297824 URL: https://svnweb.freebsd.org/changeset/base/297824 Log: MFH Sponsored by: The FreeBSD Foundation Added: projects/release-pkg/sys/arm/allwinner/aw_ccu.c - copied unchanged from r297823, head/sys/arm/allwinner/aw_ccu.c projects/release-pkg/sys/arm/allwinner/aw_reset.c - copied unchanged from r297823, head/sys/arm/allwinner/aw_reset.c projects/release-pkg/sys/arm/allwinner/clk/ - copied from r297823, head/sys/arm/allwinner/clk/ projects/release-pkg/sys/dev/acpica/acpi_pcivar.h - copied unchanged from r297823, head/sys/dev/acpica/acpi_pcivar.h projects/release-pkg/sys/mips/mediatek/ - copied from r297823, head/sys/mips/mediatek/ Deleted: projects/release-pkg/sys/arm/allwinner/a10_clk.c projects/release-pkg/sys/arm/allwinner/a10_clk.h projects/release-pkg/sys/arm/allwinner/a31/a31_clk.c projects/release-pkg/sys/arm/allwinner/a31/a31_clk.h projects/release-pkg/sys/boot/fdt/dts/arm/sun4i-a10.dtsi projects/release-pkg/sys/boot/fdt/dts/arm/sun7i-a20.dtsi Modified: projects/release-pkg/bin/csh/config_p.h projects/release-pkg/bin/sh/miscbltin.c projects/release-pkg/bin/sh/parser.c projects/release-pkg/bin/sh/tests/builtins/getopts1.0 projects/release-pkg/bin/sh/tests/builtins/getopts2.0 projects/release-pkg/bin/sh/tests/builtins/getopts9.0 projects/release-pkg/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c projects/release-pkg/cddl/contrib/opensolaris/cmd/zdb/zdb.c projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c projects/release-pkg/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c projects/release-pkg/lib/libc/aarch64/gen/Makefile.inc projects/release-pkg/lib/libc/aarch64/sys/Makefile.inc projects/release-pkg/lib/libc/db/hash/hash.c projects/release-pkg/lib/libc/db/hash/hash_buf.c projects/release-pkg/lib/libc/gen/err.c projects/release-pkg/lib/libc/gen/getmntinfo.c projects/release-pkg/lib/libc/gen/opendir.c projects/release-pkg/lib/libc/gen/semctl.c projects/release-pkg/lib/libc/gen/tls.c projects/release-pkg/lib/libc/include/compat.h projects/release-pkg/lib/libc/locale/xlocale_private.h projects/release-pkg/lib/libc/net/base64.c projects/release-pkg/lib/libc/net/getifaddrs.c projects/release-pkg/lib/libc/net/getservent.c projects/release-pkg/lib/libc/net/rcmd.c projects/release-pkg/lib/libc/posix1e/acl_support_nfs4.c projects/release-pkg/lib/libc/resolv/mtctxres.c projects/release-pkg/lib/libc/resolv/res_init.c projects/release-pkg/lib/libc/resolv/res_mkupdate.c projects/release-pkg/lib/libc/rpc/auth_none.c projects/release-pkg/lib/libc/rpc/clnt_perror.c projects/release-pkg/lib/libc/rpc/mt_misc.c projects/release-pkg/lib/libc/rpc/rpcdname.c projects/release-pkg/lib/libc/softfloat/timesoftfloat.c projects/release-pkg/lib/libc/uuid/uuid_to_string.c projects/release-pkg/lib/libc/xdr/xdr_mem.c projects/release-pkg/lib/libedit/filecomplete.c projects/release-pkg/lib/libedit/vi.c projects/release-pkg/lib/libfetch/ftp.c projects/release-pkg/lib/libpam/modules/pam_krb5/pam_krb5.c projects/release-pkg/lib/libpam/modules/pam_login_access/login_access.c projects/release-pkg/lib/libthr/thread/thr_affinity.c projects/release-pkg/lib/libthr/thread/thr_attr.c projects/release-pkg/lib/libthr/thread/thr_autoinit.c projects/release-pkg/lib/libthr/thread/thr_barrier.c projects/release-pkg/lib/libthr/thread/thr_barrierattr.c projects/release-pkg/lib/libthr/thread/thr_cancel.c projects/release-pkg/lib/libthr/thread/thr_clean.c projects/release-pkg/lib/libthr/thread/thr_concurrency.c projects/release-pkg/lib/libthr/thread/thr_cond.c projects/release-pkg/lib/libthr/thread/thr_condattr.c projects/release-pkg/lib/libthr/thread/thr_create.c projects/release-pkg/lib/libthr/thread/thr_detach.c projects/release-pkg/lib/libthr/thread/thr_equal.c projects/release-pkg/lib/libthr/thread/thr_event.c projects/release-pkg/lib/libthr/thread/thr_exit.c projects/release-pkg/lib/libthr/thread/thr_fork.c projects/release-pkg/lib/libthr/thread/thr_getcpuclockid.c projects/release-pkg/lib/libthr/thread/thr_getprio.c projects/release-pkg/lib/libthr/thread/thr_getschedparam.c projects/release-pkg/lib/libthr/thread/thr_getthreadid_np.c projects/release-pkg/lib/libthr/thread/thr_info.c projects/release-pkg/lib/libthr/thread/thr_init.c projects/release-pkg/lib/libthr/thread/thr_join.c projects/release-pkg/lib/libthr/thread/thr_kern.c projects/release-pkg/lib/libthr/thread/thr_kill.c projects/release-pkg/lib/libthr/thread/thr_list.c projects/release-pkg/lib/libthr/thread/thr_main_np.c projects/release-pkg/lib/libthr/thread/thr_multi_np.c projects/release-pkg/lib/libthr/thread/thr_mutex.c projects/release-pkg/lib/libthr/thread/thr_mutexattr.c projects/release-pkg/lib/libthr/thread/thr_once.c projects/release-pkg/lib/libthr/thread/thr_printf.c projects/release-pkg/lib/libthr/thread/thr_pspinlock.c projects/release-pkg/lib/libthr/thread/thr_resume_np.c projects/release-pkg/lib/libthr/thread/thr_rtld.c projects/release-pkg/lib/libthr/thread/thr_rwlock.c projects/release-pkg/lib/libthr/thread/thr_rwlockattr.c projects/release-pkg/lib/libthr/thread/thr_self.c projects/release-pkg/lib/libthr/thread/thr_sem.c projects/release-pkg/lib/libthr/thread/thr_setprio.c projects/release-pkg/lib/libthr/thread/thr_setschedparam.c projects/release-pkg/lib/libthr/thread/thr_sig.c projects/release-pkg/lib/libthr/thread/thr_single_np.c projects/release-pkg/lib/libthr/thread/thr_sleepq.c projects/release-pkg/lib/libthr/thread/thr_spec.c projects/release-pkg/lib/libthr/thread/thr_spinlock.c projects/release-pkg/lib/libthr/thread/thr_stack.c projects/release-pkg/lib/libthr/thread/thr_suspend_np.c projects/release-pkg/lib/libthr/thread/thr_switch_np.c projects/release-pkg/lib/libthr/thread/thr_symbols.c projects/release-pkg/lib/libthr/thread/thr_umtx.c projects/release-pkg/lib/libthr/thread/thr_yield.c projects/release-pkg/lib/libusb/libusb20.c projects/release-pkg/lib/libusbhid/descr.c projects/release-pkg/lib/libusbhid/usage.c projects/release-pkg/sbin/fsck_msdosfs/dir.c projects/release-pkg/sbin/geom/class/eli/geli.8 projects/release-pkg/sbin/geom/class/eli/geom_eli.c projects/release-pkg/sbin/geom/class/part/geom_part.c projects/release-pkg/sbin/reboot/nextboot.8 projects/release-pkg/sbin/reboot/nextboot.sh projects/release-pkg/sys/amd64/cloudabi64/cloudabi64_sysvec.c projects/release-pkg/sys/amd64/vmm/amd/svm_msr.c projects/release-pkg/sys/arm/allwinner/a10_ahci.c projects/release-pkg/sys/arm/allwinner/a10_codec.c projects/release-pkg/sys/arm/allwinner/a10_dmac.c projects/release-pkg/sys/arm/allwinner/a10_ehci.c projects/release-pkg/sys/arm/allwinner/a10_fb.c projects/release-pkg/sys/arm/allwinner/a10_hdmi.c projects/release-pkg/sys/arm/allwinner/a10_mmc.c projects/release-pkg/sys/arm/allwinner/a10_sramc.c projects/release-pkg/sys/arm/allwinner/a10_sramc.h projects/release-pkg/sys/arm/allwinner/a20/a20_if_dwc.c projects/release-pkg/sys/arm/allwinner/a31/a31_padconf.c projects/release-pkg/sys/arm/allwinner/aw_usbphy.c projects/release-pkg/sys/arm/allwinner/files.allwinner projects/release-pkg/sys/arm/allwinner/if_emac.c projects/release-pkg/sys/arm/altera/socfpga/socfpga_rstmgr.c projects/release-pkg/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c projects/release-pkg/sys/arm/arm/disassem.c projects/release-pkg/sys/arm/arm/gic.c projects/release-pkg/sys/arm/arm/locore.S projects/release-pkg/sys/arm/arm/physmem.c projects/release-pkg/sys/arm/arm/vm_machdep.c projects/release-pkg/sys/arm/broadcom/bcm2835/bcm2836.c projects/release-pkg/sys/arm/conf/A10 projects/release-pkg/sys/arm/conf/A20 projects/release-pkg/sys/arm/freescale/imx/imx6_sdma.c projects/release-pkg/sys/arm/freescale/imx/imx6_ssi.c projects/release-pkg/sys/arm/freescale/imx/imx_gpio.c projects/release-pkg/sys/arm/freescale/vybrid/vf_ccm.c projects/release-pkg/sys/arm/freescale/vybrid/vf_edma.c projects/release-pkg/sys/arm/freescale/vybrid/vf_port.c projects/release-pkg/sys/arm/freescale/vybrid/vf_sai.c projects/release-pkg/sys/arm/mv/mv_pci.c projects/release-pkg/sys/arm/samsung/exynos/chrome_ec.c projects/release-pkg/sys/arm/samsung/exynos/chrome_ec_spi.c projects/release-pkg/sys/arm/samsung/exynos/chrome_kb.c projects/release-pkg/sys/arm/samsung/exynos/exynos5_i2c.c projects/release-pkg/sys/arm/samsung/exynos/exynos5_pad.c projects/release-pkg/sys/arm64/arm64/copyinout.S projects/release-pkg/sys/arm64/arm64/genassym.c projects/release-pkg/sys/arm64/arm64/gic_v3_its.c projects/release-pkg/sys/arm64/arm64/locore.S projects/release-pkg/sys/arm64/arm64/pmap.c projects/release-pkg/sys/arm64/arm64/support.S projects/release-pkg/sys/arm64/cavium/thunder_pcie_pem.c projects/release-pkg/sys/arm64/cloudabi64/cloudabi64_sysvec.c projects/release-pkg/sys/arm64/include/frame.h projects/release-pkg/sys/arm64/include/vmparam.h projects/release-pkg/sys/boot/arm/at91/libat91/sd-card.c projects/release-pkg/sys/boot/arm/uboot/ldscript.arm projects/release-pkg/sys/boot/common/load_elf_obj.c projects/release-pkg/sys/boot/common/part.c projects/release-pkg/sys/boot/fdt/dts/arm/bananapi.dts projects/release-pkg/sys/boot/fdt/dts/arm/cubieboard.dts projects/release-pkg/sys/boot/fdt/dts/arm/cubieboard2.dts projects/release-pkg/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts projects/release-pkg/sys/boot/fdt/dts/arm/olinuxino-lime.dts projects/release-pkg/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi projects/release-pkg/sys/boot/forth/loader.conf.5 projects/release-pkg/sys/boot/geli/geliboot.c projects/release-pkg/sys/boot/geli/geliboot.h projects/release-pkg/sys/boot/i386/libi386/biosdisk.c projects/release-pkg/sys/boot/i386/zfsboot/zfsboot.c projects/release-pkg/sys/boot/userboot/test/test.c projects/release-pkg/sys/boot/userboot/userboot/elf64_freebsd.c projects/release-pkg/sys/cam/ctl/ctl_ha.c projects/release-pkg/sys/cam/scsi/scsi_all.h projects/release-pkg/sys/cam/scsi/scsi_ch.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h projects/release-pkg/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c projects/release-pkg/sys/cddl/dev/dtrace/amd64/dtrace_subr.c projects/release-pkg/sys/cddl/dev/dtrace/i386/dtrace_subr.c projects/release-pkg/sys/cddl/dev/sdt/sdt.c projects/release-pkg/sys/compat/cloudabi64/cloudabi64_module.c projects/release-pkg/sys/compat/cloudabi64/cloudabi64_thread.c projects/release-pkg/sys/compat/cloudabi64/cloudabi64_util.h projects/release-pkg/sys/compat/linprocfs/linprocfs.c projects/release-pkg/sys/compat/linux/linux_misc.h projects/release-pkg/sys/conf/NOTES projects/release-pkg/sys/conf/files projects/release-pkg/sys/conf/newvers.sh projects/release-pkg/sys/conf/options projects/release-pkg/sys/contrib/cloudabi/cloudabi64_types.h projects/release-pkg/sys/contrib/ipfilter/netinet/fil.c projects/release-pkg/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c (contents, props changed) projects/release-pkg/sys/contrib/ipfilter/netinet/ip_frag.c projects/release-pkg/sys/contrib/ipfilter/netinet/ip_state.c projects/release-pkg/sys/dev/aac/aac.c projects/release-pkg/sys/dev/aacraid/aacraid.c projects/release-pkg/sys/dev/acpica/acpi.c projects/release-pkg/sys/dev/acpica/acpi_pci.c projects/release-pkg/sys/dev/acpica/acpivar.h projects/release-pkg/sys/dev/ahci/ahci_pci.c projects/release-pkg/sys/dev/ata/chipsets/ata-intel.c projects/release-pkg/sys/dev/ath/ath_hal/ar5416/ar5416_radar.c projects/release-pkg/sys/dev/ath/if_ath.c projects/release-pkg/sys/dev/ath/if_ath_rx.c projects/release-pkg/sys/dev/bhnd/bcma/bcma_erom.c projects/release-pkg/sys/dev/bhnd/bhndb/bhndb_pci.c projects/release-pkg/sys/dev/bhnd/cores/chipc/chipc.c projects/release-pkg/sys/dev/bhnd/siba/siba.c projects/release-pkg/sys/dev/bktr/bktr_core.c projects/release-pkg/sys/dev/bktr/bktr_os.c projects/release-pkg/sys/dev/bxe/bxe.c projects/release-pkg/sys/dev/cardbus/cardbus.c projects/release-pkg/sys/dev/cxgbe/firmware/t5fw_cfg.txt projects/release-pkg/sys/dev/cxgbe/iw_cxgbe/mem.c projects/release-pkg/sys/dev/cxgbe/t4_main.c projects/release-pkg/sys/dev/cxgbe/tom/t4_ddp.c projects/release-pkg/sys/dev/drm2/radeon/radeon_bios.c projects/release-pkg/sys/dev/dwc/if_dwc.c projects/release-pkg/sys/dev/etherswitch/arswitch/arswitch.c projects/release-pkg/sys/dev/etherswitch/arswitch/arswitch_8327.c projects/release-pkg/sys/dev/etherswitch/ip17x/ip175c.c projects/release-pkg/sys/dev/etherswitch/ip17x/ip175d.c projects/release-pkg/sys/dev/gpio/gpioiic.c projects/release-pkg/sys/dev/hwpmc/hwpmc_e500.c projects/release-pkg/sys/dev/hwpmc/hwpmc_mips.c projects/release-pkg/sys/dev/hyperv/netvsc/hv_net_vsc.c projects/release-pkg/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c projects/release-pkg/sys/dev/hyperv/netvsc/hv_rndis_filter.c projects/release-pkg/sys/dev/hyperv/utilities/hv_heartbeat.c projects/release-pkg/sys/dev/hyperv/utilities/hv_kvp.c projects/release-pkg/sys/dev/hyperv/utilities/hv_shutdown.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_channel.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_channel_mgmt.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_connection.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_hv.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_vmbus_priv.h projects/release-pkg/sys/dev/ichiic/ig4_iic.c projects/release-pkg/sys/dev/ie/if_ie_isa.c projects/release-pkg/sys/dev/iicbus/twsi/a10_twsi.c projects/release-pkg/sys/dev/ioat/ioat.c projects/release-pkg/sys/dev/ioat/ioat.h projects/release-pkg/sys/dev/ioat/ioat_internal.h projects/release-pkg/sys/dev/ioat/ioat_test.c projects/release-pkg/sys/dev/isci/scil/scic_sds_controller_registers.h projects/release-pkg/sys/dev/isp/isp.c projects/release-pkg/sys/dev/isp/isp_freebsd.h projects/release-pkg/sys/dev/isp/isp_library.c projects/release-pkg/sys/dev/isp/isp_library.h projects/release-pkg/sys/dev/isp/isp_stds.h projects/release-pkg/sys/dev/isp/ispmbox.h projects/release-pkg/sys/dev/ispfw/asm_2500.h projects/release-pkg/sys/dev/ixgbe/if_ix.c projects/release-pkg/sys/dev/ixgbe/ixgbe_common.c projects/release-pkg/sys/dev/ixl/if_ixl.c projects/release-pkg/sys/dev/ixl/if_ixlv.c projects/release-pkg/sys/dev/kbdmux/kbdmux.c projects/release-pkg/sys/dev/mii/mii_physubr.c projects/release-pkg/sys/dev/mmc/host/dwmmc.c projects/release-pkg/sys/dev/mvs/mvs.c projects/release-pkg/sys/dev/nand/nand.c projects/release-pkg/sys/dev/nand/nandsim_chip.c projects/release-pkg/sys/dev/ncr/ncr.c projects/release-pkg/sys/dev/nfe/if_nfe.c projects/release-pkg/sys/dev/oce/oce_mbox.c projects/release-pkg/sys/dev/oce/oce_sysctl.c projects/release-pkg/sys/dev/ow/ow.c projects/release-pkg/sys/dev/patm/if_patm_attach.c projects/release-pkg/sys/dev/pcf/pcf.c projects/release-pkg/sys/dev/pci/pci.c projects/release-pkg/sys/dev/pci/pci_iov.c projects/release-pkg/sys/dev/pci/pci_private.h projects/release-pkg/sys/dev/pdq/pdq.c projects/release-pkg/sys/dev/qlxgbe/ql_hw.c projects/release-pkg/sys/dev/ral/rt2860.c projects/release-pkg/sys/dev/rt/if_rt.c projects/release-pkg/sys/dev/rt/if_rtvar.h projects/release-pkg/sys/dev/sound/midi/midi.c projects/release-pkg/sys/dev/sound/pci/hda/hdaa.c projects/release-pkg/sys/dev/sym/sym_hipd.c projects/release-pkg/sys/dev/tdfx/tdfx_pci.c projects/release-pkg/sys/dev/ti/if_ti.c projects/release-pkg/sys/dev/uart/uart_dev_msm.c projects/release-pkg/sys/dev/usb/net/if_mos.c projects/release-pkg/sys/dev/usb/net/if_ure.c projects/release-pkg/sys/dev/usb/net/if_urndis.c projects/release-pkg/sys/dev/usb/quirk/usb_quirk.c projects/release-pkg/sys/dev/usb/usb_transfer.c projects/release-pkg/sys/dev/usb/usbdevs projects/release-pkg/sys/dev/vnic/nicvf_queues.c projects/release-pkg/sys/dev/vnic/thunder_bgx.c projects/release-pkg/sys/dev/vt/vt_core.c projects/release-pkg/sys/dev/xen/pci/xen_acpi_pci.c projects/release-pkg/sys/fs/ext2fs/ext2_alloc.c projects/release-pkg/sys/fs/ext2fs/ext2_bmap.c projects/release-pkg/sys/fs/ext2fs/ext2_vfsops.c projects/release-pkg/sys/fs/nandfs/nandfs_segment.c projects/release-pkg/sys/fs/nfs/nfs_commonacl.c projects/release-pkg/sys/fs/nfs/nfs_commonport.c projects/release-pkg/sys/fs/nfs/nfs_commonsubs.c projects/release-pkg/sys/fs/nfsclient/nfs_clbio.c projects/release-pkg/sys/fs/nfsclient/nfs_clport.c projects/release-pkg/sys/fs/nfsclient/nfs_clrpcops.c projects/release-pkg/sys/fs/nfsclient/nfs_clstate.c projects/release-pkg/sys/fs/nfsclient/nfs_clvnops.c projects/release-pkg/sys/fs/nfsserver/nfs_nfsdport.c projects/release-pkg/sys/fs/nfsserver/nfs_nfsdserv.c projects/release-pkg/sys/fs/nfsserver/nfs_nfsdsocket.c projects/release-pkg/sys/fs/nfsserver/nfs_nfsdsubs.c projects/release-pkg/sys/fs/smbfs/smbfs_io.c projects/release-pkg/sys/fs/smbfs/smbfs_subr.c projects/release-pkg/sys/fs/smbfs/smbfs_vnops.c projects/release-pkg/sys/fs/tmpfs/tmpfs_subr.c projects/release-pkg/sys/fs/unionfs/union_subr.c projects/release-pkg/sys/geom/eli/g_eli.c projects/release-pkg/sys/geom/eli/g_eli.h projects/release-pkg/sys/geom/eli/g_eli_ctl.c projects/release-pkg/sys/geom/raid/md_promise.c projects/release-pkg/sys/geom/sched/g_sched.c projects/release-pkg/sys/kern/kern_cpuset.c projects/release-pkg/sys/kern/kern_physio.c projects/release-pkg/sys/kern/kern_racct.c projects/release-pkg/sys/kern/kern_rctl.c projects/release-pkg/sys/kern/link_elf_obj.c projects/release-pkg/sys/kern/subr_bus.c projects/release-pkg/sys/kern/subr_hash.c projects/release-pkg/sys/kern/subr_intr.c projects/release-pkg/sys/kern/subr_smp.c projects/release-pkg/sys/kern/subr_trap.c projects/release-pkg/sys/kern/vfs_bio.c projects/release-pkg/sys/kern/vfs_cluster.c projects/release-pkg/sys/kern/vfs_vnops.c projects/release-pkg/sys/kgssapi/gss_impl.c projects/release-pkg/sys/mips/mips/db_disasm.c projects/release-pkg/sys/mips/mips/db_trace.c projects/release-pkg/sys/mips/mips/mips_pic.c projects/release-pkg/sys/mips/mips/nexus.c projects/release-pkg/sys/mips/mips/ofw_machdep.c projects/release-pkg/sys/modules/cxgbe/if_cxgbe/Makefile projects/release-pkg/sys/modules/kbdmux/Makefile projects/release-pkg/sys/net/bpf.c projects/release-pkg/sys/net/bpf.h projects/release-pkg/sys/net/if.c projects/release-pkg/sys/net/if_gif.c projects/release-pkg/sys/net/if_gre.c projects/release-pkg/sys/net80211/ieee80211_adhoc.c projects/release-pkg/sys/net80211/ieee80211_ht.c projects/release-pkg/sys/net80211/ieee80211_node.c projects/release-pkg/sys/net80211/ieee80211_node.h projects/release-pkg/sys/net80211/ieee80211_sta.c projects/release-pkg/sys/netgraph/netflow/ng_netflow.c projects/release-pkg/sys/netgraph/ng_base.c projects/release-pkg/sys/netgraph/ng_ipfw.c projects/release-pkg/sys/netgraph/ng_nat.c projects/release-pkg/sys/netinet/ip_divert.c projects/release-pkg/sys/netinet/raw_ip.c projects/release-pkg/sys/netinet/sctp.h projects/release-pkg/sys/netinet/sctp_constants.h projects/release-pkg/sys/netinet/sctp_dtrace_define.h projects/release-pkg/sys/netinet/sctp_header.h projects/release-pkg/sys/netinet/sctp_indata.c projects/release-pkg/sys/netinet/sctp_indata.h projects/release-pkg/sys/netinet/sctp_input.c projects/release-pkg/sys/netinet/sctp_output.c projects/release-pkg/sys/netinet/sctp_pcb.c projects/release-pkg/sys/netinet/sctp_pcb.h projects/release-pkg/sys/netinet/sctp_structs.h projects/release-pkg/sys/netinet/sctp_uio.h projects/release-pkg/sys/netinet/sctp_usrreq.c projects/release-pkg/sys/netinet/sctp_var.h projects/release-pkg/sys/netinet/sctputil.c projects/release-pkg/sys/netinet/sctputil.h projects/release-pkg/sys/netinet/tcp_fastopen.c projects/release-pkg/sys/netinet/tcp_subr.c projects/release-pkg/sys/netinet/tcp_syncache.c projects/release-pkg/sys/netinet6/in6_src.c projects/release-pkg/sys/netpfil/ipfw/ip_fw_sockopt.c projects/release-pkg/sys/netsmb/smb_subr.c projects/release-pkg/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c projects/release-pkg/sys/ofed/drivers/net/mlx4/cmd.c projects/release-pkg/sys/ofed/drivers/net/mlx4/eq.c projects/release-pkg/sys/pc98/cbus/olpt.c projects/release-pkg/sys/powerpc/booke/pmap.c projects/release-pkg/sys/powerpc/include/vmparam.h projects/release-pkg/sys/powerpc/ofw/ofw_pcibus.c projects/release-pkg/sys/powerpc/powermac/fcu.c projects/release-pkg/sys/powerpc/powermac/pmu.c projects/release-pkg/sys/powerpc/powermac/smu.c projects/release-pkg/sys/rpc/clnt_bck.c projects/release-pkg/sys/security/audit/audit_syscalls.c projects/release-pkg/sys/sparc64/include/bus.h projects/release-pkg/sys/sparc64/pci/ofw_pcibus.c projects/release-pkg/sys/sparc64/sparc64/db_disasm.c projects/release-pkg/sys/sys/bus.h projects/release-pkg/sys/sys/elf_common.h projects/release-pkg/sys/sys/intr.h projects/release-pkg/sys/sys/proc.h projects/release-pkg/sys/sys/racct.h projects/release-pkg/sys/sys/rctl.h projects/release-pkg/sys/ufs/ffs/ffs_alloc.c projects/release-pkg/sys/ufs/ffs/ffs_inode.c projects/release-pkg/sys/ufs/ffs/ffs_snapshot.c projects/release-pkg/sys/ufs/ffs/ffs_softdep.c projects/release-pkg/sys/ufs/ufs/ufs_bmap.c projects/release-pkg/sys/ufs/ufs/ufs_lookup.c projects/release-pkg/sys/vm/vm_domain.c projects/release-pkg/sys/vm/vm_fault.c projects/release-pkg/sys/vm/vm_pageout.c projects/release-pkg/sys/vm/vm_phys.c projects/release-pkg/sys/vm/vm_phys.h projects/release-pkg/sys/x86/acpica/srat.c projects/release-pkg/sys/x86/cpufreq/smist.c projects/release-pkg/sys/x86/x86/local_apic.c projects/release-pkg/sys/x86/xen/xen_apic.c projects/release-pkg/tools/tools/nanobsd/defaults.sh projects/release-pkg/tools/tools/net80211/wlanstats/wlanstats.c projects/release-pkg/usr.bin/calendar/calendars/calendar.freebsd projects/release-pkg/usr.bin/rctl/rctl.8 projects/release-pkg/usr.bin/uuencode/uuencode.1 projects/release-pkg/usr.bin/uuencode/uuencode.c projects/release-pkg/usr.bin/whois/whois.c projects/release-pkg/usr.sbin/bhyve/Makefile projects/release-pkg/usr.sbin/bsdinstall/scripts/zfsboot projects/release-pkg/usr.sbin/etcupdate/tests/tzsetup_test.sh projects/release-pkg/usr.sbin/lpr/chkprintcap/chkprintcap.c projects/release-pkg/usr.sbin/lpr/common_source/common.c projects/release-pkg/usr.sbin/lpr/common_source/net.c projects/release-pkg/usr.sbin/lpr/common_source/printcap.c projects/release-pkg/usr.sbin/lpr/common_source/request.c projects/release-pkg/usr.sbin/lpr/common_source/rmjob.c projects/release-pkg/usr.sbin/lpr/lpc/lpc.c projects/release-pkg/usr.sbin/lpr/lpd/printjob.c Directory Properties: projects/release-pkg/ (props changed) projects/release-pkg/cddl/ (props changed) projects/release-pkg/cddl/contrib/opensolaris/ (props changed) projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/ (props changed) projects/release-pkg/lib/libc/ (props changed) projects/release-pkg/lib/libedit/ (props changed) projects/release-pkg/sbin/ (props changed) projects/release-pkg/sys/ (props changed) projects/release-pkg/sys/amd64/vmm/ (props changed) projects/release-pkg/sys/boot/ (props changed) projects/release-pkg/sys/cddl/contrib/opensolaris/ (props changed) projects/release-pkg/sys/conf/ (props changed) projects/release-pkg/sys/contrib/ipfilter/ (props changed) projects/release-pkg/sys/dev/hyperv/ (props changed) projects/release-pkg/usr.bin/calendar/ (props changed) projects/release-pkg/usr.sbin/bhyve/ (props changed) Modified: projects/release-pkg/bin/csh/config_p.h ============================================================================== --- projects/release-pkg/bin/csh/config_p.h Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/csh/config_p.h Mon Apr 11 15:24:59 2016 (r297824) @@ -34,7 +34,8 @@ * Note that some machines eg. rs6000 have a vfork, but not * with the berkeley semantics, so we cannot use it there either. */ -#define VFORK +/* #define VFORK */ +#define vfork fork /* * BSDJOBS You have BSD-style job control (both process groups and @@ -80,7 +81,6 @@ /****************** local defines *********************/ #if defined(__FreeBSD__) -#define SAVESIGVEC #define NLS_BUGS #define BSD_STYLE_COLORLS /* Use LC_MESSAGES locale category to open the message catalog */ Modified: projects/release-pkg/bin/sh/miscbltin.c ============================================================================== --- projects/release-pkg/bin/sh/miscbltin.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/sh/miscbltin.c Mon Apr 11 15:24:59 2016 (r297824) @@ -341,7 +341,7 @@ umaskcmd(int argc __unused, char **argv } else { void *set; INTOFF; - if ((set = setmode (ap)) == 0) + if ((set = setmode (ap)) == NULL) error("Illegal number: %s", ap); mask = getmode (set, ~mask & 0777); Modified: projects/release-pkg/bin/sh/parser.c ============================================================================== --- projects/release-pkg/bin/sh/parser.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/sh/parser.c Mon Apr 11 15:24:59 2016 (r297824) @@ -628,7 +628,7 @@ simplecmd(union node **rpp, union node * /* If we don't have any redirections already, then we must reset */ /* rpp to be the address of the local redir variable. */ - if (redir == 0) + if (redir == NULL) rpp = &redir; args = NULL; Modified: projects/release-pkg/bin/sh/tests/builtins/getopts1.0 ============================================================================== --- projects/release-pkg/bin/sh/tests/builtins/getopts1.0 Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/sh/tests/builtins/getopts1.0 Mon Apr 11 15:24:59 2016 (r297824) @@ -3,7 +3,7 @@ printf -- '-1-\n' set -- -abc getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" # In this case 'getopts' should realize that we have not provided the # required argument for "-b". @@ -14,12 +14,12 @@ echo ${OPTION} printf -- '-2-\n' set -- -ab getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" getopts "ab:" OPTION 3>&2 2>&1 >&3 3>&- -echo ${OPTION} +printf '%s\n' "${OPTION}" # The 'shift' is aimed at causing an error. printf -- '-3-\n' shift 1 getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" Modified: projects/release-pkg/bin/sh/tests/builtins/getopts2.0 ============================================================================== --- projects/release-pkg/bin/sh/tests/builtins/getopts2.0 Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/sh/tests/builtins/getopts2.0 Mon Apr 11 15:24:59 2016 (r297824) @@ -3,4 +3,4 @@ set - -ax getopts ax option set -C getopts ax option -echo $option +printf '%s\n' "$option" Modified: projects/release-pkg/bin/sh/tests/builtins/getopts9.0 ============================================================================== --- projects/release-pkg/bin/sh/tests/builtins/getopts9.0 Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/bin/sh/tests/builtins/getopts9.0 Mon Apr 11 15:24:59 2016 (r297824) @@ -2,8 +2,8 @@ args='-ab' getopts ab opt $args -echo $?:$opt:$OPTARG +printf '%s\n' "$?:$opt:$OPTARG" for dummy in dummy1 dummy2; do getopts ab opt $args - echo $?:$opt:$OPTARG + printf '%s\n' "$?:$opt:$OPTARG" done Modified: projects/release-pkg/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c Mon Apr 11 15:24:59 2016 (r297824) @@ -50,6 +50,9 @@ #ifdef illumos #include #endif +#ifdef __FreeBSD__ +#include +#endif typedef struct dtrace_cmd { void (*dc_func)(struct dtrace_cmd *); /* function to compile arg */ @@ -397,7 +400,41 @@ dof_prune(const char *fname) free(buf); } -#ifdef illumos +#ifdef __FreeBSD__ +/* + * Use nextboot(8) to tell the loader to load DTrace kernel modules during + * the next boot of the system. The nextboot(8) configuration is removed during + * boot, so it will not persist indefinitely. + */ +static void +bootdof_add(void) +{ + char * const nbargv[] = { + "nextboot", "-a", + "-e", "dtraceall_load=\"YES\"", + "-e", "dtrace_dof_load=\"YES\"", + "-e", "dtrace_dof_name=\"/boot/dtrace.dof\"", + "-e", "dtrace_dof_type=\"dtrace_dof\"", + NULL, + }; + pid_t child; + int err, status; + + err = posix_spawnp(&child, "nextboot", NULL, NULL, nbargv, + NULL); + if (err != 0) { + error("failed to execute nextboot: %s", strerror(err)); + exit(E_ERROR); + } + + if (waitpid(child, &status, 0) != child) + fatal("waiting for nextboot"); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + error("nextboot returned with status %d", status); + exit(E_ERROR); + } +} +#else static void etcsystem_prune(void) { @@ -508,7 +545,7 @@ etcsystem_add(void) error("added forceload directives to %s\n", g_ofile); } -#endif /* illumos */ +#endif /* !__FreeBSD__ */ static void print_probe_info(const dtrace_probeinfo_t *p) @@ -643,24 +680,24 @@ anon_prog(const dtrace_cmd_t *dcp, dof_h p = (uchar_t *)dof; q = p + dof->dofh_loadsz; -#ifdef illumos - oprintf("dof-data-%d=0x%x", n, *p++); - - while (p < q) - oprintf(",0x%x", *p++); - - oprintf(";\n"); -#else +#ifdef __FreeBSD__ /* - * On FreeBSD, the DOF data is handled as a kernel environment (kenv) - * string. We use two hex characters per DOF byte. + * On FreeBSD, the DOF file is read directly during boot - just write + * two hex characters per byte. */ - oprintf("dof-data-%d=%02x", n, *p++); + oprintf("dof-data-%d=", n); while (p < q) oprintf("%02x", *p++); oprintf("\n"); +#else + oprintf("dof-data-%d=0x%x", n, *p++); + + while (p < q) + oprintf(",0x%x", *p++); + + oprintf(";\n"); #endif dtrace_dof_destroy(g_dtp, dof); @@ -1725,8 +1762,7 @@ main(int argc, char *argv[]) #else /* * On FreeBSD, anonymous DOF data is written to - * the DTrace DOF file that the boot loader will - * read if booting with the DTrace option. + * the DTrace DOF file. */ g_ofile = "/boot/dtrace.dof"; #endif @@ -1765,7 +1801,10 @@ main(int argc, char *argv[]) * that itself contains a #pragma D option quiet. */ error("saved anonymous enabling in %s\n", g_ofile); -#ifdef illumos + +#ifdef __FreeBSD__ + bootdof_add(); +#else etcsystem_add(); error("run update_drv(1M) or reboot to enable changes\n"); #endif Modified: projects/release-pkg/cddl/contrib/opensolaris/cmd/zdb/zdb.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/cmd/zdb/zdb.c Mon Apr 11 15:24:59 2016 (r297824) @@ -2156,10 +2156,11 @@ dump_label(const char *dev) uint64_t psize, ashift; int len = strlen(dev) + 1; - if (strncmp(dev, "/dev/dsk/", 9) == 0) { + if (strncmp(dev, ZFS_DISK_ROOTD, strlen(ZFS_DISK_ROOTD)) == 0) { len++; path = malloc(len); - (void) snprintf(path, len, "%s%s", "/dev/rdsk/", dev + 9); + (void) snprintf(path, len, "%s%s", ZFS_RDISK_ROOTD, + dev + strlen(ZFS_DISK_ROOTD)); } else { path = strdup(dev); } Modified: projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Apr 11 15:24:59 2016 (r297824) @@ -21,12 +21,12 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2012 by Frederik Wessels. All rights reserved. * Copyright (c) 2012 Martin Matuska . All rights reserved. * Copyright (c) 2013 by Prasad Joshi (sTec). All rights reserved. * Copyright 2016 Igor Kozhukhov . + * Copyright 2016 Nexenta Systems, Inc. */ #include @@ -626,7 +626,10 @@ zpool_do_remove(int argc, char **argv) } /* - * zpool labelclear + * zpool labelclear [-f] + * + * -f Force clearing the label for the vdevs which are members of + * the exported or foreign pools. * * Verifies that the vdev is not active and zeros out the label information * on the device. @@ -634,8 +637,11 @@ zpool_do_remove(int argc, char **argv) int zpool_do_labelclear(int argc, char **argv) { - char *vdev, *name; - int c, fd = -1, ret = 0; + char vdev[MAXPATHLEN]; + char *name = NULL; + struct stat st; + int c, fd, ret = 0; + nvlist_t *config; pool_state_t state; boolean_t inuse = B_FALSE; boolean_t force = B_FALSE; @@ -658,88 +664,110 @@ zpool_do_labelclear(int argc, char **arg /* get vdev name */ if (argc < 1) { - (void) fprintf(stderr, gettext("missing vdev device name\n")); + (void) fprintf(stderr, gettext("missing vdev name\n")); usage(B_FALSE); } + if (argc > 1) { + (void) fprintf(stderr, gettext("too many arguments\n")); + usage(B_FALSE); + } + + /* + * Check if we were given absolute path and use it as is. + * Otherwise if the provided vdev name doesn't point to a file, + * try prepending dsk path and appending s0. + */ + (void) strlcpy(vdev, argv[0], sizeof (vdev)); + if (vdev[0] != '/' && stat(vdev, &st) != 0) { + char *s; + + (void) snprintf(vdev, sizeof (vdev), "%s/%s", +#ifdef illumos + ZFS_DISK_ROOT, argv[0]); + if ((s = strrchr(argv[0], 's')) == NULL || + !isdigit(*(s + 1))) + (void) strlcat(vdev, "s0", sizeof (vdev)); +#else + "/dev", argv[0]); +#endif + if (stat(vdev, &st) != 0) { + (void) fprintf(stderr, gettext( + "failed to find device %s, try specifying absolute " + "path instead\n"), argv[0]); + return (1); + } + } - vdev = argv[0]; if ((fd = open(vdev, O_RDWR)) < 0) { - (void) fprintf(stderr, gettext("Unable to open %s\n"), vdev); - return (B_FALSE); + (void) fprintf(stderr, gettext("failed to open %s: %s\n"), + vdev, strerror(errno)); + return (1); } - name = NULL; - if (zpool_in_use(g_zfs, fd, &state, &name, &inuse) != 0) { - if (force) - goto wipe_label; - + if (zpool_read_label(fd, &config) != 0 || config == NULL) { (void) fprintf(stderr, - gettext("Unable to determine pool state for %s\n" - "Use -f to force the clearing any label data\n"), vdev); - + gettext("failed to read label from %s\n"), vdev); return (1); } + nvlist_free(config); - if (inuse) { - switch (state) { - default: - case POOL_STATE_ACTIVE: - case POOL_STATE_SPARE: - case POOL_STATE_L2CACHE: - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member (%s), of pool \"%s\".\n" - "\tTo remove label information from this device, export or destroy\n" - "\tthe pool, or remove %s from the configuration of this pool\n" - "\tand retry the labelclear operation\n"), - vdev, zpool_pool_state_to_name(state), name, vdev); - ret = 1; - goto errout; - - case POOL_STATE_EXPORTED: - if (force) - break; + ret = zpool_in_use(g_zfs, fd, &state, &name, &inuse); + if (ret != 0) { + (void) fprintf(stderr, + gettext("failed to check state for %s\n"), vdev); + return (1); + } - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member of the exported pool \"%s\".\n" - "\tUse \"zpool labelclear -f %s\" to force the removal of label\n" - "\tinformation.\n"), - vdev, name, vdev); - ret = 1; - goto errout; + if (!inuse) + goto wipe_label; - case POOL_STATE_POTENTIALLY_ACTIVE: - if (force) - break; + switch (state) { + default: + case POOL_STATE_ACTIVE: + case POOL_STATE_SPARE: + case POOL_STATE_L2CACHE: + (void) fprintf(stderr, gettext( + "%s is a member (%s) of pool \"%s\"\n"), + vdev, zpool_pool_state_to_name(state), name); + ret = 1; + goto errout; - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member of the pool \"%s\".\n" - "\tThis pool is unknown to this system, but may be active on\n" - "\tanother system. Use \'zpool labelclear -f %s\' to force the\n" - "\tremoval of label information.\n"), - vdev, name, vdev); - ret = 1; - goto errout; + case POOL_STATE_EXPORTED: + if (force) + break; + (void) fprintf(stderr, gettext( + "use '-f' to override the following error:\n" + "%s is a member of exported pool \"%s\"\n"), + vdev, name); + ret = 1; + goto errout; - case POOL_STATE_DESTROYED: - /* inuse should never be set for a destoryed pool... */ + case POOL_STATE_POTENTIALLY_ACTIVE: + if (force) break; - } + (void) fprintf(stderr, gettext( + "use '-f' to override the following error:\n" + "%s is a member of potentially active pool \"%s\"\n"), + vdev, name); + ret = 1; + goto errout; + + case POOL_STATE_DESTROYED: + /* inuse should never be set for a destroyed pool */ + assert(0); + break; } wipe_label: - if (zpool_clear_label(fd) != 0) { + ret = zpool_clear_label(fd); + if (ret != 0) { (void) fprintf(stderr, - gettext("Label clear failed on vdev %s\n"), vdev); - ret = 1; + gettext("failed to clear label for %s\n"), vdev); } errout: - close(fd); - if (name != NULL) - free(name); + free(name); + (void) close(fd); return (ret); } Modified: projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c Mon Apr 11 15:24:59 2016 (r297824) @@ -79,8 +79,6 @@ #include "zpool_util.h" -#define DISK_ROOT "/dev/dsk" -#define RDISK_ROOT "/dev/rdsk" #define BACKUP_SLICE "s2" /* @@ -384,7 +382,7 @@ is_whole_disk(const char *arg) char path[MAXPATHLEN]; (void) snprintf(path, sizeof (path), "%s%s%s", - RDISK_ROOT, strrchr(arg, '/'), BACKUP_SLICE); + ZFS_RDISK_ROOT, strrchr(arg, '/'), BACKUP_SLICE); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) return (B_FALSE); if (efi_alloc_and_init(fd, EFI_NUMPAR, &label) != 0) { Modified: projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c Mon Apr 11 15:24:59 2016 (r297824) @@ -20,10 +20,10 @@ */ /* - * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 by Delphix. All rights reserved. * Copyright 2015 RackTop Systems. + * Copyright 2016 Nexenta Systems, Inc. */ /* @@ -1099,9 +1099,7 @@ zpool_open_func(void *arg) } /* - * Given a file descriptor, clear (zero) the label information. This function - * is used in the appliance stack as part of the ZFS sysevent module and - * to implement the "zpool labelclear" command. + * Given a file descriptor, clear (zero) the label information. */ int zpool_clear_label(int fd) @@ -1168,7 +1166,7 @@ zpool_find_import_impl(libzfs_handle_t * */ for (i = 0; i < dirs; i++) { tpool_t *t; - char *rdsk; + char rdsk[MAXPATHLEN]; int dfd; boolean_t config_failed = B_FALSE; DIR *dirp; @@ -1184,15 +1182,17 @@ zpool_find_import_impl(libzfs_handle_t * *end = 0; pathleft = &path[sizeof (path)] - end; +#ifdef illumos /* * Using raw devices instead of block devices when we're * reading the labels skips a bunch of slow operations during * close(2) processing, so we replace /dev/dsk with /dev/rdsk. */ - if (strcmp(path, "/dev/dsk/") == 0) - rdsk = "/dev/"; + if (strcmp(path, ZFS_DISK_ROOTD) == 0) + (void) strlcpy(rdsk, ZFS_RDISK_ROOTD, sizeof (rdsk)); else - rdsk = path; +#endif + (void) strlcpy(rdsk, path, sizeof (rdsk)); if ((dfd = open64(rdsk, O_RDONLY)) < 0 || (dirp = fdopendir(dfd)) == NULL) { Modified: projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Apr 11 15:24:59 2016 (r297824) @@ -20,10 +20,10 @@ */ /* - * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. */ #include @@ -49,8 +49,6 @@ static int read_efi_label(nvlist_t *config, diskaddr_t *sb); -#define DISK_ROOT "/dev/dsk" -#define RDISK_ROOT "/dev/rdsk" #define BACKUP_SLICE "s2" typedef struct prop_flags { @@ -2345,7 +2343,7 @@ zpool_relabel_disk(libzfs_handle_t *hdl, "efi_use_whole_disk")) == NULL) return (-1); - (void) snprintf(path, sizeof (path), "%s/%s", RDISK_ROOT, name); + (void) snprintf(path, sizeof (path), "%s/%s", ZFS_RDISK_ROOT, name); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot " @@ -2421,7 +2419,7 @@ zpool_vdev_online(zpool_handle_t *zhp, c } if (wholedisk) { - pathname += strlen(DISK_ROOT) + 1; + pathname += strlen(ZFS_DISK_ROOT) + 1; (void) zpool_relabel_disk(hdl, pathname); } } @@ -3411,8 +3409,8 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp } #ifdef illumos - if (strncmp(path, "/dev/dsk/", 9) == 0) - path += 9; + if (strncmp(path, ZFS_DISK_ROOTD, strlen(ZFS_DISK_ROOTD)) == 0) + path += strlen(ZFS_DISK_ROOTD); if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_WHOLE_DISK, &value) == 0 && value) { @@ -3846,7 +3844,7 @@ read_efi_label(nvlist_t *config, diskadd if (nvlist_lookup_string(config, ZPOOL_CONFIG_PATH, &path) != 0) return (err); - (void) snprintf(diskname, sizeof (diskname), "%s%s", RDISK_ROOT, + (void) snprintf(diskname, sizeof (diskname), "%s%s", ZFS_RDISK_ROOT, strrchr(path, '/')); if ((fd = open(diskname, O_RDONLY|O_NDELAY)) >= 0) { struct dk_gpt *vtoc; @@ -3931,7 +3929,7 @@ zpool_label_disk(libzfs_handle_t *hdl, z start_block = NEW_START_BLOCK; } - (void) snprintf(path, sizeof (path), "%s/%s%s", RDISK_ROOT, name, + (void) snprintf(path, sizeof (path), "%s/%s%s", ZFS_RDISK_ROOT, name, BACKUP_SLICE); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) { Modified: projects/release-pkg/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c ============================================================================== --- projects/release-pkg/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c Mon Apr 11 15:24:59 2016 (r297824) @@ -46,9 +46,11 @@ ATF_TC_HEAD(gettimeofday_err, tc) ATF_TC_BODY(gettimeofday_err, tc) { +#ifdef __NetBSD__ errno = 0; ATF_REQUIRE_ERRNO(EFAULT, gettimeofday((void *)-1, NULL) != 0); +#endif } ATF_TC(gettimeofday_mono); Modified: projects/release-pkg/lib/libc/aarch64/gen/Makefile.inc ============================================================================== --- projects/release-pkg/lib/libc/aarch64/gen/Makefile.inc Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/aarch64/gen/Makefile.inc Mon Apr 11 15:24:59 2016 (r297824) @@ -1,5 +1,7 @@ # $FreeBSD$ +CFLAGS+= -DNO_COMPAT7 + SRCS+= _ctx_start.S \ fabs.S \ flt_rounds.c \ Modified: projects/release-pkg/lib/libc/aarch64/sys/Makefile.inc ============================================================================== --- projects/release-pkg/lib/libc/aarch64/sys/Makefile.inc Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/aarch64/sys/Makefile.inc Mon Apr 11 15:24:59 2016 (r297824) @@ -1,5 +1,7 @@ # $FreeBSD$ +MIASM:= ${MIASM:Nfreebsd[467]_*} + SRCS+= __vdso_gettc.c #MDASM= ptrace.S Modified: projects/release-pkg/lib/libc/db/hash/hash.c ============================================================================== --- projects/release-pkg/lib/libc/db/hash/hash.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/db/hash/hash.c Mon Apr 11 15:24:59 2016 (r297824) @@ -423,7 +423,8 @@ hdestroy(HTAB *hashp) free(hashp->tmp_buf); if (hashp->fp != -1) { - (void)_fsync(hashp->fp); + if (hashp->save_file) + (void)_fsync(hashp->fp); (void)_close(hashp->fp); } @@ -770,7 +771,7 @@ next_bucket: if (__big_keydata(hashp, bufp, key, data, 1)) return (ERROR); } else { - if (hashp->cpage == 0) + if (hashp->cpage == NULL) return (ERROR); key->data = (u_char *)hashp->cpage->page + bp[ndx]; key->size = (ndx > 1 ? bp[ndx - 1] : hashp->BSIZE) - bp[ndx]; Modified: projects/release-pkg/lib/libc/db/hash/hash_buf.c ============================================================================== --- projects/release-pkg/lib/libc/db/hash/hash_buf.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/db/hash/hash_buf.c Mon Apr 11 15:24:59 2016 (r297824) @@ -245,7 +245,7 @@ newbuf(HTAB *hashp, u_int32_t addr, BUFH */ for (xbp = bp; xbp->ovfl;) { next_xbp = xbp->ovfl; - xbp->ovfl = 0; + xbp->ovfl = NULL; xbp = next_xbp; /* Check that ovfl pointer is up date. */ @@ -350,7 +350,7 @@ __buf_free(HTAB *hashp, int do_free, int void __reclaim_buf(HTAB *hashp, BUFHEAD *bp) { - bp->ovfl = 0; + bp->ovfl = NULL; bp->addr = 0; bp->flags = 0; BUF_REMOVE(bp); Modified: projects/release-pkg/lib/libc/gen/err.c ============================================================================== --- projects/release-pkg/lib/libc/gen/err.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/gen/err.c Mon Apr 11 15:24:59 2016 (r297824) @@ -96,7 +96,7 @@ errc(int eval, int code, const char *fmt void verrc(int eval, int code, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) { @@ -121,7 +121,7 @@ errx(int eval, const char *fmt, ...) void verrx(int eval, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) @@ -161,7 +161,7 @@ warnc(int code, const char *fmt, ...) void vwarnc(int code, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) { @@ -183,7 +183,7 @@ warnx(const char *fmt, ...) void vwarnx(const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) Modified: projects/release-pkg/lib/libc/gen/getmntinfo.c ============================================================================== --- projects/release-pkg/lib/libc/gen/getmntinfo.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/gen/getmntinfo.c Mon Apr 11 15:24:59 2016 (r297824) @@ -56,7 +56,7 @@ getmntinfo(struct statfs **mntbufp, int if (mntbuf) free(mntbuf); bufsize = (mntsize + 1) * sizeof(struct statfs); - if ((mntbuf = (struct statfs *)malloc(bufsize)) == 0) + if ((mntbuf = malloc(bufsize)) == NULL) return (0); if ((mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) return (0); Modified: projects/release-pkg/lib/libc/gen/opendir.c ============================================================================== --- projects/release-pkg/lib/libc/gen/opendir.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/gen/opendir.c Mon Apr 11 15:24:59 2016 (r297824) @@ -209,7 +209,7 @@ _filldir(DIR *dirp, bool use_current_pos * On the second pass, save pointers to each one. * Then sort the pointers and remove duplicate names. */ - for (dpv = 0;;) { + for (dpv = NULL;;) { n = 0; ddptr = buf; while (ddptr < ddeptr) { Modified: projects/release-pkg/lib/libc/gen/semctl.c ============================================================================== --- projects/release-pkg/lib/libc/gen/semctl.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/gen/semctl.c Mon Apr 11 15:24:59 2016 (r297824) @@ -29,7 +29,9 @@ #include __FBSDID("$FreeBSD$"); +#ifndef NO_COMPAT7 #define _WANT_SEMUN_OLD +#endif #include #include @@ -38,8 +40,10 @@ __FBSDID("$FreeBSD$"); #include int __semctl(int semid, int semnum, int cmd, union semun *arg); +#ifndef NO_COMPAT7 int freebsd7___semctl(int semid, int semnum, int cmd, union semun_old *arg); int freebsd7_semctl(int semid, int semnum, int cmd, ...); +#endif int semctl(int semid, int semnum, int cmd, ...) @@ -61,6 +65,7 @@ semctl(int semid, int semnum, int cmd, . return (__semctl(semid, semnum, cmd, semun_ptr)); } +#ifndef NO_COMPAT7 int freebsd7_semctl(int semid, int semnum, int cmd, ...) { @@ -82,3 +87,4 @@ freebsd7_semctl(int semid, int semnum, i } __sym_compat(semctl, freebsd7_semctl, FBSD_1.0); +#endif Modified: projects/release-pkg/lib/libc/gen/tls.c ============================================================================== --- projects/release-pkg/lib/libc/gen/tls.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/gen/tls.c Mon Apr 11 15:24:59 2016 (r297824) @@ -285,7 +285,7 @@ _init_tls(void) while (*sp++ != 0) ; aux = (Elf_Auxinfo *) sp; - phdr = 0; + phdr = NULL; phent = phnum = 0; for (auxp = aux; auxp->a_type != AT_NULL; auxp++) { switch (auxp->a_type) { @@ -302,7 +302,7 @@ _init_tls(void) break; } } - if (phdr == 0 || phent != sizeof(Elf_Phdr) || phnum == 0) + if (phdr == NULL || phent != sizeof(Elf_Phdr) || phnum == 0) return; for (i = 0; (unsigned) i < phnum; i++) { Modified: projects/release-pkg/lib/libc/include/compat.h ============================================================================== --- projects/release-pkg/lib/libc/include/compat.h Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/include/compat.h Mon Apr 11 15:24:59 2016 (r297824) @@ -38,9 +38,11 @@ #define __sym_compat(sym,impl,verid) \ .symver impl, sym@verid +#ifndef NO_COMPAT7 __sym_compat(__semctl, freebsd7___semctl, FBSD_1.0); __sym_compat(msgctl, freebsd7_msgctl, FBSD_1.0); __sym_compat(shmctl, freebsd7_shmctl, FBSD_1.0); +#endif #undef __sym_compat Modified: projects/release-pkg/lib/libc/locale/xlocale_private.h ============================================================================== --- projects/release-pkg/lib/libc/locale/xlocale_private.h Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/locale/xlocale_private.h Mon Apr 11 15:24:59 2016 (r297824) @@ -155,12 +155,11 @@ __attribute__((unused)) static void xlocale_release(void *val) { struct xlocale_refcounted *obj = val; - long count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1; - if (count < 0) { - if (0 != obj->destructor) { - obj->destructor(obj); - } - } + long count; + + count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1; + if (count < 0 && obj->destructor != NULL) + obj->destructor(obj); } /** Modified: projects/release-pkg/lib/libc/net/base64.c ============================================================================== --- projects/release-pkg/lib/libc/net/base64.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/net/base64.c Mon Apr 11 15:24:59 2016 (r297824) @@ -210,7 +210,7 @@ b64_pton(const char *src, u_char *target break; pos = strchr(Base64, ch); - if (pos == 0) /* A non-base64 character. */ + if (pos == NULL) /* A non-base64 character. */ return (-1); switch (state) { Modified: projects/release-pkg/lib/libc/net/getifaddrs.c ============================================================================== --- projects/release-pkg/lib/libc/net/getifaddrs.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/net/getifaddrs.c Mon Apr 11 15:24:59 2016 (r297824) @@ -85,7 +85,7 @@ getifaddrs(struct ifaddrs **pif) size_t needed; char *buf; char *next; - struct ifaddrs *cif = 0; + struct ifaddrs *cif; char *p, *p0; struct rt_msghdr *rtm; struct if_msghdrl *ifm; @@ -214,6 +214,7 @@ getifaddrs(struct ifaddrs **pif) ift = ifa; idx = 0; + cif = NULL; for (next = buf; next < buf + needed; next += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)(void *)next; if (rtm->rtm_version != RTM_VERSION) Modified: projects/release-pkg/lib/libc/net/getservent.c ============================================================================== --- projects/release-pkg/lib/libc/net/getservent.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/net/getservent.c Mon Apr 11 15:24:59 2016 (r297824) @@ -406,14 +406,14 @@ files_servent(void *retval, void *mdata, continue; gotname: - if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + if (proto == NULL || strcmp(serv->s_proto, proto) == 0) rv = NS_SUCCESS; break; case nss_lt_id: if (port != serv->s_port) continue; - if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + if (proto == NULL || strcmp(serv->s_proto, proto) == 0) rv = NS_SUCCESS; break; case nss_lt_all: Modified: projects/release-pkg/lib/libc/net/rcmd.c ============================================================================== --- projects/release-pkg/lib/libc/net/rcmd.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/net/rcmd.c Mon Apr 11 15:24:59 2016 (r297824) @@ -207,7 +207,7 @@ rcmd_af(char **ahost, int rport, const c } } lport--; - if (fd2p == 0) { + if (fd2p == NULL) { _write(s, "", 1); lport = 0; } else { Modified: projects/release-pkg/lib/libc/posix1e/acl_support_nfs4.c ============================================================================== --- projects/release-pkg/lib/libc/posix1e/acl_support_nfs4.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/posix1e/acl_support_nfs4.c Mon Apr 11 15:24:59 2016 (r297824) @@ -81,7 +81,7 @@ static const char * format_flag(uint32_t *var, const struct flagnames_struct *flags) { - for (; flags->name != 0; flags++) { + for (; flags->name != NULL; flags++) { if ((flags->flag & *var) == 0) continue; Modified: projects/release-pkg/lib/libc/resolv/mtctxres.c ============================================================================== --- projects/release-pkg/lib/libc/resolv/mtctxres.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/resolv/mtctxres.c Mon Apr 11 15:24:59 2016 (r297824) @@ -75,7 +75,7 @@ __res_init_ctx(void) { return (0); } - if ((mt = malloc(sizeof (mtctxres_t))) == 0) { + if ((mt = malloc(sizeof(mtctxres_t))) == NULL) { errno = ENOMEM; return (-1); } @@ -94,10 +94,7 @@ __res_init_ctx(void) { static void __res_destroy_ctx(void *value) { - mtctxres_t *mt = (mtctxres_t *)value; - - if (mt != 0) - free(mt); + free(value); } #endif @@ -130,9 +127,9 @@ ___mtctxres(void) { * that fails return a global context. */ if (mt_key_initialized) { - if (((mt = pthread_getspecific(key)) != 0) || + if (((mt = pthread_getspecific(key)) != NULL) || (__res_init_ctx() == 0 && - (mt = pthread_getspecific(key)) != 0)) { + (mt = pthread_getspecific(key)) != NULL)) { return (mt); } } Modified: projects/release-pkg/lib/libc/resolv/res_init.c ============================================================================== --- projects/release-pkg/lib/libc/resolv/res_init.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/resolv/res_init.c Mon Apr 11 15:24:59 2016 (r297824) @@ -315,7 +315,7 @@ __res_vinit(res_state statp, int preinit while (*cp != '\0' && *cp != ' ' && *cp != '\t' && *cp != '\n') cp++; *cp = '\0'; - *pp++ = 0; + *pp++ = NULL; } #define MATCH(line, name) \ @@ -391,7 +391,7 @@ __res_vinit(res_state statp, int preinit while (*cp != '\0' && *cp != ' ' && *cp != '\t') cp++; *cp = '\0'; - *pp++ = 0; + *pp++ = NULL; havesearch = 1; continue; } Modified: projects/release-pkg/lib/libc/resolv/res_mkupdate.c ============================================================================== --- projects/release-pkg/lib/libc/resolv/res_mkupdate.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/resolv/res_mkupdate.c Mon Apr 11 15:24:59 2016 (r297824) @@ -1175,7 +1175,7 @@ res_protocolname(int num) { if (protolist == (struct valuelist *)0) res_buildprotolist(); pp = cgetprotobynumber(num); - if (pp == 0) { + if (pp == NULL) { (void) sprintf(number, "%d", num); return (number); } @@ -1190,7 +1190,7 @@ res_servicename(u_int16_t port, const ch if (servicelist == (struct valuelist *)0) res_buildservicelist(); ss = cgetservbyport(htons(port), proto); - if (ss == 0) { + if (ss == NULL) { (void) sprintf(number, "%d", port); return (number); } Modified: projects/release-pkg/lib/libc/rpc/auth_none.c ============================================================================== --- projects/release-pkg/lib/libc/rpc/auth_none.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/rpc/auth_none.c Mon Apr 11 15:24:59 2016 (r297824) @@ -83,9 +83,9 @@ authnone_create(void) XDR *xdrs; mutex_lock(&authnone_lock); - if (ap == 0) { - ap = (struct authnone_private *)calloc(1, sizeof (*ap)); - if (ap == 0) { + if (ap == NULL) { + ap = calloc(1, sizeof (*ap)); + if (ap == NULL) { mutex_unlock(&authnone_lock); return (0); } Modified: projects/release-pkg/lib/libc/rpc/clnt_perror.c ============================================================================== --- projects/release-pkg/lib/libc/rpc/clnt_perror.c Mon Apr 11 14:45:36 2016 (r297823) +++ projects/release-pkg/lib/libc/rpc/clnt_perror.c Mon Apr 11 15:24:59 2016 (r297824) @@ -64,8 +64,8 @@ static char * _buf(void) { - if (buf == 0) - buf = (char *)malloc(CLNT_PERROR_BUFLEN); + if (buf == NULL) + buf = malloc(CLNT_PERROR_BUFLEN); return (buf); } @@ -85,7 +85,7 @@ clnt_sperror(CLIENT *rpch, const char *s assert(s != NULL); str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */ - if (str == 0) + if (str == NULL) return (0); len = CLNT_PERROR_BUFLEN; strstart = str; @@ -240,7 +240,7 @@ clnt_spcreateerror(const char *s) assert(s != NULL); str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */ - if (str == 0) + if (str == NULL) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Apr 11 18:10:21 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 798DAB0CC0A for ; Mon, 11 Apr 2016 18:10:21 +0000 (UTC) (envelope-from gjb@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 mx1.freebsd.org (Postfix) with ESMTPS id 475BD1C70; Mon, 11 Apr 2016 18:10:21 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3BIAKgd045820; Mon, 11 Apr 2016 18:10:20 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3BIAKlc045819; Mon, 11 Apr 2016 18:10:20 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201604111810.u3BIAKlc045819@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Mon, 11 Apr 2016 18:10:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297830 - projects/release-pkg X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2016 18:10:21 -0000 Author: gjb Date: Mon Apr 11 18:10:20 2016 New Revision: 297830 URL: https://svnweb.freebsd.org/changeset/base/297830 Log: Set explicit ordering to prevent packaging failures with parallel (-jN) make(1) jobs. Sponsored by: The FreeBSD Foundation Modified: projects/release-pkg/Makefile.inc1 Modified: projects/release-pkg/Makefile.inc1 ============================================================================== --- projects/release-pkg/Makefile.inc1 Mon Apr 11 18:09:38 2016 (r297829) +++ projects/release-pkg/Makefile.inc1 Mon Apr 11 18:10:20 2016 (r297830) @@ -1224,6 +1224,11 @@ KSTAGEDIR?= ${MAKEOBJDIRPREFIX}${.CURDIR REPODIR?= ${MAKEOBJDIRPREFIX}${.CURDIR}/repo PKGSIGNKEY?= # empty +.ORDER: stage-packages create-packages +.ORDER: create-packages create-world-packages +.ORDER: create-packages create-kernel-packages +.ORDER: create-packages sign-packages + _pkgbootstrap: .if !exists(${LOCALBASE}/sbin/pkg) @env ASSUME_ALWAYS_YES=YES pkg bootstrap From owner-svn-src-projects@freebsd.org Mon Apr 11 22:39:34 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31BABB0CFFC for ; Mon, 11 Apr 2016 22:39:34 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id DC995121E; Mon, 11 Apr 2016 22:39:33 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3BMdXXQ028083; Mon, 11 Apr 2016 22:39:33 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3BMdXLK028082; Mon, 11 Apr 2016 22:39:33 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604112239.u3BMdXLK028082@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 11 Apr 2016 22:39:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297839 - projects/pnfs-server X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2016 22:39:34 -0000 Author: rmacklem Date: Mon Apr 11 22:39:32 2016 New Revision: 297839 URL: https://svnweb.freebsd.org/changeset/base/297839 Log: Create a projects tree for the pNFS (NFSv4.1) server project. Added: projects/pnfs-server/ - copied from r297838, head/sys/ Directory Properties: projects/pnfs-server/sys/ (props changed) From owner-svn-src-projects@freebsd.org Mon Apr 11 22:47:04 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A20DB0B55F for ; Mon, 11 Apr 2016 22:47:04 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 3131F198A; Mon, 11 Apr 2016 22:47:04 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3BMl3Sa030957; Mon, 11 Apr 2016 22:47:03 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3BMl3Lg030956; Mon, 11 Apr 2016 22:47:03 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604112247.u3BMl3Lg030956@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Mon, 11 Apr 2016 22:47:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297840 - projects/pnfs-server/usr.sbin X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2016 22:47:04 -0000 Author: rmacklem Date: Mon Apr 11 22:47:03 2016 New Revision: 297840 URL: https://svnweb.freebsd.org/changeset/base/297840 Log: Add the nfsd daemon subtree to the pnfs server project. Added: projects/pnfs-server/usr.sbin/ - copied from r297839, head/usr.sbin/nfsd/ Directory Properties: projects/pnfs-server/usr.sbin/nfsd/ (props changed) From owner-svn-src-projects@freebsd.org Tue Apr 12 17:00:16 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B81AFB0CE69 for ; Tue, 12 Apr 2016 17:00:16 +0000 (UTC) (envelope-from gjb@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 mx1.freebsd.org (Postfix) with ESMTPS id 811FC1AB0; Tue, 12 Apr 2016 17:00:16 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CH0FCN065883; Tue, 12 Apr 2016 17:00:15 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CH0DJ0065863; Tue, 12 Apr 2016 17:00:13 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201604121700.u3CH0DJ0065863@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Tue, 12 Apr 2016 17:00:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297861 - in projects/release-pkg: bin/rcp cddl/contrib/opensolaris/lib/libdtrace/common gnu/lib/csu gnu/lib/libgcc gnu/lib/libgcov lib/libc/net lib/libc/rpc lib/libthr/thread lib/msun/... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 17:00:16 -0000 Author: gjb Date: Tue Apr 12 17:00:13 2016 New Revision: 297861 URL: https://svnweb.freebsd.org/changeset/base/297861 Log: MFH Sponsored by: The FreeBSD Foundation Modified: projects/release-pkg/bin/rcp/rcp.c projects/release-pkg/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c projects/release-pkg/gnu/lib/csu/Makefile projects/release-pkg/gnu/lib/libgcc/Makefile projects/release-pkg/gnu/lib/libgcov/Makefile projects/release-pkg/lib/libc/net/getservent.c projects/release-pkg/lib/libc/rpc/clnt_bcast.c projects/release-pkg/lib/libc/rpc/clnt_generic.c projects/release-pkg/lib/libthr/thread/thr_mutex.c projects/release-pkg/lib/msun/tests/Makefile projects/release-pkg/sbin/devd/tests/client_test.c projects/release-pkg/share/man/man5/src.conf.5 projects/release-pkg/share/mk/local.sys.mk projects/release-pkg/sys/amd64/amd64/exception.S projects/release-pkg/sys/amd64/amd64/mp_machdep.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_zfetch.h projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_hv.c projects/release-pkg/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c projects/release-pkg/sys/dev/isp/isp.c projects/release-pkg/sys/dev/isp/isp_freebsd.c projects/release-pkg/sys/dev/isp/isp_freebsd.h projects/release-pkg/sys/dev/isp/isp_pci.c projects/release-pkg/sys/dev/isp/ispvar.h projects/release-pkg/sys/fs/nfs/nfsport.h projects/release-pkg/sys/fs/nfsclient/nfs_clrpcops.c projects/release-pkg/sys/i386/i386/mp_machdep.c projects/release-pkg/sys/mips/include/resource.h projects/release-pkg/sys/mips/mediatek/mtk_pcie.c projects/release-pkg/sys/mips/mediatek/mtk_pcie.h projects/release-pkg/sys/netinet/sctp_usrreq.c projects/release-pkg/sys/netinet/sctp_var.h projects/release-pkg/sys/x86/include/specialreg.h projects/release-pkg/sys/x86/include/x86_var.h projects/release-pkg/sys/x86/x86/identcpu.c projects/release-pkg/tools/build/options/WITH_DIRDEPS_BUILD projects/release-pkg/tools/build/options/WITH_META_MODE projects/release-pkg/usr.sbin/ctld/ctld.c Directory Properties: projects/release-pkg/ (props changed) projects/release-pkg/cddl/ (props changed) projects/release-pkg/cddl/contrib/opensolaris/ (props changed) projects/release-pkg/gnu/lib/ (props changed) projects/release-pkg/lib/libc/ (props changed) projects/release-pkg/sbin/ (props changed) projects/release-pkg/share/ (props changed) projects/release-pkg/sys/ (props changed) projects/release-pkg/sys/cddl/contrib/opensolaris/ (props changed) projects/release-pkg/sys/dev/hyperv/ (props changed) Modified: projects/release-pkg/bin/rcp/rcp.c ============================================================================== --- projects/release-pkg/bin/rcp/rcp.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/bin/rcp/rcp.c Tue Apr 12 17:00:13 2016 (r297861) @@ -447,7 +447,7 @@ rsource(char *name, struct stat *statp) return; } last = strrchr(name, '/'); - if (last == 0) + if (last == NULL) last = name; else last++; Modified: projects/release-pkg/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c ============================================================================== --- projects/release-pkg/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c Tue Apr 12 17:00:13 2016 (r297861) @@ -711,6 +711,7 @@ dt_module_load_proc(dtrace_hdl_t *dtp, d arg.dpa_count = 0; if (Pobject_iter_resolved(p, dt_module_load_proc_count, &arg) != 0) { dt_dprintf("failed to iterate objects\n"); + dt_proc_unlock(dtp, p); dt_proc_release(dtp, p); return (dt_set_errno(dtp, EDT_CANTLOAD)); } Modified: projects/release-pkg/gnu/lib/csu/Makefile ============================================================================== --- projects/release-pkg/gnu/lib/csu/Makefile Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/gnu/lib/csu/Makefile Tue Apr 12 17:00:13 2016 (r297861) @@ -71,7 +71,7 @@ crtendS.o: ${ENDSRC} -c -o ${.TARGET} ${.ALLSRC:N*.h} CLEANFILES+= tm.h tconfig.h options.h optionlist cs-tconfig.h cs-tm.h -tm.h tconfig.h options.h: ${CCDIR}/cc_tools/Makefile +tm.h tconfig.h options.h: ${CCDIR}/cc_tools/Makefile .PHONY (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} ${.TARGET}) .include Modified: projects/release-pkg/gnu/lib/libgcc/Makefile ============================================================================== --- projects/release-pkg/gnu/lib/libgcc/Makefile Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/gnu/lib/libgcc/Makefile Tue Apr 12 17:00:13 2016 (r297861) @@ -344,7 +344,7 @@ ${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS # # Generated headers # -${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile +${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile .PHONY (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} ${.TARGET}) CLEANFILES += ${COMMONHDRS} Modified: projects/release-pkg/gnu/lib/libgcov/Makefile ============================================================================== --- projects/release-pkg/gnu/lib/libgcov/Makefile Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/gnu/lib/libgcov/Makefile Tue Apr 12 17:00:13 2016 (r297861) @@ -45,7 +45,7 @@ CC_S = ${CC} -c ${CFLAGS} ${PICFLAG} -DS COMMONHDRS= tm.h tconfig.h gcov-iov.h options.h CLEANFILES+= ${COMMONHDRS} cs-tm.h cs-tconfig.h options.h optionlist -${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile +${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile .PHONY (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} ${.TARGET}) ${OBJS} beforedepend: ${COMMONHDRS} Modified: projects/release-pkg/lib/libc/net/getservent.c ============================================================================== --- projects/release-pkg/lib/libc/net/getservent.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/lib/libc/net/getservent.c Tue Apr 12 17:00:13 2016 (r297861) @@ -321,7 +321,7 @@ files_servent(void *retval, void *mdata, break; default: return NS_NOTFOUND; - }; + } serv = va_arg(ap, struct servent *); buffer = va_arg(ap, char *); @@ -463,7 +463,7 @@ files_setservent(void *retval, void *mda break; default: break; - }; + } st->compat_mode_active = 0; return (NS_UNAVAIL); @@ -522,7 +522,7 @@ db_servent(void *retval, void *mdata, va break; default: return NS_NOTFOUND; - }; + } serv = va_arg(ap, struct servent *); buffer = va_arg(ap, char *); @@ -641,7 +641,7 @@ db_setservent(void *retval, void *mdata, break; default: break; - }; + } return (NS_UNAVAIL); } @@ -694,7 +694,7 @@ nis_servent(void *retval, void *mdata, v break; default: return NS_NOTFOUND; - }; + } serv = va_arg(ap, struct servent *); buffer = va_arg(ap, char *); @@ -781,7 +781,7 @@ nis_servent(void *retval, void *mdata, v } } break; - }; + } rv = parse_result(serv, buffer, bufsize, resultbuf, resultbuflen, errnop); @@ -815,7 +815,7 @@ nis_setservent(void *result, void *mdata break; default: break; - }; + } return (NS_UNAVAIL); } Modified: projects/release-pkg/lib/libc/rpc/clnt_bcast.c ============================================================================== --- projects/release-pkg/lib/libc/rpc/clnt_bcast.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/lib/libc/rpc/clnt_bcast.c Tue Apr 12 17:00:13 2016 (r297861) @@ -469,7 +469,7 @@ rpc_broadcast_exp(rpcprog_t prog, rpcver "broadcast packet"); stat = RPC_CANTSEND; continue; - }; + } #ifdef RPC_DEBUG if (!__rpc_lowvers) fprintf(stderr, "Broadcast packet sent " Modified: projects/release-pkg/lib/libc/rpc/clnt_generic.c ============================================================================== --- projects/release-pkg/lib/libc/rpc/clnt_generic.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/lib/libc/rpc/clnt_generic.c Tue Apr 12 17:00:13 2016 (r297861) @@ -402,7 +402,7 @@ clnt_tli_create(int fd, const struct net if (madefd) { (void) CLNT_CONTROL(cl, CLSET_FD_CLOSE, NULL); /* (void) CLNT_CONTROL(cl, CLSET_POP_TIMOD, NULL); */ - }; + } return (cl); Modified: projects/release-pkg/lib/libthr/thread/thr_mutex.c ============================================================================== --- projects/release-pkg/lib/libthr/thread/thr_mutex.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/lib/libthr/thread/thr_mutex.c Tue Apr 12 17:00:13 2016 (r297861) @@ -476,7 +476,8 @@ check_and_init_mutex(pthread_mutex_t *mu *m = __thr_pshared_offpage(mutex, 0); if (*m == NULL) ret = EINVAL; - shared_mutex_init(*m, NULL); + else + shared_mutex_init(*m, NULL); } else if (__predict_false(*m <= THR_MUTEX_DESTROYED)) { if (*m == THR_MUTEX_DESTROYED) { ret = EINVAL; Modified: projects/release-pkg/lib/msun/tests/Makefile ============================================================================== --- projects/release-pkg/lib/msun/tests/Makefile Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/lib/msun/tests/Makefile Tue Apr 12 17:00:13 2016 (r297861) @@ -65,9 +65,9 @@ TAP_TESTS_C+= next_test TAP_TESTS_C+= rem_test TAP_TESTS_C+= trig_test -.for t in ${TAP_TESTS_C} -CFLAGS.$t+= -O0 -.endfor +.if !empty(PROG) && !empty(TAP_TESTS_C:M${PROG}) +CFLAGS+= -O0 +.endif CSTD= c99 Modified: projects/release-pkg/sbin/devd/tests/client_test.c ============================================================================== --- projects/release-pkg/sbin/devd/tests/client_test.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sbin/devd/tests/client_test.c Tue Apr 12 17:00:13 2016 (r297861) @@ -34,6 +34,10 @@ __FBSDID("$FreeBSD$"); #include #include + +const char create_pat[] = "!system=DEVFS subsystem=CDEV type=CREATE cdev=md"; +const char destroy_pat[] = "!system=DEVFS subsystem=CDEV type=DESTROY cdev=md"; + /* Helper functions*/ /* @@ -63,6 +67,24 @@ create_two_events(void) ATF_REQUIRE_EQ(0, pclose(destroy_stdout)); } +/* Setup and return an open client socket */ +static int +common_setup(int socktype, const char* sockpath) { + struct sockaddr_un devd_addr; + int s, error; + + memset(&devd_addr, 0, sizeof(devd_addr)); + devd_addr.sun_family = PF_LOCAL; + strlcpy(devd_addr.sun_path, sockpath, sizeof(devd_addr.sun_path)); + s = socket(PF_LOCAL, socktype, 0); + ATF_REQUIRE(s >= 0); + error = connect(s, (struct sockaddr*)&devd_addr, SUN_LEN(&devd_addr)); + ATF_REQUIRE_EQ(0, error); + + create_two_events(); + return (s); +} + /* * Test Cases */ @@ -75,27 +97,10 @@ ATF_TC_WITHOUT_HEAD(seqpacket); ATF_TC_BODY(seqpacket, tc) { int s; - int error; - struct sockaddr_un devd_addr; bool got_create_event = false; bool got_destroy_event = false; - const char create_pat[] = - "!system=DEVFS subsystem=CDEV type=CREATE cdev=md"; - const char destroy_pat[] = - "!system=DEVFS subsystem=CDEV type=DESTROY cdev=md"; - - memset(&devd_addr, 0, sizeof(devd_addr)); - devd_addr.sun_family = PF_LOCAL; - strlcpy(devd_addr.sun_path, "/var/run/devd.seqpacket.pipe", - sizeof(devd_addr.sun_path)); - - s = socket(PF_LOCAL, SOCK_SEQPACKET, 0); - ATF_REQUIRE(s >= 0); - error = connect(s, (struct sockaddr*)&devd_addr, SUN_LEN(&devd_addr)); - ATF_REQUIRE_EQ(0, error); - - create_two_events(); + s = common_setup(SOCK_SEQPACKET, "/var/run/devd.seqpacket.pipe"); /* * Loop until both events are detected on _different_ reads * There may be extra events due to unrelated system activity @@ -132,31 +137,14 @@ ATF_TC_WITHOUT_HEAD(stream); ATF_TC_BODY(stream, tc) { int s; - int error; - struct sockaddr_un devd_addr; bool got_create_event = false; bool got_destroy_event = false; - const char create_pat[] = - "!system=DEVFS subsystem=CDEV type=CREATE cdev=md"; - const char destroy_pat[] = - "!system=DEVFS subsystem=CDEV type=DESTROY cdev=md"; ssize_t len = 0; - memset(&devd_addr, 0, sizeof(devd_addr)); - devd_addr.sun_family = PF_LOCAL; - strlcpy(devd_addr.sun_path, "/var/run/devd.pipe", - sizeof(devd_addr.sun_path)); - - s = socket(PF_LOCAL, SOCK_STREAM, 0); - ATF_REQUIRE(s >= 0); - error = connect(s, (struct sockaddr*)&devd_addr, SUN_LEN(&devd_addr)); - ATF_REQUIRE_EQ(0, error); - - create_two_events(); - + s = common_setup(SOCK_STREAM, "/var/run/devd.pipe"); /* - * Loop until both events are detected on _different_ reads - * There may be extra events due to unrelated system activity + * Loop until both events are detected on the same or different reads. + * There may be extra events due to unrelated system activity. * If we never get both events, then the test will timeout. */ while (!(got_create_event && got_destroy_event)) { @@ -169,7 +157,7 @@ ATF_TC_BODY(stream, tc) ATF_REQUIRE(newlen != -1); len += newlen; /* NULL terminate the result */ - event[newlen] = '\0'; + event[len] = '\0'; printf("%s", event); create_pos = strstr(event, create_pat); Modified: projects/release-pkg/share/man/man5/src.conf.5 ============================================================================== --- projects/release-pkg/share/man/man5/src.conf.5 Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/share/man/man5/src.conf.5 Tue Apr 12 17:00:13 2016 (r297861) @@ -1,7 +1,7 @@ .\" DO NOT EDIT-- this file is automatically generated. .\" from FreeBSD: head/tools/build/options/makeman 292283 2015-12-15 18:42:30Z bdrewery .\" $FreeBSD$ -.Dd March 30, 2016 +.Dd April 11, 2016 .Dt SRC.CONF 5 .Os .Sh NAME @@ -473,7 +473,7 @@ executable binary and shared library. .\" from FreeBSD: head/tools/build/options/WITHOUT_DICT 156932 2006-03-21 07:50:50Z ru Set to not build the Webster dictionary files. .It Va WITH_DIRDEPS_BUILD -.\" from FreeBSD: head/tools/build/options/WITH_DIRDEPS_BUILD 290816 2015-11-14 03:24:48Z sjg +.\" from FreeBSD: head/tools/build/options/WITH_DIRDEPS_BUILD 297843 2016-04-12 03:37:42Z bdrewery Enable building in meta mode. This is an experimental build feature. For details see @@ -494,7 +494,9 @@ computing a graph of tree dependencies f Setting .Va NO_DIRDEPS will skip checking dirdep dependencies and will only build in the current -directory. +and child directories. +.Va NO_DIRDEPS_BELOW +will skip building any dirdeps and only build the current directory. .Pp As each target is made .Xr make 1 @@ -1057,9 +1059,18 @@ Set to not build utilities for manual pa .Xr manctl 8 , and related support files. .It Va WITH_META_MODE -.\" from FreeBSD: head/tools/build/options/WITH_META_MODE 290816 2015-11-14 03:24:48Z sjg +.\" from FreeBSD: head/tools/build/options/WITH_META_MODE 297844 2016-04-12 03:40:13Z bdrewery Create meta files when not doing DIRDEPS_BUILD. -The meta files can be useful for debugging. +When the +.Xr filemon 4 +module is loaded, dependencies will be tracked for all commands. +If any command, its dependencies, or files it generates are missing then +the target will be considered out-of-date and rebuilt. +The meta files can also be useful for debugging. +.Pp +The build will hide commands ran unless +.Va NO_SILENT +is defined. .Pp This must be set in the environment, make command line, or .Pa /etc/src-env.conf , Modified: projects/release-pkg/share/mk/local.sys.mk ============================================================================== --- projects/release-pkg/share/mk/local.sys.mk Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/share/mk/local.sys.mk Tue Apr 12 17:00:13 2016 (r297861) @@ -33,7 +33,8 @@ OBJTOP?= ${.OBJDIR:S,${.CURDIR},,}${SRCT # we can afford to use cookies to prevent some targets # re-running needlessly but only when using filemon. .if ${.MAKE.MODE:Mnofilemon} == "" -META_COOKIE= ${COOKIE.${.TARGET}:U${.OBJDIR}/${.TARGET}} +META_COOKIE_COND= empty(.TARGET:M${.OBJDIR}) +META_COOKIE= ${COOKIE.${.TARGET}:U${${META_COOKIE_COND}:?${.OBJDIR}/${.TARGET}:${.TARGET}}} META_COOKIE_RM= @rm -f ${META_COOKIE} META_COOKIE_TOUCH= @touch ${META_COOKIE} CLEANFILES+= ${META_TARGETS} Modified: projects/release-pkg/sys/amd64/amd64/exception.S ============================================================================== --- projects/release-pkg/sys/amd64/amd64/exception.S Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/amd64/amd64/exception.S Tue Apr 12 17:00:13 2016 (r297861) @@ -211,6 +211,8 @@ alltraps_pushregs_no_rdi: * interrupt. For all other trap types, just handle them in * the usual way. */ + testb $SEL_RPL_MASK,TF_CS(%rsp) /* Did we come from kernel? */ + jnz calltrap /* ignore userland traps */ cmpl $T_BPTFLT,TF_TRAPNO(%rsp) jne calltrap Modified: projects/release-pkg/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/release-pkg/sys/amd64/amd64/mp_machdep.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/amd64/amd64/mp_machdep.c Tue Apr 12 17:00:13 2016 (r297861) @@ -247,7 +247,7 @@ init_secondary(void) wrmsr(MSR_FSBASE, 0); /* User value */ wrmsr(MSR_GSBASE, (u_int64_t)pc); wrmsr(MSR_KGSBASE, (u_int64_t)pc); /* XXX User value while we're in the kernel */ - intel_fix_cpuid(); + fix_cpuid(); lidt(&r_idt); Modified: projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Apr 12 17:00:13 2016 (r297861) @@ -563,6 +563,7 @@ typedef struct arc_stats { kstat_named_t arcstat_l2_compress_successes; kstat_named_t arcstat_l2_compress_zeros; kstat_named_t arcstat_l2_compress_failures; + kstat_named_t arcstat_l2_padding_needed; kstat_named_t arcstat_l2_write_trylock_fail; kstat_named_t arcstat_l2_write_passed_headroom; kstat_named_t arcstat_l2_write_spa_mismatch; @@ -664,6 +665,7 @@ static arc_stats_t arc_stats = { { "l2_compress_successes", KSTAT_DATA_UINT64 }, { "l2_compress_zeros", KSTAT_DATA_UINT64 }, { "l2_compress_failures", KSTAT_DATA_UINT64 }, + { "l2_padding_needed", KSTAT_DATA_UINT64 }, { "l2_write_trylock_fail", KSTAT_DATA_UINT64 }, { "l2_write_passed_headroom", KSTAT_DATA_UINT64 }, { "l2_write_spa_mismatch", KSTAT_DATA_UINT64 }, @@ -837,7 +839,7 @@ typedef struct l1arc_buf_hdr { refcount_t b_refcnt; arc_callback_t *b_acb; - /* temporary buffer holder for in-flight compressed data */ + /* temporary buffer holder for in-flight compressed or padded data */ void *b_tmp_cdata; } l1arc_buf_hdr_t; @@ -1098,6 +1100,7 @@ typedef struct l2arc_read_callback { zbookmark_phys_t l2rcb_zb; /* original bookmark */ int l2rcb_flags; /* original flags */ enum zio_compress l2rcb_compress; /* applied compress */ + void *l2rcb_data; /* temporary buffer */ } l2arc_read_callback_t; typedef struct l2arc_write_callback { @@ -1128,7 +1131,7 @@ static uint32_t arc_bufc_to_flags(arc_bu static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *); static void l2arc_read_done(zio_t *); -static boolean_t l2arc_compress_buf(arc_buf_hdr_t *); +static boolean_t l2arc_transform_buf(arc_buf_hdr_t *, boolean_t); static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress); static void l2arc_release_cdata_buf(arc_buf_hdr_t *); @@ -2215,6 +2218,8 @@ arc_buf_data_free(arc_buf_t *buf, void ( static void arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr) { + size_t align, asize, len; + ASSERT(HDR_HAS_L2HDR(hdr)); ASSERT(MUTEX_HELD(&hdr->b_l2hdr.b_dev->l2ad_mtx)); @@ -2236,16 +2241,15 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr } /* - * The header does not have compression enabled. This can be due - * to the buffer not being compressible, or because we're - * freeing the buffer before the second phase of - * l2arc_write_buffer() has started (which does the compression - * step). In either case, b_tmp_cdata does not point to a - * separately compressed buffer, so there's nothing to free (it - * points to the same buffer as the arc_buf_t's b_data field). - */ - if (hdr->b_l2hdr.b_compress == ZIO_COMPRESS_OFF) { - hdr->b_l1hdr.b_tmp_cdata = NULL; + * The bufer has been chosen for writing to L2ARC, but it's + * not being written just yet. In other words, + * b_tmp_cdata points to exactly the same buffer as b_data, + * l2arc_transform_buf hasn't been called. + */ + if (hdr->b_l2hdr.b_daddr == L2ARC_ADDR_UNSET) { + ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, + hdr->b_l1hdr.b_buf->b_data); + ASSERT3U(hdr->b_l2hdr.b_compress, ==, ZIO_COMPRESS_OFF); return; } @@ -2258,12 +2262,18 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr return; } - ASSERT(L2ARC_IS_VALID_COMPRESS(hdr->b_l2hdr.b_compress)); - - arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, - hdr->b_size, zio_data_buf_free); + /* + * Nothing to do if the temporary buffer was not required. + */ + if (hdr->b_l1hdr.b_tmp_cdata == NULL) + return; ARCSTAT_BUMP(arcstat_l2_cdata_free_on_write); + len = hdr->b_size; + align = (size_t)1 << hdr->b_l2hdr.b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, asize, + zio_data_buf_free); hdr->b_l1hdr.b_tmp_cdata = NULL; } @@ -4534,6 +4544,7 @@ top: !HDR_L2_WRITING(hdr) && !HDR_L2_EVICTED(hdr) && !(l2arc_noprefetch && HDR_PREFETCH(hdr))) { l2arc_read_callback_t *cb; + void* b_data; DTRACE_PROBE1(l2arc__hit, arc_buf_hdr_t *, hdr); ARCSTAT_BUMP(arcstat_l2_hits); @@ -4546,6 +4557,14 @@ top: cb->l2rcb_zb = *zb; cb->l2rcb_flags = zio_flags; cb->l2rcb_compress = b_compress; + if (b_asize > hdr->b_size) { + ASSERT3U(b_compress, ==, + ZIO_COMPRESS_OFF); + b_data = zio_data_buf_alloc(b_asize); + cb->l2rcb_data = b_data; + } else { + b_data = buf->b_data; + } ASSERT(addr >= VDEV_LABEL_START_SIZE && addr + size < vd->vdev_psize - @@ -4558,6 +4577,7 @@ top: * was squashed to zero size by compression. */ if (b_compress == ZIO_COMPRESS_EMPTY) { + ASSERT3U(b_asize, ==, 0); rzio = zio_null(pio, spa, vd, l2arc_read_done, cb, zio_flags | ZIO_FLAG_DONT_CACHE | @@ -4566,7 +4586,7 @@ top: ZIO_FLAG_DONT_RETRY); } else { rzio = zio_read_phys(pio, vd, addr, - b_asize, buf->b_data, + b_asize, b_data, ZIO_CHECKSUM_OFF, l2arc_read_done, cb, priority, zio_flags | ZIO_FLAG_DONT_CACHE | @@ -6051,6 +6071,32 @@ l2arc_read_done(zio_t *zio) ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); /* + * If the data was read into a temporary buffer, + * move it and free the buffer. + */ + if (cb->l2rcb_data != NULL) { + ASSERT3U(hdr->b_size, <, zio->io_size); + ASSERT3U(cb->l2rcb_compress, ==, ZIO_COMPRESS_OFF); + if (zio->io_error == 0) + bcopy(cb->l2rcb_data, buf->b_data, hdr->b_size); + + /* + * The following must be done regardless of whether + * there was an error: + * - free the temporary buffer + * - point zio to the real ARC buffer + * - set zio size accordingly + * These are required because zio is either re-used for + * an I/O of the block in the case of the error + * or the zio is passed to arc_read_done() and it + * needs real data. + */ + zio_data_buf_free(cb->l2rcb_data, zio->io_size); + zio->io_size = zio->io_orig_size = hdr->b_size; + zio->io_data = zio->io_orig_data = buf->b_data; + } + + /* * If the buffer was compressed, decompress it first. */ if (cb->l2rcb_compress != ZIO_COMPRESS_OFF) @@ -6334,6 +6380,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_de kmutex_t *hash_lock; uint64_t buf_sz; uint64_t buf_a_sz; + size_t align; if (arc_warm == B_FALSE) hdr_prev = multilist_sublist_next(mls, hdr); @@ -6371,7 +6418,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de * disk block size. */ buf_sz = hdr->b_size; - buf_a_sz = vdev_psize_to_asize(dev->l2ad_vdev, buf_sz); + align = (size_t)1 << dev->l2ad_vdev->vdev_ashift; + buf_a_sz = P2ROUNDUP(buf_sz, align); if ((write_asize + buf_a_sz) > target_sz) { full = B_TRUE; @@ -6475,26 +6523,15 @@ l2arc_write_buffers(spa_t *spa, l2arc_de mutex_enter(&dev->l2ad_mtx); /* - * Note that elsewhere in this file arcstat_l2_asize - * and the used space on l2ad_vdev are updated using b_asize, - * which is not necessarily rounded up to the device block size. - * Too keep accounting consistent we do the same here as well: - * stats_size accumulates the sum of b_asize of the written buffers, - * while write_asize accumulates the sum of b_asize rounded up - * to the device block size. - * The latter sum is used only to validate the corectness of the code. - */ - uint64_t stats_size = 0; - write_asize = 0; - - /* * Now start writing the buffers. We're starting at the write head * and work backwards, retracing the course of the buffer selector * loop above. */ + write_asize = 0; for (hdr = list_prev(&dev->l2ad_buflist, head); hdr; hdr = list_prev(&dev->l2ad_buflist, hdr)) { uint64_t buf_sz; + boolean_t compress; /* * We rely on the L1 portion of the header below, so @@ -6513,22 +6550,26 @@ l2arc_write_buffers(spa_t *spa, l2arc_de */ hdr->b_l2hdr.b_daddr = dev->l2ad_hand; - if ((HDR_L2COMPRESS(hdr)) && - hdr->b_l2hdr.b_asize >= buf_compress_minsz) { - if (l2arc_compress_buf(hdr)) { - /* - * If compression succeeded, enable headroom - * boost on the next scan cycle. - */ - *headroom_boost = B_TRUE; - } + /* + * Save a pointer to the original buffer data we had previously + * stashed away. + */ + buf_data = hdr->b_l1hdr.b_tmp_cdata; + + compress = HDR_L2COMPRESS(hdr) && + hdr->b_l2hdr.b_asize >= buf_compress_minsz; + if (l2arc_transform_buf(hdr, compress)) { + /* + * If compression succeeded, enable headroom + * boost on the next scan cycle. + */ + *headroom_boost = B_TRUE; } /* - * Pick up the buffer data we had previously stashed away - * (and now potentially also compressed). + * Get the new buffer size that accounts for compression + * and padding. */ - buf_data = hdr->b_l1hdr.b_tmp_cdata; buf_sz = hdr->b_l2hdr.b_asize; /* @@ -6540,8 +6581,12 @@ l2arc_write_buffers(spa_t *spa, l2arc_de /* Compression may have squashed the buffer to zero length. */ if (buf_sz != 0) { - uint64_t buf_a_sz; - + /* + * If the data was padded or compressed, then it + * it is in a new buffer. + */ + if (hdr->b_l1hdr.b_tmp_cdata != NULL) + buf_data = hdr->b_l1hdr.b_tmp_cdata; wzio = zio_write_phys(pio, dev->l2ad_vdev, dev->l2ad_hand, buf_sz, buf_data, ZIO_CHECKSUM_OFF, NULL, NULL, ZIO_PRIORITY_ASYNC_WRITE, @@ -6551,14 +6596,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de zio_t *, wzio); (void) zio_nowait(wzio); - stats_size += buf_sz; - - /* - * Keep the clock hand suitably device-aligned. - */ - buf_a_sz = vdev_psize_to_asize(dev->l2ad_vdev, buf_sz); - write_asize += buf_a_sz; - dev->l2ad_hand += buf_a_sz; + write_asize += buf_sz; + dev->l2ad_hand += buf_sz; } } @@ -6568,8 +6607,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de ARCSTAT_BUMP(arcstat_l2_writes_sent); ARCSTAT_INCR(arcstat_l2_write_bytes, write_asize); ARCSTAT_INCR(arcstat_l2_size, write_sz); - ARCSTAT_INCR(arcstat_l2_asize, stats_size); - vdev_space_update(dev->l2ad_vdev, stats_size, 0, 0); + ARCSTAT_INCR(arcstat_l2_asize, write_asize); + vdev_space_update(dev->l2ad_vdev, write_asize, 0, 0); /* * Bump device hand to the device start if it is approaching the end. @@ -6588,12 +6627,18 @@ l2arc_write_buffers(spa_t *spa, l2arc_de } /* - * Compresses an L2ARC buffer. + * Transforms, possibly compresses and pads, an L2ARC buffer. * The data to be compressed must be prefilled in l1hdr.b_tmp_cdata and its * size in l2hdr->b_asize. This routine tries to compress the data and * depending on the compression result there are three possible outcomes: - * *) The buffer was incompressible. The original l2hdr contents were left - * untouched and are ready for writing to an L2 device. + * *) The buffer was incompressible. The buffer size was already ashift aligned. + * The original hdr contents were left untouched except for b_tmp_cdata, + * which is reset to NULL. The caller must keep a pointer to the original + * data. + * *) The buffer was incompressible. The buffer size was not ashift aligned. + * b_tmp_cdata was replaced with a temporary data buffer which holds a padded + * (aligned) copy of the data. Once writing is done, invoke + * l2arc_release_cdata_buf on this hdr to free the temporary buffer. * *) The buffer was all-zeros, so there is no need to write it to an L2 * device. To indicate this situation b_tmp_cdata is NULL'ed, b_asize is * set to zero and b_compress is set to ZIO_COMPRESS_EMPTY. @@ -6607,10 +6652,11 @@ l2arc_write_buffers(spa_t *spa, l2arc_de * buffer was incompressible). */ static boolean_t -l2arc_compress_buf(arc_buf_hdr_t *hdr) +l2arc_transform_buf(arc_buf_hdr_t *hdr, boolean_t compress) { void *cdata; - size_t csize, len, rounded; + size_t align, asize, csize, len, rounded; + ASSERT(HDR_HAS_L2HDR(hdr)); l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr; @@ -6619,14 +6665,19 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) ASSERT(hdr->b_l1hdr.b_tmp_cdata != NULL); len = l2hdr->b_asize; - cdata = zio_data_buf_alloc(len); + align = (size_t)1 << l2hdr->b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + cdata = zio_data_buf_alloc(asize); ASSERT3P(cdata, !=, NULL); - csize = zio_compress_data(ZIO_COMPRESS_LZ4, hdr->b_l1hdr.b_tmp_cdata, - cdata, l2hdr->b_asize); + if (compress) + csize = zio_compress_data(ZIO_COMPRESS_LZ4, + hdr->b_l1hdr.b_tmp_cdata, cdata, len); + else + csize = len; if (csize == 0) { /* zero block, indicate that there's nothing to write */ - zio_data_buf_free(cdata, len); + zio_data_buf_free(cdata, asize); l2hdr->b_compress = ZIO_COMPRESS_EMPTY; l2hdr->b_asize = 0; hdr->b_l1hdr.b_tmp_cdata = NULL; @@ -6634,8 +6685,8 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) return (B_TRUE); } - rounded = P2ROUNDUP(csize, - (size_t)1 << l2hdr->b_dev->l2ad_vdev->vdev_ashift); + rounded = P2ROUNDUP(csize, align); + ASSERT3U(rounded, <=, asize); if (rounded < len) { /* * Compression succeeded, we'll keep the cdata around for @@ -6652,11 +6703,32 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) return (B_TRUE); } else { /* - * Compression failed, release the compressed buffer. - * l2hdr will be left unmodified. + * Compression did not save space. */ - zio_data_buf_free(cdata, len); - ARCSTAT_BUMP(arcstat_l2_compress_failures); + if (P2PHASE(len, align) != 0) { + /* + * Use compression buffer for a copy of data padded to + * the proper size. Compression algorithm remains set + * to ZIO_COMPRESS_OFF. + */ + ASSERT3U(len, <, asize); + bcopy(hdr->b_l1hdr.b_tmp_cdata, cdata, len); + bzero((char *)cdata + len, asize - len); + l2hdr->b_asize = asize; + hdr->b_l1hdr.b_tmp_cdata = cdata; + ARCSTAT_BUMP(arcstat_l2_padding_needed); + } else { + ASSERT3U(len, ==, asize); + /* + * The original buffer is good as is, + * release the compressed buffer. + * l2hdr will be left unmodified except for b_tmp_cdata. + */ + zio_data_buf_free(cdata, asize); + hdr->b_l1hdr.b_tmp_cdata = NULL; + } + if (compress) + ARCSTAT_BUMP(arcstat_l2_compress_failures); return (B_FALSE); } } @@ -6725,44 +6797,30 @@ l2arc_decompress_zio(zio_t *zio, arc_buf /* * Releases the temporary b_tmp_cdata buffer in an l2arc header structure. - * This buffer serves as a temporary holder of compressed data while + * This buffer serves as a temporary holder of compressed or padded data while * the buffer entry is being written to an l2arc device. Once that is * done, we can dispose of it. */ static void l2arc_release_cdata_buf(arc_buf_hdr_t *hdr) { - ASSERT(HDR_HAS_L2HDR(hdr)); + size_t align, asize, len; enum zio_compress comp = hdr->b_l2hdr.b_compress; + ASSERT(HDR_HAS_L2HDR(hdr)); ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT(comp == ZIO_COMPRESS_OFF || L2ARC_IS_VALID_COMPRESS(comp)); - if (comp == ZIO_COMPRESS_OFF) { - /* - * In this case, b_tmp_cdata points to the same buffer - * as the arc_buf_t's b_data field. We don't want to - * free it, since the arc_buf_t will handle that. - */ + if (hdr->b_l1hdr.b_tmp_cdata != NULL) { + ASSERT(comp != ZIO_COMPRESS_EMPTY); + len = hdr->b_size; + align = (size_t)1 << hdr->b_l2hdr.b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + zio_data_buf_free(hdr->b_l1hdr.b_tmp_cdata, asize); hdr->b_l1hdr.b_tmp_cdata = NULL; - } else if (comp == ZIO_COMPRESS_EMPTY) { - /* - * In this case, b_tmp_cdata was compressed to an empty - * buffer, thus there's nothing to free and b_tmp_cdata - * should have been set to NULL in l2arc_write_buffers(). - */ - ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, NULL); } else { - /* - * If the data was compressed, then we've allocated a - * temporary buffer for it, so now we need to release it. - */ - ASSERT(hdr->b_l1hdr.b_tmp_cdata != NULL); - zio_data_buf_free(hdr->b_l1hdr.b_tmp_cdata, - hdr->b_size); - hdr->b_l1hdr.b_tmp_cdata = NULL; + ASSERT(comp == ZIO_COMPRESS_OFF || comp == ZIO_COMPRESS_EMPTY); } - } /* Modified: projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c ============================================================================== --- projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c Tue Apr 12 17:00:13 2016 (r297861) @@ -721,7 +721,7 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio if (db->db_state == DB_CACHED) { mutex_exit(&db->db_mtx); if (prefetch) - dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1); + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); if ((flags & DB_RF_HAVESTRUCT) == 0) rw_exit(&dn->dn_struct_rwlock); DB_DNODE_EXIT(db); @@ -735,7 +735,7 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio /* dbuf_read_impl has dropped db_mtx for us */ if (prefetch) - dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1); + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); if ((flags & DB_RF_HAVESTRUCT) == 0) rw_exit(&dn->dn_struct_rwlock); @@ -754,7 +754,7 @@ dbuf_read(dmu_buf_impl_t *db, zio_t *zio */ mutex_exit(&db->db_mtx); if (prefetch) - dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1); + dmu_zfetch(&dn->dn_zfetch, db->db_blkid, 1, B_TRUE); if ((flags & DB_RF_HAVESTRUCT) == 0) rw_exit(&dn->dn_struct_rwlock); DB_DNODE_EXIT(db); Modified: projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c ============================================================================== --- projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Tue Apr 12 17:00:13 2016 (r297861) @@ -458,9 +458,10 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn, dbp[i] = &db->db; } - if ((flags & DMU_READ_NO_PREFETCH) == 0 && read && - length <= zfetch_array_rd_sz) { - dmu_zfetch(&dn->dn_zfetch, blkid, nblks); + if ((flags & DMU_READ_NO_PREFETCH) == 0 && + DNODE_META_IS_CACHEABLE(dn) && length <= zfetch_array_rd_sz) { + dmu_zfetch(&dn->dn_zfetch, blkid, nblks, + read && DNODE_IS_CACHEABLE(dn)); } rw_exit(&dn->dn_struct_rwlock); Modified: projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c ============================================================================== --- projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c Tue Apr 12 16:07:41 2016 (r297860) +++ projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c Tue Apr 12 17:00:13 2016 (r297861) @@ -49,6 +49,8 @@ uint32_t zfetch_max_streams = 8; uint32_t zfetch_min_sec_reap = 2; /* max bytes to prefetch per stream (default 8MB) */ uint32_t zfetch_max_distance = 8 * 1024 * 1024; +/* max bytes to prefetch indirects for per stream (default 64MB) */ +uint32_t zfetch_max_idistance = 64 * 1024 * 1024; /* max number of bytes in an array_read in which we allow prefetching (1MB) */ uint64_t zfetch_array_rd_sz = 1024 * 1024; @@ -200,6 +202,7 @@ dmu_zfetch_stream_create(zfetch_t *zf, u zstream_t *zs = kmem_zalloc(sizeof (*zs), KM_SLEEP); zs->zs_blkid = blkid; zs->zs_pf_blkid = blkid; + zs->zs_ipf_blkid = blkid; zs->zs_atime = gethrtime(); mutex_init(&zs->zs_lock, NULL, MUTEX_DEFAULT, NULL); @@ -207,13 +210,21 @@ dmu_zfetch_stream_create(zfetch_t *zf, u } /* - * This is the prefetch entry point. It calls all of the other dmu_zfetch - * routines to create, delete, find, or operate upon prefetch streams. + * This is the predictive prefetch entry point. It associates dnode access + * specified with blkid and nblks arguments with prefetch stream, predicts + * further accesses based on that stats and initiates speculative prefetch. + * fetch_data argument specifies whether actual data blocks should be fetched: + * FALSE -- prefetch only indirect blocks for predicted data blocks; + * TRUE -- prefetch predicted data blocks plus following indirect blocks. */ void -dmu_zfetch(zfetch_t *zf, uint64_t blkid, uint64_t nblks) +dmu_zfetch(zfetch_t *zf, uint64_t blkid, uint64_t nblks, boolean_t fetch_data) { zstream_t *zs; + int64_t pf_start, ipf_start, ipf_istart, ipf_iend; + int64_t pf_ahead_blks, max_blks; + int epbs, max_dist_blks, pf_nblks, ipf_nblks; + uint64_t end_of_access_blkid = blkid + nblks; if (zfs_prefetch_disable) return; @@ -250,7 +261,7 @@ dmu_zfetch(zfetch_t *zf, uint64_t blkid, */ ZFETCHSTAT_BUMP(zfetchstat_misses); if (rw_tryupgrade(&zf->zf_rwlock)) - dmu_zfetch_stream_create(zf, blkid + nblks); + dmu_zfetch_stream_create(zf, end_of_access_blkid); rw_exit(&zf->zf_rwlock); return; } @@ -262,35 +273,74 @@ dmu_zfetch(zfetch_t *zf, uint64_t blkid, * Normally, we start prefetching where we stopped * prefetching last (zs_pf_blkid). But when we get our first * hit on this stream, zs_pf_blkid == zs_blkid, we don't - * want to prefetch to block we just accessed. In this case, + * want to prefetch the block we just accessed. In this case, * start just after the block we just accessed. */ - int64_t pf_start = MAX(zs->zs_pf_blkid, blkid + nblks); + pf_start = MAX(zs->zs_pf_blkid, end_of_access_blkid); /* * Double our amount of prefetched data, but don't let the * prefetch get further ahead than zfetch_max_distance. */ - int pf_nblks = - MIN((int64_t)zs->zs_pf_blkid - zs->zs_blkid + nblks, - zs->zs_blkid + nblks + - (zfetch_max_distance >> zf->zf_dnode->dn_datablkshift) - pf_start); + if (fetch_data) { + max_dist_blks = + zfetch_max_distance >> zf->zf_dnode->dn_datablkshift; + /* + * Previously, we were (zs_pf_blkid - blkid) ahead. We + * want to now be double that, so read that amount again, + * plus the amount we are catching up by (i.e. the amount + * read just now). + */ + pf_ahead_blks = zs->zs_pf_blkid - blkid + nblks; + max_blks = max_dist_blks - (pf_start - end_of_access_blkid); + pf_nblks = MIN(pf_ahead_blks, max_blks); + } else { + pf_nblks = 0; + } zs->zs_pf_blkid = pf_start + pf_nblks; - zs->zs_atime = gethrtime(); - zs->zs_blkid = blkid + nblks; /* - * dbuf_prefetch() issues the prefetch i/o - * asynchronously, but it may need to wait for an - * indirect block to be read from disk. Therefore - * we do not want to hold any locks while we call it. + * Do the same for indirects, starting from where we stopped last, + * or where we will stop reading data blocks (and the indirects + * that point to them). */ + ipf_start = MAX(zs->zs_ipf_blkid, zs->zs_pf_blkid); + max_dist_blks = zfetch_max_idistance >> zf->zf_dnode->dn_datablkshift; + /* + * We want to double our distance ahead of the data prefetch + * (or reader, if we are not prefetching data). Previously, we + * were (zs_ipf_blkid - blkid) ahead. To double that, we read + * that amount again, plus the amount we are catching up by + * (i.e. the amount read now + the amount of data prefetched now). + */ + pf_ahead_blks = zs->zs_ipf_blkid - blkid + nblks + pf_nblks; + max_blks = max_dist_blks - (ipf_start - end_of_access_blkid); + ipf_nblks = MIN(pf_ahead_blks, max_blks); + zs->zs_ipf_blkid = ipf_start + ipf_nblks; + + epbs = zf->zf_dnode->dn_indblkshift - SPA_BLKPTRSHIFT; + ipf_istart = P2ROUNDUP(ipf_start, 1 << epbs) >> epbs; + ipf_iend = P2ROUNDUP(zs->zs_ipf_blkid, 1 << epbs) >> epbs; + + zs->zs_atime = gethrtime(); + zs->zs_blkid = end_of_access_blkid; mutex_exit(&zs->zs_lock); rw_exit(&zf->zf_rwlock); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 12 20:50:28 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 81416B0E018 for ; Tue, 12 Apr 2016 20:50:28 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 19D5615B2; Tue, 12 Apr 2016 20:50:28 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CKoRTL037571; Tue, 12 Apr 2016 20:50:27 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CKoQ7Y037560; Tue, 12 Apr 2016 20:50:26 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604122050.u3CKoQ7Y037560@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 12 Apr 2016 20:50:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297870 - in projects/pnfs-server/sys: amd64/amd64 cddl/contrib/opensolaris/uts/common/fs/zfs dev/cxgbe/common dev/hyperv/vmbus dev/isp dev/mn dev/mpt dev/mrsas dev/mvs dev/nxge/xgehal ... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 20:50:28 -0000 Author: rmacklem Date: Tue Apr 12 20:50:25 2016 New Revision: 297870 URL: https://svnweb.freebsd.org/changeset/base/297870 Log: Bring kernel up to date. Modified: projects/pnfs-server/sys/amd64/amd64/exception.S projects/pnfs-server/sys/amd64/amd64/mp_machdep.c projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/pnfs-server/sys/dev/cxgbe/common/t4_regs.h projects/pnfs-server/sys/dev/hyperv/vmbus/hv_hv.c projects/pnfs-server/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c projects/pnfs-server/sys/dev/isp/isp.c projects/pnfs-server/sys/dev/isp/isp_freebsd.c projects/pnfs-server/sys/dev/isp/isp_freebsd.h projects/pnfs-server/sys/dev/isp/isp_pci.c projects/pnfs-server/sys/dev/isp/ispvar.h projects/pnfs-server/sys/dev/mn/if_mn.c projects/pnfs-server/sys/dev/mpt/mpt_raid.c projects/pnfs-server/sys/dev/mrsas/mrsas_ioctl.c projects/pnfs-server/sys/dev/mvs/mvs_pci.c projects/pnfs-server/sys/dev/mvs/mvs_soc.c projects/pnfs-server/sys/dev/nxge/xgehal/xgehal-device.c projects/pnfs-server/sys/dev/sound/isa/ad1816.c projects/pnfs-server/sys/dev/sound/isa/ess.c projects/pnfs-server/sys/dev/sound/isa/mss.c projects/pnfs-server/sys/dev/sound/isa/sb16.c projects/pnfs-server/sys/dev/sound/isa/sb8.c projects/pnfs-server/sys/dev/sound/midi/midi.c projects/pnfs-server/sys/dev/sound/pci/als4000.c projects/pnfs-server/sys/dev/sound/pci/aureal.c projects/pnfs-server/sys/dev/sound/pci/cmi.c projects/pnfs-server/sys/dev/sound/pci/emu10k1.c projects/pnfs-server/sys/dev/sound/pci/emu10kx.c projects/pnfs-server/sys/dev/sound/pci/fm801.c projects/pnfs-server/sys/dev/sound/pci/neomagic.c projects/pnfs-server/sys/dev/sound/pci/solo.c projects/pnfs-server/sys/dev/sound/pci/t4dwave.c projects/pnfs-server/sys/dev/sound/pci/via8233.c projects/pnfs-server/sys/dev/sound/pci/via82c686.c projects/pnfs-server/sys/dev/vxge/vxgehal/vxgehal-fifo.c projects/pnfs-server/sys/dev/vxge/vxgehal/vxgehal-mrpcim.c projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-server/sys/i386/i386/mp_machdep.c projects/pnfs-server/sys/kern/kern_rctl.c projects/pnfs-server/sys/mips/include/resource.h projects/pnfs-server/sys/mips/mediatek/mtk_pcie.c projects/pnfs-server/sys/mips/mediatek/mtk_pcie.h projects/pnfs-server/sys/netinet/sctp_usrreq.c projects/pnfs-server/sys/netinet/sctp_var.h projects/pnfs-server/sys/x86/include/specialreg.h projects/pnfs-server/sys/x86/include/x86_var.h projects/pnfs-server/sys/x86/x86/identcpu.c Directory Properties: projects/pnfs-server/sys/ (props changed) projects/pnfs-server/sys/cddl/contrib/opensolaris/ (props changed) projects/pnfs-server/sys/dev/hyperv/ (props changed) Modified: projects/pnfs-server/sys/amd64/amd64/exception.S ============================================================================== --- projects/pnfs-server/sys/amd64/amd64/exception.S Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/amd64/amd64/exception.S Tue Apr 12 20:50:25 2016 (r297870) @@ -211,6 +211,8 @@ alltraps_pushregs_no_rdi: * interrupt. For all other trap types, just handle them in * the usual way. */ + testb $SEL_RPL_MASK,TF_CS(%rsp) /* Did we come from kernel? */ + jnz calltrap /* ignore userland traps */ cmpl $T_BPTFLT,TF_TRAPNO(%rsp) jne calltrap Modified: projects/pnfs-server/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/pnfs-server/sys/amd64/amd64/mp_machdep.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/amd64/amd64/mp_machdep.c Tue Apr 12 20:50:25 2016 (r297870) @@ -247,7 +247,7 @@ init_secondary(void) wrmsr(MSR_FSBASE, 0); /* User value */ wrmsr(MSR_GSBASE, (u_int64_t)pc); wrmsr(MSR_KGSBASE, (u_int64_t)pc); /* XXX User value while we're in the kernel */ - intel_fix_cpuid(); + fix_cpuid(); lidt(&r_idt); Modified: projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Tue Apr 12 20:50:25 2016 (r297870) @@ -563,6 +563,7 @@ typedef struct arc_stats { kstat_named_t arcstat_l2_compress_successes; kstat_named_t arcstat_l2_compress_zeros; kstat_named_t arcstat_l2_compress_failures; + kstat_named_t arcstat_l2_padding_needed; kstat_named_t arcstat_l2_write_trylock_fail; kstat_named_t arcstat_l2_write_passed_headroom; kstat_named_t arcstat_l2_write_spa_mismatch; @@ -664,6 +665,7 @@ static arc_stats_t arc_stats = { { "l2_compress_successes", KSTAT_DATA_UINT64 }, { "l2_compress_zeros", KSTAT_DATA_UINT64 }, { "l2_compress_failures", KSTAT_DATA_UINT64 }, + { "l2_padding_needed", KSTAT_DATA_UINT64 }, { "l2_write_trylock_fail", KSTAT_DATA_UINT64 }, { "l2_write_passed_headroom", KSTAT_DATA_UINT64 }, { "l2_write_spa_mismatch", KSTAT_DATA_UINT64 }, @@ -837,7 +839,7 @@ typedef struct l1arc_buf_hdr { refcount_t b_refcnt; arc_callback_t *b_acb; - /* temporary buffer holder for in-flight compressed data */ + /* temporary buffer holder for in-flight compressed or padded data */ void *b_tmp_cdata; } l1arc_buf_hdr_t; @@ -1098,6 +1100,7 @@ typedef struct l2arc_read_callback { zbookmark_phys_t l2rcb_zb; /* original bookmark */ int l2rcb_flags; /* original flags */ enum zio_compress l2rcb_compress; /* applied compress */ + void *l2rcb_data; /* temporary buffer */ } l2arc_read_callback_t; typedef struct l2arc_write_callback { @@ -1128,7 +1131,7 @@ static uint32_t arc_bufc_to_flags(arc_bu static boolean_t l2arc_write_eligible(uint64_t, arc_buf_hdr_t *); static void l2arc_read_done(zio_t *); -static boolean_t l2arc_compress_buf(arc_buf_hdr_t *); +static boolean_t l2arc_transform_buf(arc_buf_hdr_t *, boolean_t); static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress); static void l2arc_release_cdata_buf(arc_buf_hdr_t *); @@ -2215,6 +2218,8 @@ arc_buf_data_free(arc_buf_t *buf, void ( static void arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr) { + size_t align, asize, len; + ASSERT(HDR_HAS_L2HDR(hdr)); ASSERT(MUTEX_HELD(&hdr->b_l2hdr.b_dev->l2ad_mtx)); @@ -2236,16 +2241,15 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr } /* - * The header does not have compression enabled. This can be due - * to the buffer not being compressible, or because we're - * freeing the buffer before the second phase of - * l2arc_write_buffer() has started (which does the compression - * step). In either case, b_tmp_cdata does not point to a - * separately compressed buffer, so there's nothing to free (it - * points to the same buffer as the arc_buf_t's b_data field). - */ - if (hdr->b_l2hdr.b_compress == ZIO_COMPRESS_OFF) { - hdr->b_l1hdr.b_tmp_cdata = NULL; + * The bufer has been chosen for writing to L2ARC, but it's + * not being written just yet. In other words, + * b_tmp_cdata points to exactly the same buffer as b_data, + * l2arc_transform_buf hasn't been called. + */ + if (hdr->b_l2hdr.b_daddr == L2ARC_ADDR_UNSET) { + ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, + hdr->b_l1hdr.b_buf->b_data); + ASSERT3U(hdr->b_l2hdr.b_compress, ==, ZIO_COMPRESS_OFF); return; } @@ -2258,12 +2262,18 @@ arc_buf_l2_cdata_free(arc_buf_hdr_t *hdr return; } - ASSERT(L2ARC_IS_VALID_COMPRESS(hdr->b_l2hdr.b_compress)); - - arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, - hdr->b_size, zio_data_buf_free); + /* + * Nothing to do if the temporary buffer was not required. + */ + if (hdr->b_l1hdr.b_tmp_cdata == NULL) + return; ARCSTAT_BUMP(arcstat_l2_cdata_free_on_write); + len = hdr->b_size; + align = (size_t)1 << hdr->b_l2hdr.b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + arc_buf_free_on_write(hdr->b_l1hdr.b_tmp_cdata, asize, + zio_data_buf_free); hdr->b_l1hdr.b_tmp_cdata = NULL; } @@ -4534,6 +4544,7 @@ top: !HDR_L2_WRITING(hdr) && !HDR_L2_EVICTED(hdr) && !(l2arc_noprefetch && HDR_PREFETCH(hdr))) { l2arc_read_callback_t *cb; + void* b_data; DTRACE_PROBE1(l2arc__hit, arc_buf_hdr_t *, hdr); ARCSTAT_BUMP(arcstat_l2_hits); @@ -4546,6 +4557,14 @@ top: cb->l2rcb_zb = *zb; cb->l2rcb_flags = zio_flags; cb->l2rcb_compress = b_compress; + if (b_asize > hdr->b_size) { + ASSERT3U(b_compress, ==, + ZIO_COMPRESS_OFF); + b_data = zio_data_buf_alloc(b_asize); + cb->l2rcb_data = b_data; + } else { + b_data = buf->b_data; + } ASSERT(addr >= VDEV_LABEL_START_SIZE && addr + size < vd->vdev_psize - @@ -4558,6 +4577,7 @@ top: * was squashed to zero size by compression. */ if (b_compress == ZIO_COMPRESS_EMPTY) { + ASSERT3U(b_asize, ==, 0); rzio = zio_null(pio, spa, vd, l2arc_read_done, cb, zio_flags | ZIO_FLAG_DONT_CACHE | @@ -4566,7 +4586,7 @@ top: ZIO_FLAG_DONT_RETRY); } else { rzio = zio_read_phys(pio, vd, addr, - b_asize, buf->b_data, + b_asize, b_data, ZIO_CHECKSUM_OFF, l2arc_read_done, cb, priority, zio_flags | ZIO_FLAG_DONT_CACHE | @@ -6051,6 +6071,32 @@ l2arc_read_done(zio_t *zio) ASSERT3P(hash_lock, ==, HDR_LOCK(hdr)); /* + * If the data was read into a temporary buffer, + * move it and free the buffer. + */ + if (cb->l2rcb_data != NULL) { + ASSERT3U(hdr->b_size, <, zio->io_size); + ASSERT3U(cb->l2rcb_compress, ==, ZIO_COMPRESS_OFF); + if (zio->io_error == 0) + bcopy(cb->l2rcb_data, buf->b_data, hdr->b_size); + + /* + * The following must be done regardless of whether + * there was an error: + * - free the temporary buffer + * - point zio to the real ARC buffer + * - set zio size accordingly + * These are required because zio is either re-used for + * an I/O of the block in the case of the error + * or the zio is passed to arc_read_done() and it + * needs real data. + */ + zio_data_buf_free(cb->l2rcb_data, zio->io_size); + zio->io_size = zio->io_orig_size = hdr->b_size; + zio->io_data = zio->io_orig_data = buf->b_data; + } + + /* * If the buffer was compressed, decompress it first. */ if (cb->l2rcb_compress != ZIO_COMPRESS_OFF) @@ -6334,6 +6380,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_de kmutex_t *hash_lock; uint64_t buf_sz; uint64_t buf_a_sz; + size_t align; if (arc_warm == B_FALSE) hdr_prev = multilist_sublist_next(mls, hdr); @@ -6371,7 +6418,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de * disk block size. */ buf_sz = hdr->b_size; - buf_a_sz = vdev_psize_to_asize(dev->l2ad_vdev, buf_sz); + align = (size_t)1 << dev->l2ad_vdev->vdev_ashift; + buf_a_sz = P2ROUNDUP(buf_sz, align); if ((write_asize + buf_a_sz) > target_sz) { full = B_TRUE; @@ -6475,26 +6523,15 @@ l2arc_write_buffers(spa_t *spa, l2arc_de mutex_enter(&dev->l2ad_mtx); /* - * Note that elsewhere in this file arcstat_l2_asize - * and the used space on l2ad_vdev are updated using b_asize, - * which is not necessarily rounded up to the device block size. - * Too keep accounting consistent we do the same here as well: - * stats_size accumulates the sum of b_asize of the written buffers, - * while write_asize accumulates the sum of b_asize rounded up - * to the device block size. - * The latter sum is used only to validate the corectness of the code. - */ - uint64_t stats_size = 0; - write_asize = 0; - - /* * Now start writing the buffers. We're starting at the write head * and work backwards, retracing the course of the buffer selector * loop above. */ + write_asize = 0; for (hdr = list_prev(&dev->l2ad_buflist, head); hdr; hdr = list_prev(&dev->l2ad_buflist, hdr)) { uint64_t buf_sz; + boolean_t compress; /* * We rely on the L1 portion of the header below, so @@ -6513,22 +6550,26 @@ l2arc_write_buffers(spa_t *spa, l2arc_de */ hdr->b_l2hdr.b_daddr = dev->l2ad_hand; - if ((HDR_L2COMPRESS(hdr)) && - hdr->b_l2hdr.b_asize >= buf_compress_minsz) { - if (l2arc_compress_buf(hdr)) { - /* - * If compression succeeded, enable headroom - * boost on the next scan cycle. - */ - *headroom_boost = B_TRUE; - } + /* + * Save a pointer to the original buffer data we had previously + * stashed away. + */ + buf_data = hdr->b_l1hdr.b_tmp_cdata; + + compress = HDR_L2COMPRESS(hdr) && + hdr->b_l2hdr.b_asize >= buf_compress_minsz; + if (l2arc_transform_buf(hdr, compress)) { + /* + * If compression succeeded, enable headroom + * boost on the next scan cycle. + */ + *headroom_boost = B_TRUE; } /* - * Pick up the buffer data we had previously stashed away - * (and now potentially also compressed). + * Get the new buffer size that accounts for compression + * and padding. */ - buf_data = hdr->b_l1hdr.b_tmp_cdata; buf_sz = hdr->b_l2hdr.b_asize; /* @@ -6540,8 +6581,12 @@ l2arc_write_buffers(spa_t *spa, l2arc_de /* Compression may have squashed the buffer to zero length. */ if (buf_sz != 0) { - uint64_t buf_a_sz; - + /* + * If the data was padded or compressed, then it + * it is in a new buffer. + */ + if (hdr->b_l1hdr.b_tmp_cdata != NULL) + buf_data = hdr->b_l1hdr.b_tmp_cdata; wzio = zio_write_phys(pio, dev->l2ad_vdev, dev->l2ad_hand, buf_sz, buf_data, ZIO_CHECKSUM_OFF, NULL, NULL, ZIO_PRIORITY_ASYNC_WRITE, @@ -6551,14 +6596,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de zio_t *, wzio); (void) zio_nowait(wzio); - stats_size += buf_sz; - - /* - * Keep the clock hand suitably device-aligned. - */ - buf_a_sz = vdev_psize_to_asize(dev->l2ad_vdev, buf_sz); - write_asize += buf_a_sz; - dev->l2ad_hand += buf_a_sz; + write_asize += buf_sz; + dev->l2ad_hand += buf_sz; } } @@ -6568,8 +6607,8 @@ l2arc_write_buffers(spa_t *spa, l2arc_de ARCSTAT_BUMP(arcstat_l2_writes_sent); ARCSTAT_INCR(arcstat_l2_write_bytes, write_asize); ARCSTAT_INCR(arcstat_l2_size, write_sz); - ARCSTAT_INCR(arcstat_l2_asize, stats_size); - vdev_space_update(dev->l2ad_vdev, stats_size, 0, 0); + ARCSTAT_INCR(arcstat_l2_asize, write_asize); + vdev_space_update(dev->l2ad_vdev, write_asize, 0, 0); /* * Bump device hand to the device start if it is approaching the end. @@ -6588,12 +6627,18 @@ l2arc_write_buffers(spa_t *spa, l2arc_de } /* - * Compresses an L2ARC buffer. + * Transforms, possibly compresses and pads, an L2ARC buffer. * The data to be compressed must be prefilled in l1hdr.b_tmp_cdata and its * size in l2hdr->b_asize. This routine tries to compress the data and * depending on the compression result there are three possible outcomes: - * *) The buffer was incompressible. The original l2hdr contents were left - * untouched and are ready for writing to an L2 device. + * *) The buffer was incompressible. The buffer size was already ashift aligned. + * The original hdr contents were left untouched except for b_tmp_cdata, + * which is reset to NULL. The caller must keep a pointer to the original + * data. + * *) The buffer was incompressible. The buffer size was not ashift aligned. + * b_tmp_cdata was replaced with a temporary data buffer which holds a padded + * (aligned) copy of the data. Once writing is done, invoke + * l2arc_release_cdata_buf on this hdr to free the temporary buffer. * *) The buffer was all-zeros, so there is no need to write it to an L2 * device. To indicate this situation b_tmp_cdata is NULL'ed, b_asize is * set to zero and b_compress is set to ZIO_COMPRESS_EMPTY. @@ -6607,10 +6652,11 @@ l2arc_write_buffers(spa_t *spa, l2arc_de * buffer was incompressible). */ static boolean_t -l2arc_compress_buf(arc_buf_hdr_t *hdr) +l2arc_transform_buf(arc_buf_hdr_t *hdr, boolean_t compress) { void *cdata; - size_t csize, len, rounded; + size_t align, asize, csize, len, rounded; + ASSERT(HDR_HAS_L2HDR(hdr)); l2arc_buf_hdr_t *l2hdr = &hdr->b_l2hdr; @@ -6619,14 +6665,19 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) ASSERT(hdr->b_l1hdr.b_tmp_cdata != NULL); len = l2hdr->b_asize; - cdata = zio_data_buf_alloc(len); + align = (size_t)1 << l2hdr->b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + cdata = zio_data_buf_alloc(asize); ASSERT3P(cdata, !=, NULL); - csize = zio_compress_data(ZIO_COMPRESS_LZ4, hdr->b_l1hdr.b_tmp_cdata, - cdata, l2hdr->b_asize); + if (compress) + csize = zio_compress_data(ZIO_COMPRESS_LZ4, + hdr->b_l1hdr.b_tmp_cdata, cdata, len); + else + csize = len; if (csize == 0) { /* zero block, indicate that there's nothing to write */ - zio_data_buf_free(cdata, len); + zio_data_buf_free(cdata, asize); l2hdr->b_compress = ZIO_COMPRESS_EMPTY; l2hdr->b_asize = 0; hdr->b_l1hdr.b_tmp_cdata = NULL; @@ -6634,8 +6685,8 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) return (B_TRUE); } - rounded = P2ROUNDUP(csize, - (size_t)1 << l2hdr->b_dev->l2ad_vdev->vdev_ashift); + rounded = P2ROUNDUP(csize, align); + ASSERT3U(rounded, <=, asize); if (rounded < len) { /* * Compression succeeded, we'll keep the cdata around for @@ -6652,11 +6703,32 @@ l2arc_compress_buf(arc_buf_hdr_t *hdr) return (B_TRUE); } else { /* - * Compression failed, release the compressed buffer. - * l2hdr will be left unmodified. + * Compression did not save space. */ - zio_data_buf_free(cdata, len); - ARCSTAT_BUMP(arcstat_l2_compress_failures); + if (P2PHASE(len, align) != 0) { + /* + * Use compression buffer for a copy of data padded to + * the proper size. Compression algorithm remains set + * to ZIO_COMPRESS_OFF. + */ + ASSERT3U(len, <, asize); + bcopy(hdr->b_l1hdr.b_tmp_cdata, cdata, len); + bzero((char *)cdata + len, asize - len); + l2hdr->b_asize = asize; + hdr->b_l1hdr.b_tmp_cdata = cdata; + ARCSTAT_BUMP(arcstat_l2_padding_needed); + } else { + ASSERT3U(len, ==, asize); + /* + * The original buffer is good as is, + * release the compressed buffer. + * l2hdr will be left unmodified except for b_tmp_cdata. + */ + zio_data_buf_free(cdata, asize); + hdr->b_l1hdr.b_tmp_cdata = NULL; + } + if (compress) + ARCSTAT_BUMP(arcstat_l2_compress_failures); return (B_FALSE); } } @@ -6725,44 +6797,30 @@ l2arc_decompress_zio(zio_t *zio, arc_buf /* * Releases the temporary b_tmp_cdata buffer in an l2arc header structure. - * This buffer serves as a temporary holder of compressed data while + * This buffer serves as a temporary holder of compressed or padded data while * the buffer entry is being written to an l2arc device. Once that is * done, we can dispose of it. */ static void l2arc_release_cdata_buf(arc_buf_hdr_t *hdr) { - ASSERT(HDR_HAS_L2HDR(hdr)); + size_t align, asize, len; enum zio_compress comp = hdr->b_l2hdr.b_compress; + ASSERT(HDR_HAS_L2HDR(hdr)); ASSERT(HDR_HAS_L1HDR(hdr)); ASSERT(comp == ZIO_COMPRESS_OFF || L2ARC_IS_VALID_COMPRESS(comp)); - if (comp == ZIO_COMPRESS_OFF) { - /* - * In this case, b_tmp_cdata points to the same buffer - * as the arc_buf_t's b_data field. We don't want to - * free it, since the arc_buf_t will handle that. - */ + if (hdr->b_l1hdr.b_tmp_cdata != NULL) { + ASSERT(comp != ZIO_COMPRESS_EMPTY); + len = hdr->b_size; + align = (size_t)1 << hdr->b_l2hdr.b_dev->l2ad_vdev->vdev_ashift; + asize = P2ROUNDUP(len, align); + zio_data_buf_free(hdr->b_l1hdr.b_tmp_cdata, asize); hdr->b_l1hdr.b_tmp_cdata = NULL; - } else if (comp == ZIO_COMPRESS_EMPTY) { - /* - * In this case, b_tmp_cdata was compressed to an empty - * buffer, thus there's nothing to free and b_tmp_cdata - * should have been set to NULL in l2arc_write_buffers(). - */ - ASSERT3P(hdr->b_l1hdr.b_tmp_cdata, ==, NULL); } else { - /* - * If the data was compressed, then we've allocated a - * temporary buffer for it, so now we need to release it. - */ - ASSERT(hdr->b_l1hdr.b_tmp_cdata != NULL); - zio_data_buf_free(hdr->b_l1hdr.b_tmp_cdata, - hdr->b_size); - hdr->b_l1hdr.b_tmp_cdata = NULL; + ASSERT(comp == ZIO_COMPRESS_OFF || comp == ZIO_COMPRESS_EMPTY); } - } /* Modified: projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c ============================================================================== --- projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Tue Apr 12 20:50:25 2016 (r297870) @@ -115,27 +115,14 @@ vdev_geom_attrchanged(struct g_consumer if (error == 0) { char *old_physpath; + /* g_topology lock ensures that vdev has not been closed */ + g_topology_assert(); old_physpath = vd->vdev_physpath; vd->vdev_physpath = spa_strdup(physpath); spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); - if (old_physpath != NULL) { - int held_lock; - - held_lock = spa_config_held(spa, SCL_STATE, RW_WRITER); - if (held_lock == 0) { - g_topology_unlock(); - spa_config_enter(spa, SCL_STATE, FTAG, - RW_WRITER); - } - + if (old_physpath != NULL) spa_strfree(old_physpath); - - if (held_lock == 0) { - spa_config_exit(spa, SCL_STATE, FTAG); - g_topology_lock(); - } - } } g_free(physpath); } Modified: projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c ============================================================================== --- projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c Tue Apr 12 20:50:25 2016 (r297870) @@ -2777,19 +2777,10 @@ zio_vdev_io_start(zio_t *zio) (void) atomic_cas_64(&spa->spa_last_io, old, new); } -#ifdef illumos align = 1ULL << vd->vdev_top->vdev_ashift; if (!(zio->io_flags & ZIO_FLAG_PHYSICAL) && P2PHASE(zio->io_size, align) != 0) { -#else - if (zio->io_flags & ZIO_FLAG_PHYSICAL) - align = 1ULL << vd->vdev_top->vdev_logical_ashift; - else - align = 1ULL << vd->vdev_top->vdev_ashift; - - if (P2PHASE(zio->io_size, align) != 0) { -#endif /* Transform logical writes to be a full physical block size. */ uint64_t asize = P2ROUNDUP(zio->io_size, align); char *abuf = NULL; @@ -2805,7 +2796,6 @@ zio_vdev_io_start(zio_t *zio) zio_subblock); } -#ifdef illumos /* * If this is not a physical io, make sure that it is properly aligned * before proceeding. @@ -2815,16 +2805,14 @@ zio_vdev_io_start(zio_t *zio) ASSERT0(P2PHASE(zio->io_size, align)); } else { /* - * For physical writes, we allow 512b aligned writes and assume - * the device will perform a read-modify-write as necessary. + * For the physical io we allow alignment + * to a logical block size. */ - ASSERT0(P2PHASE(zio->io_offset, SPA_MINBLOCKSIZE)); - ASSERT0(P2PHASE(zio->io_size, SPA_MINBLOCKSIZE)); + uint64_t log_align = + 1ULL << vd->vdev_top->vdev_logical_ashift; + ASSERT0(P2PHASE(zio->io_offset, log_align)); + ASSERT0(P2PHASE(zio->io_size, log_align)); } -#else - ASSERT0(P2PHASE(zio->io_offset, align)); - ASSERT0(P2PHASE(zio->io_size, align)); -#endif VERIFY(zio->io_type == ZIO_TYPE_READ || spa_writeable(spa)); Modified: projects/pnfs-server/sys/dev/cxgbe/common/t4_regs.h ============================================================================== --- projects/pnfs-server/sys/dev/cxgbe/common/t4_regs.h Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/dev/cxgbe/common/t4_regs.h Tue Apr 12 20:50:25 2016 (r297870) @@ -47301,9 +47301,9 @@ #define A_MAC_PORT_PTP_OFFSET_ADJUST_FINE 0x9a4 #define S_B 16 -#define M_B 0xffffU +#define CXGBE_M_B 0xffffU #define V_B(x) ((x) << S_B) -#define G_B(x) (((x) >> S_B) & M_B) +#define G_B(x) (((x) >> S_B) & CXGBE_M_B) #define S_A 0 #define M_A 0xffffU Modified: projects/pnfs-server/sys/dev/hyperv/vmbus/hv_hv.c ============================================================================== --- projects/pnfs-server/sys/dev/hyperv/vmbus/hv_hv.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/dev/hyperv/vmbus/hv_hv.c Tue Apr 12 20:50:25 2016 (r297870) @@ -127,7 +127,7 @@ int hv_vmbus_init(void) { hv_vmbus_x64_msr_hypercall_contents hypercall_msr; - void* virt_addr = 0; + void* virt_addr = NULL; memset( hv_vmbus_g_context.syn_ic_event_page, Modified: projects/pnfs-server/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c ============================================================================== --- projects/pnfs-server/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c Tue Apr 12 20:50:25 2016 (r297870) @@ -581,7 +581,7 @@ vmbus_bus_exit(void) smp_rendezvous(NULL, hv_vmbus_synic_cleanup, NULL, NULL); for(i = 0; i < 2 * MAXCPU; i++) { - if (setup_args.page_buffers[i] != 0) + if (setup_args.page_buffers[i] != NULL) free(setup_args.page_buffers[i], M_DEVBUF); } Modified: projects/pnfs-server/sys/dev/isp/isp.c ============================================================================== --- projects/pnfs-server/sys/dev/isp/isp.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/dev/isp/isp.c Tue Apr 12 20:50:25 2016 (r297870) @@ -2776,7 +2776,6 @@ isp_port_logout(ispsoftc_t *isp, uint16_ static int isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb) { - fcparam *fcp = FCPARAM(isp, chan); mbreg_t mbs; union { isp_pdb_21xx_t fred; @@ -2794,22 +2793,19 @@ isp_getpdb(ispsoftc_t *isp, int chan, ui } else { mbs.param[1] = id << 8; } - mbs.param[2] = DMA_WD1(fcp->isp_scdma); - mbs.param[3] = DMA_WD0(fcp->isp_scdma); - mbs.param[6] = DMA_WD3(fcp->isp_scdma); - mbs.param[7] = DMA_WD2(fcp->isp_scdma); - if (FC_SCRATCH_ACQUIRE(isp, chan)) { - isp_prt(isp, ISP_LOGERR, sacq); - return (-1); - } - MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (un), chan); + mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); + mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); + mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); + mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); + MEMORYBARRIER(isp, SYNC_IFORDEV, 0, sizeof(un), chan); + isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - FC_SCRATCH_RELEASE(isp, chan); + if (mbs.param[0] != MBOX_COMMAND_COMPLETE) return (mbs.param[0] | (mbs.param[1] << 16)); - } + + MEMORYBARRIER(isp, SYNC_IFORCPU, 0, sizeof(un), chan); if (IS_24XX(isp)) { - isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill); + isp_get_pdb_24xx(isp, isp->isp_iocb, &un.bill); pdb->handle = un.bill.pdb_handle; pdb->prli_word3 = un.bill.pdb_prli_svc3; pdb->portid = BITS2WORD_24XX(un.bill.pdb_portid_bits); @@ -2821,11 +2817,10 @@ isp_getpdb(ispsoftc_t *isp, int chan, ui un.bill.pdb_curstate); if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) { mbs.param[0] = MBOX_NOT_LOGGED_IN; - FC_SCRATCH_RELEASE(isp, chan); return (mbs.param[0]); } } else { - isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred); + isp_get_pdb_21xx(isp, isp->isp_iocb, &un.fred); pdb->handle = un.fred.pdb_loopid; pdb->prli_word3 = un.fred.pdb_prli_svc3; pdb->portid = BITS2WORD(un.fred.pdb_portid_bits); @@ -2834,7 +2829,6 @@ isp_getpdb(ispsoftc_t *isp, int chan, ui isp_prt(isp, ISP_LOGDEBUG1, "Chan %d handle 0x%x Port 0x%06x", chan, id, pdb->portid); } - FC_SCRATCH_RELEASE(isp, chan); return (0); } @@ -2875,6 +2869,7 @@ isp_gethandles(ispsoftc_t *isp, int chan FC_SCRATCH_RELEASE(isp, chan); return (mbs.param[0] | (mbs.param[1] << 16)); } + MEMORYBARRIER(isp, SYNC_SFORCPU, 0, ISP_FC_SCRLEN, chan); elp1 = fcp->isp_scratch; elp3 = fcp->isp_scratch; elp4 = fcp->isp_scratch; @@ -3083,20 +3078,31 @@ isp_fclink_test(ispsoftc_t *isp, int cha fcp->isp_fabric_params = mbs.param[7]; fcp->isp_sns_hdl = NPH_SNS_ID; r = isp_register_fc4_type_24xx(isp, chan); - if (r == 0) - isp_register_fc4_features_24xx(isp, chan); - isp_register_port_name_24xx(isp, chan); + if (fcp->isp_loopstate < LOOP_TESTING_LINK) + goto abort; + if (r != 0) + goto not_on_fabric; + r = isp_register_fc4_features_24xx(isp, chan); + if (fcp->isp_loopstate < LOOP_TESTING_LINK) + goto abort; + if (r != 0) + goto not_on_fabric; + r = isp_register_port_name_24xx(isp, chan); + if (fcp->isp_loopstate < LOOP_TESTING_LINK) + goto abort; + if (r != 0) + goto not_on_fabric; isp_register_node_name_24xx(isp, chan); + if (fcp->isp_loopstate < LOOP_TESTING_LINK) + goto abort; } else { fcp->isp_sns_hdl = SNS_ID; r = isp_register_fc4_type(isp, chan); - if (r == 0 && fcp->role == ISP_ROLE_TARGET) + if (r != 0) + goto not_on_fabric; + if (fcp->role == ISP_ROLE_TARGET) isp_send_change_request(isp, chan); } - if (r) { - isp_prt(isp, ISP_LOGWARN|ISP_LOG_SANCFG, "%s: register fc4 type failed", __func__); - return (-1); - } } not_on_fabric: @@ -3510,65 +3516,66 @@ isp_gid_ft_sns(ispsoftc_t *isp, int chan static int isp_ct_passthru(ispsoftc_t *isp, int chan, uint32_t cmd_bcnt, uint32_t rsp_bcnt) { - mbreg_t mbs; fcparam *fcp = FCPARAM(isp, chan); - union { - isp_ct_pt_t plocal; - uint8_t q[QENTRY_LEN]; - } un; - isp_ct_pt_t *pt; - uint8_t *scp = fcp->isp_scratch; + isp_ct_pt_t pt; + void *reqp; + uint8_t resp[QENTRY_LEN]; /* * Build a Passthrough IOCB in memory. */ - pt = &un.plocal; - ISP_MEMZERO(un.q, QENTRY_LEN); - pt->ctp_header.rqs_entry_count = 1; - pt->ctp_header.rqs_entry_type = RQSTYPE_CT_PASSTHRU; - pt->ctp_handle = 0xffffffff; - pt->ctp_nphdl = fcp->isp_sns_hdl; - pt->ctp_cmd_cnt = 1; - pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); - pt->ctp_time = 10; - pt->ctp_rsp_cnt = 1; - pt->ctp_rsp_bcnt = rsp_bcnt; - pt->ctp_cmd_bcnt = cmd_bcnt; - pt->ctp_dataseg[0].ds_base = DMA_LO32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_basehi = DMA_HI32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_count = cmd_bcnt; - pt->ctp_dataseg[1].ds_base = DMA_LO32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_basehi = DMA_HI32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_count = rsp_bcnt; - isp_put_ct_pt(isp, pt, (isp_ct_pt_t *)&scp[CTXOFF]); - if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_bytes(isp, "CT IOCB request", QENTRY_LEN, &scp[CTXOFF]); + ISP_MEMZERO(&pt, sizeof(pt)); + pt.ctp_header.rqs_entry_count = 1; + pt.ctp_header.rqs_entry_type = RQSTYPE_CT_PASSTHRU; + pt.ctp_nphdl = fcp->isp_sns_hdl; + pt.ctp_cmd_cnt = 1; + pt.ctp_vpidx = ISP_GET_VPIDX(isp, chan); + pt.ctp_time = 10; + pt.ctp_rsp_cnt = 1; + pt.ctp_rsp_bcnt = rsp_bcnt; + pt.ctp_cmd_bcnt = cmd_bcnt; + pt.ctp_dataseg[0].ds_base = DMA_LO32(fcp->isp_scdma+XTXOFF); + pt.ctp_dataseg[0].ds_basehi = DMA_HI32(fcp->isp_scdma+XTXOFF); + pt.ctp_dataseg[0].ds_count = cmd_bcnt; + pt.ctp_dataseg[1].ds_base = DMA_LO32(fcp->isp_scdma); + pt.ctp_dataseg[1].ds_basehi = DMA_HI32(fcp->isp_scdma); + pt.ctp_dataseg[1].ds_count = rsp_bcnt; + + /* Prepare space for response in memory */ + memset(resp, 0xff, sizeof(resp)); + pt.ctp_handle = isp_allocate_handle(isp, resp, ISP_HANDLE_CTRL); + if (pt.ctp_handle == 0) { + isp_prt(isp, ISP_LOGERR, + "%s: CTP of Chan %d out of handles", __func__, chan); + return (-1); + } - /* - * Execute the Passthrough IOCB. - */ - ISP_MEMZERO(&scp[ZTXOFF], QENTRY_LEN); - MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, - MBCMD_DEFAULT_TIMEOUT + pt->ctp_time * 1000000); - mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma + CTXOFF); - mbs.param[3] = DMA_WD0(fcp->isp_scdma + CTXOFF); - mbs.param[6] = DMA_WD3(fcp->isp_scdma + CTXOFF); - mbs.param[7] = DMA_WD2(fcp->isp_scdma + CTXOFF); - MEMORYBARRIER(isp, SYNC_SFORDEV, XTXOFF, 2 * QENTRY_LEN, chan); - isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { + /* Send request and wait for response. */ + reqp = isp_getrqentry(isp); + if (reqp == NULL) { + isp_prt(isp, ISP_LOGERR, + "%s: CTP of Chan %d out of rqent", __func__, chan); + isp_destroy_handle(isp, pt.ctp_handle); + return (-1); + } + isp_put_ct_pt(isp, &pt, (isp_ct_pt_t *)reqp); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT IOCB request", QENTRY_LEN, reqp); + ISP_SYNC_REQUEST(isp); + if (msleep(resp, &isp->isp_lock, 0, "CTP", pt.ctp_time*hz) == EWOULDBLOCK) { + isp_prt(isp, ISP_LOGERR, + "%s: CTP of Chan %d timed out", __func__, chan); + isp_destroy_handle(isp, pt.ctp_handle); return (-1); } - MEMORYBARRIER(isp, SYNC_SFORCPU, 0, ISP_FC_SCRLEN, chan); if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_bytes(isp, "CT IOCB response", QENTRY_LEN, &scp[ZTXOFF]); - pt = &un.plocal; - isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); - if (pt->ctp_status && pt->ctp_status != RQCS_DATA_UNDERRUN) { + isp_print_bytes(isp, "CT IOCB response", QENTRY_LEN, resp); + + isp_get_ct_pt(isp, (isp_ct_pt_t *)resp, &pt); + if (pt.ctp_status && pt.ctp_status != RQCS_DATA_UNDERRUN) { isp_prt(isp, ISP_LOGWARN, "Chan %d GID_FT CT Passthrough returned 0x%x", - chan, pt->ctp_status); + chan, pt.ctp_status); return (-1); } @@ -3936,7 +3943,13 @@ isp_send_change_request(ispsoftc_t *isp, mbs.param[1] = 0x03; mbs.param[9] = chan; isp_mboxcmd(isp, &mbs); - return (mbs.param[0] == MBOX_COMMAND_COMPLETE ? 0 : -1); + if (mbs.param[0] == MBOX_COMMAND_COMPLETE) { + return (0); + } else { + isp_prt(isp, ISP_LOGWARN, "Chan %d Send Change Request: 0x%x", + chan, mbs.param[0]); + return (-1); + } } static int @@ -3975,6 +3988,8 @@ isp_register_fc4_type(ispsoftc_t *isp, i if (mbs.param[0] == MBOX_COMMAND_COMPLETE) { return (0); } else { + isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", + chan, mbs.param[0]); return (-1); } } @@ -4665,31 +4680,25 @@ isp_control(ispsoftc_t *isp, ispctl_t ct tmf->tmf_tidlo = lp->portid; tmf->tmf_tidhi = lp->portid >> 16; tmf->tmf_vpidx = ISP_GET_VPIDX(isp, chan); + isp_put_24xx_tmf(isp, tmf, isp->isp_iocb); + MEMORYBARRIER(isp, SYNC_IFORDEV, 0, QENTRY_LEN, chan); + fcp->sendmarker = 1; + isp_prt(isp, ISP_LOGALL, "Chan %d Reset N-Port Handle 0x%04x @ Port 0x%06x", chan, lp->handle, lp->portid); MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, MBCMD_DEFAULT_TIMEOUT + tmf->tmf_timeout * 1000000); mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma); - mbs.param[3] = DMA_WD0(fcp->isp_scdma); - mbs.param[6] = DMA_WD3(fcp->isp_scdma); - mbs.param[7] = DMA_WD2(fcp->isp_scdma); - - if (FC_SCRATCH_ACQUIRE(isp, chan)) { - isp_prt(isp, ISP_LOGERR, sacq); - break; - } - isp_put_24xx_tmf(isp, tmf, fcp->isp_scratch); - MEMORYBARRIER(isp, SYNC_SFORDEV, 0, QENTRY_LEN, chan); - fcp->sendmarker = 1; + mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); + mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); + mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); + mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - FC_SCRATCH_RELEASE(isp, chan); + if (mbs.param[0] != MBOX_COMMAND_COMPLETE) break; - } - MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan); + + MEMORYBARRIER(isp, SYNC_IFORCPU, QENTRY_LEN, QENTRY_LEN, chan); sp = (isp24xx_statusreq_t *) local; - isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp); - FC_SCRATCH_RELEASE(isp, chan); + isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)isp->isp_iocb)[1], sp); if (sp->req_completion_status == 0) { return (0); } @@ -4729,7 +4738,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ct break; } if (IS_24XX(isp)) { - isp24xx_abrt_t local, *ab = &local, *ab2; + isp24xx_abrt_t local, *ab = &local; fcparam *fcp; fcportdb_t *lp; @@ -4753,31 +4762,23 @@ isp_control(ispsoftc_t *isp, ispctl_t ct ab->abrt_tidlo = lp->portid; ab->abrt_tidhi = lp->portid >> 16; ab->abrt_vpidx = ISP_GET_VPIDX(isp, chan); + isp_put_24xx_abrt(isp, ab, isp->isp_iocb); + MEMORYBARRIER(isp, SYNC_IFORDEV, 0, 2 * QENTRY_LEN, chan); ISP_MEMZERO(&mbs, sizeof (mbs)); MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 5000000); mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma); - mbs.param[3] = DMA_WD0(fcp->isp_scdma); - mbs.param[6] = DMA_WD3(fcp->isp_scdma); - mbs.param[7] = DMA_WD2(fcp->isp_scdma); + mbs.param[2] = DMA_WD1(isp->isp_iocb_dma); + mbs.param[3] = DMA_WD0(isp->isp_iocb_dma); + mbs.param[6] = DMA_WD3(isp->isp_iocb_dma); + mbs.param[7] = DMA_WD2(isp->isp_iocb_dma); - if (FC_SCRATCH_ACQUIRE(isp, chan)) { - isp_prt(isp, ISP_LOGERR, sacq); - break; - } - isp_put_24xx_abrt(isp, ab, fcp->isp_scratch); - ab2 = (isp24xx_abrt_t *) &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN]; - ab2->abrt_nphdl = 0xdeaf; - MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan); isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - FC_SCRATCH_RELEASE(isp, chan); + if (mbs.param[0] != MBOX_COMMAND_COMPLETE) break; - } - MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan); - isp_get_24xx_abrt(isp, ab2, ab); - FC_SCRATCH_RELEASE(isp, chan); + + MEMORYBARRIER(isp, SYNC_IFORCPU, QENTRY_LEN, QENTRY_LEN, chan); + isp_get_24xx_abrt(isp, &((isp24xx_abrt_t *)isp->isp_iocb)[1], ab); if (ab->abrt_nphdl == ISP24XX_ABRT_OKAY) { return (0); } @@ -6159,6 +6160,7 @@ isp_handle_other_response(ispsoftc_t *is } } return (1); + case RQSTYPE_CT_PASSTHRU: case RQSTYPE_VP_MODIFY: case RQSTYPE_VP_CTRL: case RQSTYPE_LOGIN: Modified: projects/pnfs-server/sys/dev/isp/isp_freebsd.c ============================================================================== --- projects/pnfs-server/sys/dev/isp/isp_freebsd.c Tue Apr 12 20:23:09 2016 (r297869) +++ projects/pnfs-server/sys/dev/isp/isp_freebsd.c Tue Apr 12 20:50:25 2016 (r297870) @@ -607,9 +607,10 @@ ispioctl(struct cdev *dev, u_long c, cad nphdl = fct->loopid; ISP_LOCK(isp); if (IS_24XX(isp)) { - uint8_t local[QENTRY_LEN]; - isp24xx_tmf_t *tmf; - isp24xx_statusreq_t *sp; + void *reqp; + uint8_t resp[QENTRY_LEN]; + isp24xx_tmf_t tmf; + isp24xx_statusreq_t sp; fcparam *fcp = FCPARAM(isp, chan); fcportdb_t *lp; int i; @@ -625,39 +626,37 @@ ispioctl(struct cdev *dev, u_long c, cad ISP_UNLOCK(isp); break; } - /* XXX VALIDATE LP XXX */ - tmf = (isp24xx_tmf_t *) local; - ISP_MEMZERO(tmf, QENTRY_LEN); - tmf->tmf_header.rqs_entry_type = RQSTYPE_TSK_MGMT; - tmf->tmf_header.rqs_entry_count = 1; - tmf->tmf_nphdl = lp->handle; - tmf->tmf_delay = 2; - tmf->tmf_timeout = 4; - tmf->tmf_tidlo = lp->portid; - tmf->tmf_tidhi = lp->portid >> 16; - tmf->tmf_vpidx = ISP_GET_VPIDX(isp, chan); - tmf->tmf_lun[1] = fct->lun & 0xff; + ISP_MEMZERO(&tmf, sizeof(tmf)); + tmf.tmf_header.rqs_entry_type = RQSTYPE_TSK_MGMT; + tmf.tmf_header.rqs_entry_count = 1; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 12 21:04:11 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E5FCBB0E66D for ; Tue, 12 Apr 2016 21:04:11 +0000 (UTC) (envelope-from asomers@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 mx1.freebsd.org (Postfix) with ESMTPS id B7FFB1391; Tue, 12 Apr 2016 21:04:11 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CL4ACQ043802; Tue, 12 Apr 2016 21:04:10 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CL4AFn043801; Tue, 12 Apr 2016 21:04:10 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201604122104.u3CL4AFn043801@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 12 Apr 2016 21:04:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297874 - projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 21:04:12 -0000 Author: asomers Date: Tue Apr 12 21:04:10 2016 New Revision: 297874 URL: https://svnweb.freebsd.org/changeset/base/297874 Log: Remove failure expectation from hotspare_add_004_neg This test never actually failed on FreeBSD. Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_test.sh Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_test.sh Tue Apr 12 21:00:38 2016 (r297873) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_test.sh Tue Apr 12 21:04:10 2016 (r297874) @@ -119,7 +119,6 @@ hotspare_add_004_neg_head() } hotspare_add_004_neg_body() { - atf_expect_fail "TeamTrack: BUG25169 ZFS allows pools on active swap devices " export TESTCASE_ID=$(echo $(atf_get ident) | cksum -o 2 | cut -f 1 -d " ") . $(atf_get_srcdir)/../../include/default.cfg . $(atf_get_srcdir)/hotspare.kshlib From owner-svn-src-projects@freebsd.org Tue Apr 12 21:21:07 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A7285B0EBB7 for ; Tue, 12 Apr 2016 21:21:07 +0000 (UTC) (envelope-from asomers@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 mx1.freebsd.org (Postfix) with ESMTPS id 5EE5C1FD8; Tue, 12 Apr 2016 21:21:07 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CLL6VT047271; Tue, 12 Apr 2016 21:21:06 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CLL69A047270; Tue, 12 Apr 2016 21:21:06 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201604122121.u3CLL69A047270@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 12 Apr 2016 21:21:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297876 - projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_destroy X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 21:21:07 -0000 Author: asomers Date: Tue Apr 12 21:21:06 2016 New Revision: 297876 URL: https://svnweb.freebsd.org/changeset/base/297876 Log: Fix the zpool_destroy_004_pos.ksh test tests/sys/cddl/zfs/tests/cli_root/zpool_destroy/zpool_destroy_004_pos.ksh * Fix a typo that prevented "zfs send" from running. This typo was present in the first revision of the file. * Reduce by a factor of about 2 the amount of data used in this test. It was excessive and let to long runtimes. Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_destroy/zpool_destroy_004_pos.ksh Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_destroy/zpool_destroy_004_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_destroy/zpool_destroy_004_pos.ksh Tue Apr 12 21:17:19 2016 (r297875) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_destroy/zpool_destroy_004_pos.ksh Tue Apr 12 21:21:06 2016 (r297876) @@ -62,7 +62,7 @@ function send_recv_destroy recv=$2 to_destroy=$3 - ( $ZFS send -RP $TESTPOOL/$TESTFS@s0 | $ZFS receive -Fu $recv/d1 ) & + ( $ZFS send -RP $TESTPOOL/$TESTFS@snap1 | $ZFS receive -Fu $recv/d1 ) & sendrecvpid=$! log_must sleep $sleeptime @@ -108,10 +108,11 @@ for sleeptime in 0.1 0.3 0.5 0.75 1 2 3; done # A longer test that simulates a more realistic send|receive that exceeds -# the size of physical memory by 1/3 and gets interrupted a decent amount of +# the size of arc memory by 1/3 and gets interrupted a decent amount of # time after the start of the run. -physmem=$(sysctl -n hw.physmem) -datasz=$(expr ${physmem} / 1048576 \* 4 / 3) +arcmem=$(sysctl -n vfs.zfs.arc_max) +# ARC will use 2xdatasz memory since it caches both the src and dst copies +datasz=$(expr ${arcmem} / 1048576 \* 2 / 3) log_note "Running longer test with ${datasz}MB of data" sleeptime=15 run_tests From owner-svn-src-projects@freebsd.org Tue Apr 12 21:29:10 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1393CB0EE01 for ; Tue, 12 Apr 2016 21:29:10 +0000 (UTC) (envelope-from asomers@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 mx1.freebsd.org (Postfix) with ESMTPS id AE59F15B6; Tue, 12 Apr 2016 21:29:09 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CLT9a6050325; Tue, 12 Apr 2016 21:29:09 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CLT6Ke050302; Tue, 12 Apr 2016 21:29:06 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201604122129.u3CLT6Ke050302@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 12 Apr 2016 21:29:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297878 - in projects/zfsd/head/tests/sys/cddl/zfs/tests: atime bootfs cache cachefile clean_mirror/assertion_001 clean_mirror/assertion_002 clean_mirror/assertion_003 clean_mirror/asse... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 21:29:10 -0000 Author: asomers Date: Tue Apr 12 21:29:06 2016 New Revision: 297878 URL: https://svnweb.freebsd.org/changeset/base/297878 Log: Eliminiate run length atf config variables from the ZFS test suite tests/sys/cddl/zfs/tests/.../*_test.sh Remove 'atf_set "require.config" rt_(short|medium|long)' statements. They were intended to provide a quicker version of the ZFS test suite with reduced coverage. But they never worked very well, and Kyua 0.12 chokes on many of them (it doesn't allow multiple require.config lines for a single test case) Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/atime/atime_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/bootfs/bootfs_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_001/assertion_001_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_002/assertion_002_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_003/assertion_003_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_004/assertion_004_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_create/zpool_create_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_import/zpool_import_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/compression/compression_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/ctime/ctime_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/delegate/zfs_allow/zfs_allow_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/devices/devices_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/exec/exec_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_pool/grow_pool_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_replicas/grow_replicas_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/history/history_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/hotplug/hotplug_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/inheritance/inheritance_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/inuse/inuse_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/iscsi/iscsi_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/large_files/large_files_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/link_count/link_count_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/mdb/mdb_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/migration/migration_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/mmap/mmap_read/mmap_read_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/mmap/mmap_write/mmap_write_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/mount/mount_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/mv_files/mv_files_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/nestedfs/nestedfs_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/no_space/no_space_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/online_offline/online_offline_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/pool_names/pool_names_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/poolversion/poolversion_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/privilege/privilege_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/quota/quota_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/redundancy/redundancy_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/refquota/refquota_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/replacement/replacement_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/reservation/reservation_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/sas_phy_thrash/sas_phy_thrash_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/scrub_mirror/scrub_mirror_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/slog/slog_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/snapshot/snapshot_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/snapused/snapused_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/sparse/sparse_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/threadsappend/threadsappend_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/truncate/truncate_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/txg_integrity/txg_integrity_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/utils_test/utils_test_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/write_dirs/write_dirs_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zil/zil_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zinject/zinject_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zones/zones_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol/zvol_cli/zvol_cli_test.sh projects/zfsd/head/tests/sys/cddl/zfs/tests/zvol_thrash/zvol_thrash_test.sh Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/atime/atime_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/atime/atime_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/atime/atime_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case atime_001_pos cleanup atime_001_pos_head() { atf_set "descr" "Setting atime=on, the access time for files is updated when read." - atf_set "require.config" rt_short atf_set "require.progs" zfs } atime_001_pos_body() @@ -56,7 +55,6 @@ atf_test_case atime_002_neg cleanup atime_002_neg_head() { atf_set "descr" "Setting atime=off, the access time for files will not be updatedwhen read." - atf_set "require.config" rt_short atf_set "require.progs" zfs } atime_002_neg_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/bootfs/bootfs_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/bootfs/bootfs_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/bootfs/bootfs_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case bootfs_001_pos bootfs_001_pos_head() { atf_set "descr" "Valid datasets are accepted as bootfs property values" - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool zfs } bootfs_001_pos_body() @@ -45,7 +44,6 @@ atf_test_case bootfs_002_neg bootfs_002_neg_head() { atf_set "descr" "Invalid datasets are rejected as boot property values" - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool } bootfs_002_neg_body() @@ -62,7 +60,6 @@ atf_test_case bootfs_003_pos bootfs_003_pos_head() { atf_set "descr" "Valid pool names are accepted by zpool set bootfs" - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool zfs } bootfs_003_pos_body() @@ -79,7 +76,6 @@ atf_test_case bootfs_004_neg bootfs_004_neg_head() { atf_set "descr" "Invalid pool names are rejected by zpool set bootfs" - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool zfs } bootfs_004_neg_body() @@ -96,7 +92,6 @@ atf_test_case bootfs_005_neg bootfs_005_neg_head() { atf_set "descr" "Boot properties cannot be set on pools with older versions" - atf_set "require.config" rt_medium atf_set "require.progs" zfs zpool } bootfs_005_neg_body() @@ -113,7 +108,6 @@ atf_test_case bootfs_006_pos bootfs_006_pos_head() { atf_set "descr" "Pools of correct vdev types accept boot property" - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool mkfile } bootfs_006_pos_body() @@ -130,7 +124,6 @@ atf_test_case bootfs_007_pos bootfs_007_pos_head() { atf_set "descr" "setting bootfs on a pool which was configured with the whole disk will succeed" - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool } bootfs_007_pos_body() @@ -147,7 +140,6 @@ atf_test_case bootfs_008_neg bootfs_008_neg_head() { atf_set "descr" "setting bootfs on a dataset which has gzip compression enabled will fail" - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool zfs } bootfs_008_neg_body() @@ -164,7 +156,7 @@ atf_test_case bootfs_009_neg bootfs_009_neg_head() { atf_set "descr" "Valid encrypted datasets can't be set bootfs property values" - atf_set "require.config" rt_short zfs_encryption + atf_set "require.config" zfs_encryption atf_set "require.progs" zfs zpool } bootfs_009_neg_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case cache_001_pos cleanup cache_001_pos_head() { atf_set "descr" "Creating a pool with a cache device succeeds." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -57,7 +56,6 @@ atf_test_case cache_002_pos cleanup cache_002_pos_head() { atf_set "descr" "Adding a cache device to normal pool works." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -86,7 +84,6 @@ atf_test_case cache_003_pos cleanup cache_003_pos_head() { atf_set "descr" "Adding an extra cache device works." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -115,7 +112,6 @@ atf_test_case cache_004_neg cleanup cache_004_neg_head() { atf_set "descr" "Attaching a cache device fails." - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -144,7 +140,6 @@ atf_test_case cache_005_neg cleanup cache_005_neg_head() { atf_set "descr" "Replacing a cache device fails." - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -173,7 +168,6 @@ atf_test_case cache_006_pos cleanup cache_006_pos_head() { atf_set "descr" "Exporting and importing pool with cache devices passes." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -202,7 +196,6 @@ atf_test_case cache_007_neg cleanup cache_007_neg_head() { atf_set "descr" "A mirror/raidz/raidz2 cache is not supported." - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -231,7 +224,6 @@ atf_test_case cache_008_neg cleanup cache_008_neg_head() { atf_set "descr" "A raidz/raidz2 cache can not be added to existed pool." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -260,7 +252,6 @@ atf_test_case cache_009_pos cleanup cache_009_pos_head() { atf_set "descr" "Offline and online a cache device succeed." - atf_set "require.config" rt_short atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } @@ -289,7 +280,6 @@ atf_test_case cache_010_neg cleanup cache_010_neg_head() { atf_set "descr" "Cache device can only be disk or slice." - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool mkfile atf_set "timeout" 1200 } @@ -318,7 +308,6 @@ atf_test_case cache_011_pos cleanup cache_011_pos_head() { atf_set "descr" "Remove cache device from pool with spare device should succeed" - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool atf_set "timeout" 1200 } Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case cachefile_001_pos cachefile_001_pos_head() { atf_set "descr" "Creating a pool with \cachefile\ set doesn't update zpool.cache" - atf_set "require.config" rt_medium atf_set "require.progs" zpool } cachefile_001_pos_body() @@ -46,7 +45,6 @@ atf_test_case cachefile_002_pos cachefile_002_pos_head() { atf_set "descr" "Importing a pool with \cachefile\ set doesn't update zpool.cache" - atf_set "require.config" rt_medium atf_set "require.progs" zpool } cachefile_002_pos_body() @@ -64,7 +62,6 @@ atf_test_case cachefile_003_pos cachefile_003_pos_head() { atf_set "descr" "Setting altroot=path and cachefile=$CPATH for zpool create succeed." - atf_set "require.config" rt_medium atf_set "require.progs" zpool } cachefile_003_pos_body() @@ -82,7 +79,6 @@ atf_test_case cachefile_004_pos cachefile_004_pos_head() { atf_set "descr" "Verify set, export and destroy when cachefile is set on pool." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool } cachefile_004_pos_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_001/assertion_001_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_001/assertion_001_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_001/assertion_001_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case clean_mirror_001_pos clean clean_mirror_001_pos_head() { atf_set "descr" "The primary side of a zpool mirror may be completely wipedwithout affecting the content of the pool" - atf_set "require.config" rt_medium } clean_mirror_001_pos_body() { Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_002/assertion_002_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_002/assertion_002_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_002/assertion_002_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case clean_mirror_002_pos clean clean_mirror_002_pos_head() { atf_set "descr" "The primary side of a zpool mirror may be completely wipedwithout affecting the content of the pool" - atf_set "require.config" rt_medium } clean_mirror_002_pos_body() { Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_003/assertion_003_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_003/assertion_003_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_003/assertion_003_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case clean_mirror_003_pos clean clean_mirror_003_pos_head() { atf_set "descr" "The primary side of a zpool mirror may be completely mangledwithout affecting the content of the pool" - atf_set "require.config" rt_medium } clean_mirror_003_pos_body() { Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_004/assertion_004_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_004/assertion_004_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/clean_mirror/assertion_004/assertion_004_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case clean_mirror_004_pos clean clean_mirror_004_pos_head() { atf_set "descr" "The primary side of a zpool mirror may be completely mangledwithout affecting the content of the pool" - atf_set "require.config" rt_medium } clean_mirror_004_pos_body() { Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_add/zpool_add_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,7 @@ atf_test_case zpool_add_001_pos cleanup zpool_add_001_pos_head() { atf_set "descr" "'zpool add ...' can add devices to the pool." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -57,7 +57,7 @@ atf_test_case zpool_add_002_pos cleanup zpool_add_002_pos_head() { atf_set "descr" "'zpool add -f ...' can successfully adddevices to the pool in some cases." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -86,7 +86,7 @@ atf_test_case zpool_add_003_pos cleanup zpool_add_003_pos_head() { atf_set "descr" "'zpool add -n ...' can display the configurationwithout actually adding devices to the pool." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -115,7 +115,7 @@ atf_test_case zpool_add_004_pos cleanup zpool_add_004_pos_head() { atf_set "descr" "'zpool add ...' can add zfs volume to the pool." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool atf_set "timeout" 2400 } @@ -145,7 +145,7 @@ atf_test_case zpool_add_005_pos cleanup zpool_add_005_pos_head() { atf_set "descr" "'zpool add' should fail with inapplicable scenarios." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" dumpadm zpool atf_set "timeout" 2400 } @@ -174,7 +174,7 @@ atf_test_case zpool_add_006_pos cleanup zpool_add_006_pos_head() { atf_set "descr" "'zpool add [-f]' can add large numbers of vdevs to the specified pool without any errors." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs mkfile zpool atf_set "timeout" 2400 } @@ -203,7 +203,7 @@ atf_test_case zpool_add_007_neg cleanup zpool_add_007_neg_head() { atf_set "descr" "'zpool add' should return an error with badly-formed parameters." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -232,7 +232,7 @@ atf_test_case zpool_add_008_neg cleanup zpool_add_008_neg_head() { atf_set "descr" "'zpool add' should return an error with nonexistent pools and vdevs" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -261,7 +261,7 @@ atf_test_case zpool_add_009_neg cleanup zpool_add_009_neg_head() { atf_set "descr" "'zpool add' should fail if vdevs are the same or vdev iscontained in the given pool." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_create/zpool_create_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_create/zpool_create_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_create/zpool_create_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,7 @@ atf_test_case zpool_create_001_pos clean zpool_create_001_pos_head() { atf_set "descr" "'zpool create ...' can successfully createa new pool with a name in ZFS namespace." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" mkfile zpool atf_set "timeout" 2400 } @@ -57,7 +57,7 @@ atf_test_case zpool_create_002_pos clean zpool_create_002_pos_head() { atf_set "descr" "'zpool create -f ...' can successfully createa new pool in some cases." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" mkfile zpool atf_set "timeout" 2400 } @@ -86,7 +86,7 @@ atf_test_case zpool_create_003_pos clean zpool_create_003_pos_head() { atf_set "descr" "'zpool create -n ...' can display the configureationwithout actually creating the pool." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -115,7 +115,7 @@ atf_test_case zpool_create_004_pos clean zpool_create_004_pos_head() { atf_set "descr" "'zpool create [-f]' can create a storage pool with large numbers of vdevswithout any errors." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs mkfile zpool atf_set "timeout" 2400 } @@ -144,7 +144,7 @@ atf_test_case zpool_create_005_pos clean zpool_create_005_pos_head() { atf_set "descr" "'zpool create [-R root][-m mountpoint] ...' can createan alternate pool or a new pool mounted at the specified mountpoint." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" mkfile zpool zfs atf_set "timeout" 2400 } @@ -173,7 +173,7 @@ atf_test_case zpool_create_006_pos clean zpool_create_006_pos_head() { atf_set "descr" "Verify 'zpool create' succeed with keywords combination." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" mkfile zpool atf_set "timeout" 2400 } @@ -202,7 +202,7 @@ atf_test_case zpool_create_007_neg clean zpool_create_007_neg_head() { atf_set "descr" "'zpool create' should return an error with badly-formed parameters." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -231,7 +231,7 @@ atf_test_case zpool_create_008_pos clean zpool_create_008_pos_head() { atf_set "descr" "'zpool create' have to use '-f' scenarios" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool format atf_set "timeout" 2400 } @@ -260,7 +260,7 @@ atf_test_case zpool_create_009_neg clean zpool_create_009_neg_head() { atf_set "descr" "Create a pool with same devices twice or create two pools withsame devices, 'zpool create' should fail." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -289,7 +289,7 @@ atf_test_case zpool_create_010_neg clean zpool_create_010_neg_head() { atf_set "descr" "'zpool create' should return an error with VDEVs <64mb" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs mkfile zpool atf_set "timeout" 2400 } @@ -318,7 +318,7 @@ atf_test_case zpool_create_011_neg clean zpool_create_011_neg_head() { atf_set "descr" "'zpool create' should be failed with inapplicable scenarios." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" dumpadm zpool atf_set "timeout" 2400 } @@ -347,7 +347,7 @@ atf_test_case zpool_create_012_neg clean zpool_create_012_neg_head() { atf_set "descr" "'zpool create' should fail with disk slice in swap." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool swap atf_set "timeout" 2400 } @@ -376,7 +376,7 @@ atf_test_case zpool_create_013_neg clean zpool_create_013_neg_head() { atf_set "descr" "'zpool create' should fail with metadevice in swap." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" metadb metaclear metastat zpool metainit swap atf_set "timeout" 2400 } @@ -405,7 +405,7 @@ atf_test_case zpool_create_014_neg clean zpool_create_014_neg_head() { atf_set "descr" "'zpool create' should fail with regular file in swap." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs mkfile swap zpool atf_set "timeout" 2400 } @@ -434,7 +434,7 @@ atf_test_case zpool_create_015_neg clean zpool_create_015_neg_head() { atf_set "descr" "'zpool create' should fail with zfs vol device in swap." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool swap atf_set "timeout" 2400 } @@ -463,7 +463,7 @@ atf_test_case zpool_create_016_pos clean zpool_create_016_pos_head() { atf_set "descr" "'zpool create' should success with no device in swap." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" dumpadm swapadd zpool swap atf_set "timeout" 2400 } @@ -492,7 +492,7 @@ atf_test_case zpool_create_017_neg clean zpool_create_017_neg_head() { atf_set "descr" "'zpool create' should fail with mountpoint exists and not empty." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -523,7 +523,7 @@ atf_test_case zpool_create_018_pos clean zpool_create_018_pos_head() { atf_set "descr" "zpool create can create pools with specified properties" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -552,7 +552,7 @@ atf_test_case zpool_create_019_pos clean zpool_create_019_pos_head() { atf_set "descr" "zpool create cannot create pools specifying readonly properties" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -581,7 +581,7 @@ atf_test_case zpool_create_020_pos clean zpool_create_020_pos_head() { atf_set "descr" "zpool create -R works as expected" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool atf_set "timeout" 2400 } @@ -610,7 +610,7 @@ atf_test_case zpool_create_021_pos clean zpool_create_021_pos_head() { atf_set "descr" "'zpool create -O property=value pool' can successfully create a poolwith correct filesystem property set." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -639,7 +639,7 @@ atf_test_case zpool_create_022_pos clean zpool_create_022_pos_head() { atf_set "descr" "'zpool create -O property=value pool' can successfully create a poolwith multiple filesystem properties set." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } @@ -668,7 +668,7 @@ atf_test_case zpool_create_023_neg clean zpool_create_023_neg_head() { atf_set "descr" "'zpool create -O' should return an error with badly formed parameters." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zpool atf_set "timeout" 2400 } Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_import/zpool_import_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_import/zpool_import_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_import/zpool_import_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case zpool_import_002_pos clean zpool_import_002_pos_head() { atf_set "descr" "Verify that an exported pool can be imported and cannot be imported more than once." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool sum mkfile zdb atf_set "timeout" 2400 @@ -56,7 +55,6 @@ atf_test_case zpool_import_003_pos clean zpool_import_003_pos_head() { atf_set "descr" "Destroyed pools are not listed unless with -D option is specified." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs atf_set "timeout" 2400 @@ -84,7 +82,6 @@ atf_test_case zpool_import_004_pos clean zpool_import_004_pos_head() { atf_set "descr" "Destroyed pools devices was moved to another directory,it still can be imported correctly." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -112,7 +109,6 @@ atf_test_case zpool_import_005_pos clean zpool_import_005_pos_head() { atf_set "descr" "Destroyed pools devices was renamed, it still can be importedcorrectly." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -140,7 +136,6 @@ atf_test_case zpool_import_006_pos clean zpool_import_006_pos_head() { atf_set "descr" "For mirror, N-1 destroyed pools devices was removed or usedby other pool, it still can be imported correctly." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -168,7 +163,6 @@ atf_test_case zpool_import_007_pos clean zpool_import_007_pos_head() { atf_set "descr" "For raidz, one destroyed pools devices was removed or used byother pool, it still can be imported correctly." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -196,7 +190,6 @@ atf_test_case zpool_import_008_pos clean zpool_import_008_pos_head() { atf_set "descr" "For raidz2, two destroyed pools devices was removed or used byother pool, it still can be imported correctly." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -224,7 +217,6 @@ atf_test_case zpool_import_009_neg clean zpool_import_009_neg_head() { atf_set "descr" "Badly-formed 'zpool import' with inapplicable scenariosshould return an error." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool mkfile atf_set "timeout" 2400 @@ -252,7 +244,6 @@ atf_test_case zpool_import_010_pos clean zpool_import_010_pos_head() { atf_set "descr" "'zpool -D -a' can import all the specified directoriesdestroyed pools." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs atf_set "timeout" 2400 @@ -280,7 +271,6 @@ atf_test_case zpool_import_011_neg clean zpool_import_011_neg_head() { atf_set "descr" "For strip pool, any destroyed pool devices was demaged,zpool import -D will failed." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -308,7 +298,6 @@ atf_test_case zpool_import_012_pos clean zpool_import_012_pos_head() { atf_set "descr" "Verify all mount & share status of sub-filesystems within a poolcan be restored after import [-Df]." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool mkfile zdb share atf_set "timeout" 2400 @@ -336,7 +325,6 @@ atf_test_case zpool_import_013_neg clean zpool_import_013_neg_head() { atf_set "descr" "'zpool import' fail while pool may be in use from other system,it need import forcefully." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool mkfile atf_set "timeout" 2400 @@ -365,7 +353,6 @@ atf_test_case zpool_import_014_pos clean zpool_import_014_pos_head() { atf_set "descr" "'zpool import' can import destroyed disk-backed pools" - atf_set "require.config" rt_short atf_set "require.config" at_least_1_disks atf_set "require.progs" zfs zpool } @@ -391,7 +378,6 @@ atf_test_case zpool_import_all_001_pos c zpool_import_all_001_pos_head() { atf_set "descr" "Verify that 'zpool import -a' succeeds as root." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool sum mkfile atf_set "timeout" 2400 @@ -420,7 +406,6 @@ atf_test_case zpool_import_missing_001_p zpool_import_missing_001_pos_head() { atf_set "descr" "Verify that import could handle damaged or missing device." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zfs sum zpool zdb atf_set "timeout" 2400 @@ -448,7 +433,6 @@ atf_test_case zpool_import_missing_002_p zpool_import_missing_002_pos_head() { atf_set "descr" "Verify that import could handle moving device." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool zfs zdb atf_set "timeout" 2400 @@ -476,7 +460,6 @@ atf_test_case zpool_import_missing_003_p zpool_import_missing_003_pos_head() { atf_set "descr" "Verify that import could handle device overlapped." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" mkfile zpool sum zfs atf_set "timeout" 2400 @@ -503,7 +486,6 @@ atf_test_case zpool_import_missing_004_p zpool_import_missing_004_pos_head() { atf_set "descr" "Verify that zpool import succeeds when devices are missing" - atf_set "require.config" rt_short atf_set "require.progs" mkfile zfs zpool atf_set "timeout" 300 } @@ -537,7 +519,6 @@ atf_test_case zpool_import_rename_001_po zpool_import_rename_001_pos_head() { atf_set "descr" "Verify that an imported pool can be renamed." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zfs zpool sum mkfile zdb atf_set "timeout" 2400 @@ -564,7 +545,6 @@ atf_test_case zpool_import_corrupt_001_p zpool_import_corrupt_001_pos_head() { atf_set "descr" "Verify that a disk-backed exported pool with some of its vdev labels corrupted can still be imported" - atf_set "require.config" rt_medium atf_set "require.config" at_least_1_disks atf_set "require.progs" zfs zpool zdb atf_set "timeout" 2400 Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cli_root/zpool_upgrade/zpool_upgrade_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case zpool_upgrade_001_pos clea zpool_upgrade_001_pos_head() { atf_set "descr" "Executing 'zpool upgrade -v' command succeeds." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -58,7 +57,6 @@ atf_test_case zpool_upgrade_002_pos clea zpool_upgrade_002_pos_head() { atf_set "descr" "Import pools of all versions - zpool upgrade on each pools works" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -88,7 +86,6 @@ atf_test_case zpool_upgrade_003_pos clea zpool_upgrade_003_pos_head() { atf_set "descr" "Upgrading a pool that has already been upgraded succeeds." - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -118,7 +115,6 @@ atf_test_case zpool_upgrade_004_pos clea zpool_upgrade_004_pos_head() { atf_set "descr" "zpool upgrade -a works" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -151,7 +147,6 @@ atf_test_case zpool_upgrade_005_neg clea zpool_upgrade_005_neg_head() { atf_set "descr" "Variations of upgrade -v print usage message,return with non-zero status" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -181,7 +176,6 @@ atf_test_case zpool_upgrade_006_neg clea zpool_upgrade_006_neg_head() { atf_set "descr" "Attempting to upgrade a non-existent pool will return an error" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -211,7 +205,6 @@ atf_test_case zpool_upgrade_007_pos clea zpool_upgrade_007_pos_head() { atf_set "descr" "Import pools of all versions - 'zfs upgrade' on each pools works" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool # This test can take quite a while, especially on debug bits. @@ -243,7 +236,6 @@ atf_test_case zpool_upgrade_008_pos clea zpool_upgrade_008_pos_head() { atf_set "descr" "Zpool upgrade should be able to upgrade pools to a given version using -V" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 @@ -273,7 +265,6 @@ atf_test_case zpool_upgrade_009_neg clea zpool_upgrade_009_neg_head() { atf_set "descr" "Zpool upgrade -V shouldn't be able to upgrade a pool to an unknown version" - atf_set "require.config" rt_medium atf_set "require.config" at_least_2_disks atf_set "require.progs" zpool atf_set "timeout" 1800 Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/compression/compression_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/compression/compression_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/compression/compression_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case compress_001_pos cleanup compress_001_pos_head() { atf_set "descr" "Ensure that compressed files are smaller." - atf_set "require.config" rt_long atf_set "require.progs" zfs } compress_001_pos_body() @@ -54,7 +53,6 @@ atf_test_case compress_003_pos cleanup compress_003_pos_head() { atf_set "descr" "Changing blocksize doesn't casue system panic with compression settings" - atf_set "require.config" rt_long atf_set "require.progs" zfs mkfile } compress_003_pos_body() @@ -80,7 +78,6 @@ atf_test_case compress_004_pos cleanup compress_004_pos_head() { atf_set "descr" "Creating non-power-of-2 blocksize file and freeing the filestorage space at will should work normally with compression setting" - atf_set "require.config" rt_long atf_set "require.progs" zfs } compress_004_pos_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/ctime/ctime_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/ctime/ctime_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/ctime/ctime_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case ctime_001_pos cleanup ctime_001_pos_head() { atf_set "descr" "A file's ctime should change when the file is modified" - atf_set "require.config" rt_short atf_set "require.progs" zfs } ctime_001_pos_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/delegate/zfs_allow/zfs_allow_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/delegate/zfs_allow/zfs_allow_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/delegate/zfs_allow/zfs_allow_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -325,7 +325,6 @@ atf_test_case zfs_allow_012_neg cleanup zfs_allow_012_neg_head() { atf_set "descr" "Verify privileged user can not use permissions properly whendelegation property is set off" - atf_set "require.config" rt_medium atf_set "require.progs" zfs zpool svcs } zfs_allow_012_neg_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/devices/devices_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/devices/devices_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/devices/devices_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case devices_001_pos cleanup devices_001_pos_head() { atf_set "descr" "Setting devices=on on file system, the devices files in this filesystem can be used." - atf_set "require.config" rt_short atf_set "require.progs" zfs } devices_001_pos_body() @@ -57,7 +56,6 @@ atf_test_case devices_002_neg cleanup devices_002_neg_head() { atf_set "descr" "Setting devices=off on file system, the devices files in this filesystem can not be used." - atf_set "require.config" rt_short atf_set "require.progs" zfs } devices_002_neg_body() @@ -86,7 +84,6 @@ atf_test_case devices_003_pos cleanup devices_003_pos_head() { atf_set "descr" "Writing random data into /dev/zfs should do no harm." - atf_set "require.config" rt_short } devices_003_pos_body() { Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/exec/exec_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/exec/exec_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/exec/exec_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case exec_001_pos cleanup exec_001_pos_head() { atf_set "descr" "Setting exec=on on a filesystem, processes can be executed fromthis file system." - atf_set "require.config" rt_short atf_set "require.progs" zfs } exec_001_pos_body() @@ -53,7 +52,6 @@ atf_test_case exec_002_neg cleanup exec_002_neg_head() { atf_set "descr" "Setting exec=off on a filesystem, processes can not be executedfrom this file system." - atf_set "require.config" rt_short atf_set "require.progs" zfs } exec_002_neg_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_pool/grow_pool_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_pool/grow_pool_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_pool/grow_pool_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,7 @@ atf_test_case grow_pool_001_pos cleanup grow_pool_001_pos_head() { atf_set "descr" "A zpool may be increased in capacity by adding a disk" - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool } grow_pool_001_pos_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_replicas/grow_replicas_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_replicas/grow_replicas_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/grow_replicas/grow_replicas_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,7 @@ atf_test_case grow_replicas_001_pos clea grow_replicas_001_pos_head() { atf_set "descr" "A zpool mirror/raidz may be increased in capacity by adding a disk." - atf_set "require.config" rt_medium disks_are_physical + atf_set "require.config" disks_are_physical atf_set "require.progs" zfs zpool } grow_replicas_001_pos_body() Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/history/history_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/history/history_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/history/history_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case history_001_pos history_001_pos_head() { atf_set "descr" "Verify zpool sub-commands which modify state are logged." - atf_set "require.config" rt_medium atf_set "require.progs" mkfile zpool nawk atf_set "timeout" 1800 } @@ -46,7 +45,6 @@ atf_test_case history_002_pos cleanup history_002_pos_head() { atf_set "descr" "Verify zfs sub-commands which modify state are logged." - atf_set "require.config" rt_medium atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } @@ -75,7 +73,6 @@ atf_test_case history_003_pos cleanup history_003_pos_head() { atf_set "descr" "zpool history limitation test." - atf_set "require.config" rt_long atf_set "require.progs" zpool zfs atf_set "timeout" 1800 } @@ -104,7 +101,6 @@ atf_test_case history_004_pos cleanup history_004_pos_head() { atf_set "descr" "'zpool history' can copes with many simultaneous command." - atf_set "require.config" rt_medium atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } @@ -133,7 +129,6 @@ atf_test_case history_005_neg cleanup history_005_neg_head() { atf_set "descr" "Verify 'zpool list|status|iostat' will not be logged." - atf_set "require.config" rt_short atf_set "require.progs" zpool atf_set "timeout" 1800 } @@ -162,7 +157,6 @@ atf_test_case history_006_neg cleanup history_006_neg_head() { atf_set "descr" "Verify 'zfs list|get|mount|unmount|share|unshare|send' will notbe logged." - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } @@ -191,7 +185,6 @@ atf_test_case history_007_pos cleanup history_007_pos_head() { atf_set "descr" "Verify command history moves with pool while migrating." - atf_set "require.config" rt_short atf_set "require.progs" zpool atf_set "timeout" 1800 } @@ -220,7 +213,6 @@ atf_test_case history_008_pos cleanup history_008_pos_head() { atf_set "descr" "Internal journal records all the recursively operations." - atf_set "require.config" rt_medium atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } @@ -249,7 +241,6 @@ atf_test_case history_009_pos cleanup history_009_pos_head() { atf_set "descr" "Verify the delegation internal history are correctly." - atf_set "require.config" rt_long atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } @@ -278,7 +269,6 @@ atf_test_case history_010_pos cleanup history_010_pos_head() { atf_set "descr" "Verify internal long history information are correct." - atf_set "require.config" rt_short atf_set "require.progs" zfs zpool atf_set "timeout" 1800 } Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/hotplug/hotplug_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/hotplug/hotplug_test.sh Tue Apr 12 21:23:44 2016 (r297877) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/hotplug/hotplug_test.sh Tue Apr 12 21:29:06 2016 (r297878) @@ -28,7 +28,6 @@ atf_test_case hotplug_001_pos cleanup hotplug_001_pos_head() { atf_set "descr" "When removing a device from a redundant pool, the device'sstate will be indicated as 'REMOVED'. No FMA faulty message." - atf_set "require.config" rt_long atf_set "require.progs" mkfile zpool lofiadm atf_set "timeout" 1800 } @@ -57,7 +56,6 @@ atf_test_case hotplug_002_pos cleanup hotplug_002_pos_head() { atf_set "descr" "When removing and reinserting a device, the device status isONLINE with no FMA errors." - atf_set "require.config" rt_long atf_set "require.progs" mkfile zpool lofiadm atf_set "timeout" 1800 } @@ -86,7 +84,6 @@ atf_test_case hotplug_003_pos cleanup hotplug_003_pos_head() { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 12 21:47:39 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CD324B0D534 for ; Tue, 12 Apr 2016 21:47:39 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 605CB17FC; Tue, 12 Apr 2016 21:47:39 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CLlctW056716; Tue, 12 Apr 2016 21:47:38 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CLlbM8056702; Tue, 12 Apr 2016 21:47:37 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604122147.u3CLlbM8056702@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 12 Apr 2016 21:47:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297881 - in projects/pnfs-server/sys/fs: nfs nfsclient nfsserver X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 21:47:39 -0000 Author: rmacklem Date: Tue Apr 12 21:47:37 2016 New Revision: 297881 URL: https://svnweb.freebsd.org/changeset/base/297881 Log: Put the pNFS server/client changes into the new NFS kernel directories. More to come, before it is ready for build/test. Modified: projects/pnfs-server/sys/fs/nfs/nfs.h projects/pnfs-server/sys/fs/nfs/nfs_commonsubs.c projects/pnfs-server/sys/fs/nfs/nfs_var.h projects/pnfs-server/sys/fs/nfs/nfscl.h projects/pnfs-server/sys/fs/nfs/nfsclstate.h projects/pnfs-server/sys/fs/nfs/nfsport.h projects/pnfs-server/sys/fs/nfs/nfsproto.h projects/pnfs-server/sys/fs/nfs/nfsrvstate.h projects/pnfs-server/sys/fs/nfsclient/nfs_clcomsubs.c projects/pnfs-server/sys/fs/nfsclient/nfs_clnode.c projects/pnfs-server/sys/fs/nfsclient/nfs_clport.c projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c projects/pnfs-server/sys/fs/nfsclient/nfs_clstate.c projects/pnfs-server/sys/fs/nfsclient/nfs_clvnops.c projects/pnfs-server/sys/fs/nfsclient/nfsnode.h projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdkrpc.c projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdport.c projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdserv.c projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdsocket.c projects/pnfs-server/sys/fs/nfsserver/nfs_nfsdstate.c Modified: projects/pnfs-server/sys/fs/nfs/nfs.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfs.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfs.h Tue Apr 12 21:47:37 2016 (r297881) @@ -130,6 +130,9 @@ #endif #define NFSV4_CBPORT 7745 /* Callback port for testing */ +/* This value is defined in GlusterFS as GF_NFS3_FILE_IO_SIZE_MAX. */ +#define NFSV4SRV_PNFS_MAXIO 1048576 /* Max I/O size for the DS */ + /* * This macro defines the high water mark for issuing V4 delegations. * (It is currently set at a conservative 20% of nfsrv_v4statelimit. This @@ -168,12 +171,39 @@ struct nfsd_addsock_args { }; /* + * The file handle used by the pNFS Data Servers, which are actually + * GlusterFS servers. The userland nfsd passes in the value for the + * GlusterFS volume root. The only field that changes for files within the + * volume is the gfid field. + */ +struct pnfsfh { + char id[4]; /* Always ":OGL". */ + char expid[16]; /* Export ID. */ + char gfid[16]; /* Gfid. */ + char mntid[16]; /* Mount ID. */ +}; + +/* * nfsd argument for new krpc. + * (New version supports pNFS, indicated by NFSSVC_NEWSTRUCT flag.) */ struct nfsd_nfsd_args { const char *principal; /* GSS-API service principal name */ int minthreads; /* minimum service thread count */ int maxthreads; /* maximum service thread count */ + int version; /* Allow multiple variants */ + struct pnfsfh nfsfh; /* pNFS DS file handle */ + char *addr; /* pNFS DS addresses */ + int addrlen; /* Length of addrs */ + char *dnshost; /* DNS names for DS addresses */ + int dnshostlen; /* Length of DNS names */ +}; + +/* Old version. */ +struct nfsd_nfsd_oargs { + const char *principal; /* GSS-API service principal name */ + int minthreads; /* minimum service thread count */ + int maxthreads; /* maximum service thread count */ }; /* @@ -333,6 +363,7 @@ struct nfsreferral { #define NFSLCK_WANTWDELEG 0x10000000 #define NFSLCK_WANTRDELEG 0x20000000 #define NFSLCK_WANTNODELEG 0x40000000 +#define NFSLCK_LAYOUT 0x80000000 #define NFSLCK_WANTBITS \ (NFSLCK_WANTWDELEG | NFSLCK_WANTRDELEG | NFSLCK_WANTNODELEG) Modified: projects/pnfs-server/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfs_commonsubs.c Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfs_commonsubs.c Tue Apr 12 21:47:37 2016 (r297881) @@ -71,6 +71,7 @@ int nfsd_enable_stringtouid = 0; NFSNAMEIDMUTEX; NFSSOCKMUTEX; extern int nfsrv_lughashsize; +extern int nfscl_debuglevel; /* * This array of structures indicates, for V4: @@ -507,7 +508,7 @@ nfsm_fhtom(struct nfsrv_descript *nd, u_ } (void) nfsm_strtom(nd, fhp, size); break; - } + }; return (bytesize); } @@ -544,7 +545,7 @@ nfsaddr_match(int family, union nethosta } break; #endif - } + }; return (0); } @@ -581,7 +582,7 @@ nfsaddr2_match(NFSSOCKADDR_T nam1, NFSSO } break; #endif - } + }; return (0); } @@ -1203,7 +1204,8 @@ nfsv4_loadattr(struct nfsrv_descript *nd } } else if (nap != NULL) { if (*tl++) - printf("NFSv4 fileid > 32bits\n"); + NFSCL_DEBUG(1, + "NFSv4 fileid > 32bits\n"); nap->na_fileid = thyp; } attrsum += NFSX_HYPER; @@ -1741,7 +1743,8 @@ nfsv4_loadattr(struct nfsrv_descript *nd } } else if (nap != NULL) { if (*tl++) - printf("NFSv4 mounted on fileid > 32bits\n"); + NFSCL_DEBUG(1, + "NFSv4 mounted on fileid > 32bits\n"); nap->na_mntonfileno = thyp; } attrsum += NFSX_HYPER; @@ -1774,7 +1777,7 @@ nfsv4_loadattr(struct nfsrv_descript *nd */ bitpos = NFSATTRBIT_MAX; break; - } + }; } /* @@ -2508,7 +2511,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd break; default: printf("EEK! Bad V4 attribute bitpos=%d\n", bitpos); - } + }; } } if (naclp != NULL) @@ -3916,122 +3919,6 @@ newnfs_sndunlock(int *flagp) NFSUNLOCKSOCK(); } -APPLESTATIC int -nfsv4_getipaddr(struct nfsrv_descript *nd, struct sockaddr_storage *sa, - int *isudp) -{ - struct sockaddr_in *sad; - struct sockaddr_in6 *sad6; - struct in_addr saddr; - uint32_t portnum, *tl; - int af = 0, i, j, k; - char addr[64], protocol[5], *cp; - int cantparse = 0, error = 0; - uint16_t portv; - - NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); - i = fxdr_unsigned(int, *tl); - if (i >= 3 && i <= 4) { - error = nfsrv_mtostr(nd, protocol, i); - if (error) - goto nfsmout; - if (strcmp(protocol, "tcp") == 0) { - af = AF_INET; - *isudp = 0; - } else if (strcmp(protocol, "udp") == 0) { - af = AF_INET; - *isudp = 1; - } else if (strcmp(protocol, "tcp6") == 0) { - af = AF_INET6; - *isudp = 0; - } else if (strcmp(protocol, "udp6") == 0) { - af = AF_INET6; - *isudp = 1; - } else - cantparse = 1; - } else { - cantparse = 1; - if (i > 0) { - error = nfsm_advance(nd, NFSM_RNDUP(i), -1); - if (error) - goto nfsmout; - } - } - NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); - i = fxdr_unsigned(int, *tl); - if (i < 0) { - error = NFSERR_BADXDR; - goto nfsmout; - } else if (cantparse == 0 && i >= 11 && i < 64) { - /* - * The shortest address is 11chars and the longest is < 64. - */ - error = nfsrv_mtostr(nd, addr, i); - if (error) - goto nfsmout; - - /* Find the port# at the end and extract that. */ - i = strlen(addr); - k = 0; - cp = &addr[i - 1]; - /* Count back two '.'s from end to get port# field. */ - for (j = 0; j < i; j++) { - if (*cp == '.') { - k++; - if (k == 2) - break; - } - cp--; - } - if (k == 2) { - /* - * The NFSv4 port# is appended as .N.N, where N is - * a decimal # in the range 0-255, just like an inet4 - * address. Cheat and use inet_aton(), which will - * return a Class A address and then shift the high - * order 8bits over to convert it to the port#. - */ - *cp++ = '\0'; - if (inet_aton(cp, &saddr) == 1) { - portnum = ntohl(saddr.s_addr); - portv = (uint16_t)((portnum >> 16) | - (portnum & 0xff)); - } else - cantparse = 1; - } else - cantparse = 1; - if (cantparse == 0) { - if (af == AF_INET) { - sad = (struct sockaddr_in *)sa; - if (inet_pton(af, addr, &sad->sin_addr) == 1) { - sad->sin_len = sizeof(*sad); - sad->sin_family = AF_INET; - sad->sin_port = htons(portv); - return (0); - } - } else { - sad6 = (struct sockaddr_in6 *)sa; - if (inet_pton(af, addr, &sad6->sin6_addr) - == 1) { - sad6->sin6_len = sizeof(*sad6); - sad6->sin6_family = AF_INET6; - sad6->sin6_port = htons(portv); - return (0); - } - } - } - } else { - if (i > 0) { - error = nfsm_advance(nd, NFSM_RNDUP(i), -1); - if (error) - goto nfsmout; - } - } - error = EPERM; -nfsmout: - return (error); -} - /* * Handle an NFSv4.1 Sequence request for the session. * If reply != NULL, use it to return the cached reply, as required. Modified: projects/pnfs-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfs_var.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfs_var.h Tue Apr 12 21:47:37 2016 (r297881) @@ -136,6 +136,15 @@ int nfsrv_checksequence(struct nfsrv_des int nfsrv_checkreclaimcomplete(struct nfsrv_descript *); void nfsrv_cache_session(uint8_t *, uint32_t, int, struct mbuf **); void nfsrv_freeallbackchannel_xprts(void); +int nfsrv_layoutget(struct nfsrv_descript *, vnode_t, struct nfsexstuff *, + int, int *, uint64_t *, uint64_t *, uint64_t, nfsv4stateid_t *, int, int *, + int *, char *, struct ucred *, NFSPROC_T *); +int nfsrv_layoutreturn(struct nfsrv_descript *, vnode_t, int, int, uint64_t, + uint64_t, int, int, nfsv4stateid_t *, int, char *, int *, struct ucred *, + NFSPROC_T *); +int nfsrv_getdevinfo(char *, int, int *, uint32_t *, int *, char **); +void nfsrv_freealllayoutsanddevids(void); +void nfsrv_createdevids(struct nfsd_nfsd_args *); /* nfs_nfsdserv.c */ int nfsrvd_access(struct nfsrv_descript *, int, @@ -234,8 +243,16 @@ int nfsrvd_destroysession(struct nfsrv_d vnode_t, NFSPROC_T *, struct nfsexstuff *); int nfsrvd_freestateid(struct nfsrv_descript *, int, vnode_t, NFSPROC_T *, struct nfsexstuff *); +int nfsrvd_getdevinfo(struct nfsrv_descript *, int, + vnode_t, NFSPROC_T *, struct nfsexstuff *); +int nfsrvd_layoutget(struct nfsrv_descript *, int, + vnode_t, NFSPROC_T *, struct nfsexstuff *); +int nfsrvd_layoutreturn(struct nfsrv_descript *, int, + vnode_t, NFSPROC_T *, struct nfsexstuff *); int nfsrvd_notsupp(struct nfsrv_descript *, int, vnode_t, NFSPROC_T *, struct nfsexstuff *); +int nfsrvd_notsuppvp(struct nfsrv_descript *, int, + vnode_t, NFSPROC_T *, struct nfsexstuff *); /* nfs_nfsdsocket.c */ void nfsrvd_rephead(struct nfsrv_descript *); @@ -287,8 +304,6 @@ void nfsrv_cleanusergroup(void); int nfsrv_checkutf8(u_int8_t *, int); int newnfs_sndlock(int *); void newnfs_sndunlock(int *); -int nfsv4_getipaddr(struct nfsrv_descript *, struct sockaddr_storage *, - int *); int nfsv4_seqsession(uint32_t, uint32_t, uint32_t, struct nfsslot *, struct mbuf **, uint16_t); void nfsv4_seqsess_cacherep(uint32_t, struct nfsslot *, int, struct mbuf **); @@ -302,11 +317,11 @@ struct ucred *nfsrv_getgrpscred(struct u /* nfs_clcomsubs.c */ void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int); void nfscl_reqstart(struct nfsrv_descript *, int, struct nfsmount *, - u_int8_t *, int, u_int32_t **, struct nfsclsession *); + u_int8_t *, int, u_int32_t **, struct nfsclsession *, int, int); nfsuint64 *nfscl_getcookie(struct nfsnode *, off_t off, int); void nfscl_fillsattr(struct nfsrv_descript *, struct vattr *, vnode_t, int, u_int32_t); -u_int8_t *nfscl_getmyip(struct nfsmount *, struct in6_addr *, int *); +u_int8_t *nfscl_getmyip(struct nfsmount *, int *); int nfsm_getfh(struct nfsrv_descript *, struct nfsfh **); int nfscl_mtofh(struct nfsrv_descript *, struct nfsfh **, struct nfsvattr *, int *); @@ -481,8 +496,6 @@ int nfsrpc_destroyclient(struct nfsmount int nfsrpc_layoutget(struct nfsmount *, uint8_t *, int, int, uint64_t, uint64_t, uint64_t, int, nfsv4stateid_t *, int *, struct nfsclflayouthead *, struct ucred *, NFSPROC_T *, void *); -int nfsrpc_getdeviceinfo(struct nfsmount *, uint8_t *, int, uint32_t *, - struct nfscldevinfo **, struct ucred *, NFSPROC_T *); int nfsrpc_layoutcommit(struct nfsmount *, uint8_t *, int, int, uint64_t, uint64_t, uint64_t, nfsv4stateid_t *, int, int, uint8_t *, struct ucred *, NFSPROC_T *, void *); @@ -490,8 +503,8 @@ int nfsrpc_layoutreturn(struct nfsmount int, uint64_t, uint64_t, nfsv4stateid_t *, int, uint32_t *, struct ucred *, NFSPROC_T *, void *); int nfsrpc_reclaimcomplete(struct nfsmount *, struct ucred *, NFSPROC_T *); -int nfscl_doiods(vnode_t, struct uio *, int *, int *, uint32_t, - struct ucred *, NFSPROC_T *); +int nfscl_doiods(vnode_t, struct uio *, int *, int *, uint32_t, int, + struct ucred *, NFSPROC_T *, struct nfsvattr *, int *); int nfscl_findlayoutforio(struct nfscllayout *, uint64_t, uint32_t, struct nfsclflayout **); void nfscl_freenfsclds(struct nfsclds *); Modified: projects/pnfs-server/sys/fs/nfs/nfscl.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfscl.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfscl.h Tue Apr 12 21:47:37 2016 (r297881) @@ -49,7 +49,8 @@ struct nfsv4node { */ #define NFSCL_REQSTART(n, p, v) \ nfscl_reqstart((n), (p), VFSTONFS((v)->v_mount), \ - VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL, NULL) + VTONFS(v)->n_fhp->nfh_fh, VTONFS(v)->n_fhp->nfh_len, NULL, \ + NULL, 0, 0) /* * These two macros convert between a lease duration and renew interval. Modified: projects/pnfs-server/sys/fs/nfs/nfsclstate.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfsclstate.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfsclstate.h Tue Apr 12 21:47:37 2016 (r297881) @@ -70,6 +70,7 @@ struct nfsclsession { /* * This structure holds the session, clientid and related information * needed for an NFSv4.1 Meta Data Server (MDS) or Data Server (DS). + * If NFSCLDS_V3CONN is set, it holds the connection for an NFSv3 DS. * It is malloc'd to the correct length. */ struct nfsclds { @@ -90,6 +91,7 @@ struct nfsclds { #define NFSCLDS_HASWRITEVERF 0x0001 #define NFSCLDS_MDS 0x0002 #define NFSCLDS_DS 0x0004 +#define NFSCLDS_V3CONN 0x0008 struct nfsclclient { LIST_ENTRY(nfsclclient) nfsc_list; @@ -257,6 +259,18 @@ struct nfscllayout { #define NFSLY_RECALLALL 0x0040 #define NFSLY_RETONCLOSE 0x0080 #define NFSLY_WRITTEN 0x0100 /* Has been used to write to a DS. */ +#define NFSLY_FLEXFILE 0x0200 + +/* + * Flex Files Data Server structures. + */ +struct nfsffds { + uint32_t nfsffds_efficiency; + nfsv4stateid_t nfsffds_stateid; + uid_t nfsffds_uid; + gid_t nfsffds_gid; + struct nfsfh *nfsffds_fh[4]; +}; /* * MALLOC'd to the correct length to accommodate the file handle list. @@ -270,20 +284,46 @@ struct nfsclflayout { uint8_t nfsfl_dev[NFSX_V4DEVICEID]; uint64_t nfsfl_off; uint64_t nfsfl_end; - uint64_t nfsfl_patoff; struct nfscldevinfo *nfsfl_devp; uint32_t nfsfl_iomode; - uint32_t nfsfl_util; - uint32_t nfsfl_stripe1; uint16_t nfsfl_flags; - uint16_t nfsfl_fhcnt; - struct nfsfh *nfsfl_fh[1]; /* FH list for DS */ -}; + uint16_t nfsfl_cnt; + union { + struct { + uint8_t dev[NFSX_V4DEVICEID]; + uint64_t patoff; + uint32_t util; + uint32_t stripe1; + struct nfsfh *fh[1]; + } nfsfl_unfl; + struct { + uint64_t stripeunit; + uint32_t stripecnt; + uint32_t fflags; + struct nfsffds ds; + } nfsfl_unff; + }; +}; + +#define nfsfl_fhcnt nfsfl_cnt +#define nfsfl_patoff nfsfl_unfl.patoff +#define nfsfl_util nfsfl_unfl.util +#define nfsfl_stripe1 nfsfl_unfl.stripe1 +#define nfsfl_fh nfsfl_unfl.fh +#define nfsfl_stripeunit nfsfl_unff.stripeunit +#define nfsfl_stripecnt nfsfl_unff.stripecnt +#define nfsfl_fflags nfsfl_unff.fflags +#define nfsfl_ffdsefficiency nfsfl_unff.ds.nfsffds_efficiency +#define nfsfl_ffdsstateid nfsfl_unff.ds.nfsffds_stateid +#define nfsfl_ffdsuid nfsfl_unff.ds.nfsffds_uid +#define nfsfl_ffdsgid nfsfl_unff.ds.nfsffds_gid +#define nfsfl_ffdsfh nfsfl_unff.ds.nfsffds_fh /* * Flags for nfsfl_flags. */ #define NFSFL_RECALL 0x0001 /* File layout has been recalled */ +#define NFSFL_FLEXFILE 0x0002 /* Flex Files layout */ /* * Structure that is used to store a LAYOUTRECALL. @@ -298,25 +338,46 @@ struct nfsclrecalllayout { }; /* + * Structure for the Flex Files layout versions. + */ +struct nfsffvers { + uint32_t vers; + uint32_t minorvers; + uint32_t rsize; + uint32_t wsize; + uint32_t tightlycoupled; +}; + +/* * Stores the NFSv4.1 Device Info. Malloc'd to the correct length to * store the list of network connections and list of indices. * nfsdi_data[] is allocated the following way: - * - nfsdi_addrcnt * struct nfsclds + * - nfsdi_addrcnt * struct nfsclds ptrs + * For NFSv4.1 Files Layout: * - stripe indices, each stored as one byte, since there can be many * of them. (This implies a limit of 256 on nfsdi_addrcnt, since the * indices select which address.) + * We currently only support 4 Flex Files versions. (That covers us up to + * NFSv4.2.) */ struct nfscldevinfo { LIST_ENTRY(nfscldevinfo) nfsdi_list; + struct nfsffvers nfsdi_ffvers[4]; uint8_t nfsdi_deviceid[NFSX_V4DEVICEID]; struct nfsclclient *nfsdi_clp; uint32_t nfsdi_refcnt; uint32_t nfsdi_layoutrefs; - uint16_t nfsdi_stripecnt; + union { + uint16_t stripecnt; + uint16_t verspos; + } nfsdi_un; uint16_t nfsdi_addrcnt; struct nfsclds *nfsdi_data[0]; }; +#define nfsdi_stripecnt nfsdi_un.stripecnt +#define nfsdi_verspos nfsdi_un.verspos + /* These inline functions return values from nfsdi_data[]. */ /* * Return a pointer to the address at "pos". Modified: projects/pnfs-server/sys/fs/nfs/nfsport.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfsport.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfsport.h Tue Apr 12 21:47:37 2016 (r297881) @@ -833,6 +833,7 @@ int newnfs_realign(struct mbuf **, int); */ #define NFSSTA_HASWRITEVERF 0x00040000 /* Has write verifier */ #define NFSSTA_GOTFSINFO 0x00100000 /* Got the fsinfo */ +#define NFSSTA_PNFSFLEXFILE 0x00200000 /* Use Flex File layout */ #define NFSSTA_NOLAYOUTCOMMIT 0x04000000 /* Don't do LayoutCommit */ #define NFSSTA_SESSPERSIST 0x08000000 /* Has a persistent session */ #define NFSSTA_TIMEO 0x10000000 /* Experiencing a timeout */ @@ -863,6 +864,7 @@ int newnfs_realign(struct mbuf **, int); #define NFSHASNOLAYOUTCOMMIT(n) ((n)->nm_state & NFSSTA_NOLAYOUTCOMMIT) #define NFSHASSESSPERSIST(n) ((n)->nm_state & NFSSTA_SESSPERSIST) #define NFSHASPNFS(n) ((n)->nm_state & NFSSTA_PNFS) +#define NFSHASFLEXFILE(n) ((n)->nm_state & NFSSTA_PNFSFLEXFILE) /* * Gets the stats field out of the mount structure. Modified: projects/pnfs-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfsproto.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfsproto.h Tue Apr 12 21:47:37 2016 (r297881) @@ -244,13 +244,17 @@ #define NFSX_V4SETTIME (NFSX_UNSIGNED + NFSX_V4TIME) #define NFSX_V4SESSIONID 16 #define NFSX_V4DEVICEID 16 +#define NFSX_V4PNFSFH (sizeof(struct pnfsfh)) +#define NFSX_V4FLEXFILELAYOUT (10 * NFSX_UNSIGNED + NFSX_V4DEVICEID + \ + NFSX_HYPER + NFSX_STATEID + NFSX_V4PNFSFH) +#define NFSX_V4MAXLAYOUT NFSX_V4FLEXFILELAYOUT +#define NFSX_STATEIDOTHER 12 +#define NFSX_STATEID (NFSX_UNSIGNED + NFSX_STATEIDOTHER) /* sizes common to multiple NFS versions */ #define NFSX_FHMAX (NFSX_V4FHMAX) #define NFSX_MYFH (sizeof (fhandle_t)) /* size this server uses */ #define NFSX_VERF 8 -#define NFSX_STATEIDOTHER 12 -#define NFSX_STATEID (NFSX_UNSIGNED + NFSX_STATEIDOTHER) #define NFSX_GSSH 12 /* variants for multiple versions */ @@ -453,6 +457,11 @@ #define NFSV4ACE_SYNCHRONIZE 0x00100000 /* + * Flags for layout get for Flex files layout. + */ +#define NFSFFLAYOUT_NO_COMMIT 0x1 + +/* * Here are the mappings between mode bits and acl mask bits for * directories and other files. * (Named attributes have not been included, since named attributes are @@ -621,6 +630,7 @@ #define NFSLAYOUT_NFSV4_1_FILES 0x1 #define NFSLAYOUT_OSD2_OBJECTS 0x2 #define NFSLAYOUT_BLOCK_VOLUME 0x3 +#define NFSLAYOUT_FLEXFILE 0x4 #define NFSLAYOUTIOMODE_READ 1 #define NFSLAYOUTIOMODE_RW 2 @@ -1343,4 +1353,14 @@ struct nfsv4stateid { }; typedef struct nfsv4stateid nfsv4stateid_t; +/* Notify bits and notify bitmap size. */ +#define NFSV4NOTIFY_CHANGE 1 +#define NFSV4NOTIFY_DELETE 2 +#define NFSV4_NOTIFYBITMAP 1 /* # of 32bit values needed for bits */ + +/* Layoutreturn kinds. */ +#define NFSV4LAYOUTRET_FILE 1 +#define NFSV4LAYOUTRET_FSID 2 +#define NFSV4LAYOUTRET_ALL 3 + #endif /* _NFS_NFSPROTO_H_ */ Modified: projects/pnfs-server/sys/fs/nfs/nfsrvstate.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfsrvstate.h Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfs/nfsrvstate.h Tue Apr 12 21:47:37 2016 (r297881) @@ -84,6 +84,7 @@ struct nfsclient { struct nfsstatehead lc_open; /* Open owner list */ struct nfsstatehead lc_deleg; /* Delegations */ struct nfsstatehead lc_olddeleg; /* and old delegations */ + struct nfsstatehead lc_layout; /* NFSv4.1 layouts */ struct nfssessionhead lc_session; /* List of NFSv4.1 sessions */ time_t lc_expiry; /* Expiry time (sec) */ time_t lc_delegtime; /* Old deleg expiry (sec) */ @@ -153,6 +154,7 @@ struct nfsdsession { * - open file structures chained off an open_owner structure * - lock_owner structures chained off an open file structure * - delegated file structures chained off of nfsclient and nfslockfile + * - pNFS layouts chained off of nfsclient and nfslockfile * - the ls_list field is used for the chain it is in * - the ls_head structure is used to chain off the sibling structure * (it is a union between an nfsstate and nfslock structure head) @@ -186,8 +188,9 @@ struct nfsstate { struct nfslockfile *ls_lfp; /* Back pointer */ struct nfsrvcache *ls_op; /* Op cache reference */ struct nfsclient *ls_clp; /* Back pointer */ - u_short ls_ownerlen; /* Length of ls_owner */ + u_int32_t ls_ownerlen; /* Length of ls_owner */ u_char ls_owner[1]; /* malloc'd the correct size */ + /* Must be uint32_t * aligned */ }; #define ls_lock ls_head.lock #define ls_open ls_head.open @@ -199,6 +202,8 @@ struct nfsstate { #define ls_delegtime ls_un.deleg.expiry #define ls_delegtimelimit ls_un.deleg.limit #define ls_compref ls_un.deleg.compref +#define ls_layout ls_owner +#define ls_layoutlen ls_ownerlen /* * Nfs lock structure. @@ -249,6 +254,7 @@ struct nfsrollback { struct nfslockfile { LIST_HEAD(, nfsstate) lf_open; /* Open list */ LIST_HEAD(, nfsstate) lf_deleg; /* Delegation list */ + LIST_HEAD(, nfsstate) lf_layout; /* Layout list */ LIST_HEAD(, nfslock) lf_lock; /* Lock list */ LIST_HEAD(, nfslock) lf_locallock; /* Local lock list */ LIST_HEAD(, nfsrollback) lf_rollback; /* Local lock rollback list */ @@ -291,6 +297,24 @@ struct nfsf_rec { #if defined(_KERNEL) || defined(KERNEL) void nfsrv_cleanclient(struct nfsclient *, NFSPROC_T *); void nfsrv_freedeleglist(struct nfsstatehead *); +void nfsrv_freelayoutlist(struct nfsstatehead *); + +/* + * This structure is used to create the list of device info entries for + * a GetDeviceInfo operation. + * The nfsdev_addrandhost field has the fully qualified host domain name + * followed by the network address in XDR. + */ +struct nfsdevice { + LIST_ENTRY(nfsdevice) nfsdev_list; + char nfsdev_deviceid[NFSX_V4DEVICEID]; + uint16_t nfsdev_hostnamelen; + uint16_t nfsdev_addrlen; + char *nfsdev_addr; + char *nfsdev_host; +}; +LIST_HEAD(nfsdevicehead, nfsdevice); + #endif #endif /* _NFS_NFSRVSTATE_H_ */ Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clcomsubs.c ============================================================================== --- projects/pnfs-server/sys/fs/nfsclient/nfs_clcomsubs.c Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfsclient/nfs_clcomsubs.c Tue Apr 12 21:47:37 2016 (r297881) @@ -129,7 +129,8 @@ static int nfs_bigrequest[NFSV41_NPROCS] */ APPLESTATIC void nfscl_reqstart(struct nfsrv_descript *nd, int procnum, struct nfsmount *nmp, - u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp, struct nfsclsession *sep) + u_int8_t *nfhp, int fhlen, u_int32_t **opcntpp, struct nfsclsession *sep, + int vers, int minorvers) { struct mbuf *mb; u_int32_t *tl; @@ -140,11 +141,12 @@ nfscl_reqstart(struct nfsrv_descript *nd * First, fill in some of the fields of nd. */ nd->nd_slotseq = NULL; - if (NFSHASNFSV4(nmp)) { + if ((NFSHASNFSV4(nmp) && vers == 0) || vers == NFS_VER4) { nd->nd_flag = ND_NFSV4 | ND_NFSCL; - if (NFSHASNFSV4N(nmp)) + if ((NFSHASNFSV4N(nmp) && vers == 0) || minorvers == + NFSV41_MINORVERSION) nd->nd_flag |= ND_NFSV41; - } else if (NFSHASNFSV3(nmp)) + } else if ((NFSHASNFSV3(nmp) && vers == 0) || vers == NFS_VER3) nd->nd_flag = ND_NFSV3 | ND_NFSCL; else nd->nd_flag = ND_NFSV2 | ND_NFSCL; @@ -179,7 +181,7 @@ nfscl_reqstart(struct nfsrv_descript *nd else if (procnum == NFSPROC_WRITEDS || procnum == NFSPROC_COMMITDS) /* - * For the special case of a Writeor Commit to + * For the special case of a Write or Commit to * a DS, the opcnt == 3, for Sequence, PutFH, * Write/Commit. */ Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clnode.c ============================================================================== --- projects/pnfs-server/sys/fs/nfsclient/nfs_clnode.c Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfsclient/nfs_clnode.c Tue Apr 12 21:47:37 2016 (r297881) @@ -246,7 +246,7 @@ ncl_inactive(struct vop_inactive_args *a taskqueue_enqueue(taskqueue_thread, &sp->s_task); mtx_lock(&np->n_mtx); } - np->n_flag &= NMODIFIED; + np->n_flag &= (NMODIFIED | NDSCOMMIT); mtx_unlock(&np->n_mtx); return (0); } Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clport.c ============================================================================== --- projects/pnfs-server/sys/fs/nfsclient/nfs_clport.c Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfsclient/nfs_clport.c Tue Apr 12 21:47:37 2016 (r297881) @@ -741,6 +741,8 @@ nfscl_wcc_data(struct nfsrv_descript *nd } } error = nfscl_postop_attr(nd, nap, flagp, stuff); + if (wccflagp != NULL && *flagp == 0) + *wccflagp = 0; } else if ((nd->nd_flag & (ND_NOMOREDATA | ND_NFSV4 | ND_V4WCCATTR)) == (ND_NFSV4 | ND_V4WCCATTR)) { error = nfsv4_loadattr(nd, NULL, &nfsva, NULL, Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 12 21:40:54 2016 (r297880) +++ projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 12 21:47:37 2016 (r297881) @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet6.h" #include +#include #include SYSCTL_DECL(_vfs_nfs); @@ -109,24 +110,49 @@ static int nfsrpc_setaclrpc(vnode_t, str static int nfsrpc_getlayout(struct nfsmount *, vnode_t, struct nfsfh *, int, uint32_t *, nfsv4stateid_t *, uint64_t, struct nfscllayout **, struct ucred *, NFSPROC_T *); -static int nfsrpc_fillsa(struct nfsmount *, struct sockaddr_storage *, - struct nfsclds **, NFSPROC_T *); +static int nfsrpc_fillsa(struct nfsmount *, sa_family_t, struct sockaddr_in *, + struct sockaddr_in6 *, int, int, struct nfsclds **, NFSPROC_T *); static void nfscl_initsessionslots(struct nfsclsession *); -static int nfscl_doflayoutio(vnode_t, struct uio *, int *, int *, int *, +static int nfscl_dofllayoutio(vnode_t, struct uio *, int *, int *, int *, nfsv4stateid_t *, int, struct nfscldevinfo *, struct nfscllayout *, - struct nfsclflayout *, uint64_t, uint64_t, struct ucred *, NFSPROC_T *); -static int nfsrpc_readds(vnode_t, struct uio *, nfsv4stateid_t *, int *, + struct nfsclflayout *, uint64_t, uint64_t, int, struct ucred *, + NFSPROC_T *, struct nfsvattr *, int *); +static int nfscl_dofflayoutio(vnode_t, struct uio *, int *, int *, int *, + nfsv4stateid_t *, int, struct nfscldevinfo *, struct nfscllayout *, + struct nfsclflayout *, uint64_t, uint64_t, int, struct ucred *, + NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_readds41(vnode_t, struct uio *, nfsv4stateid_t *, int *, + struct nfsclds *, uint64_t, int, struct nfsfh *, struct ucred *, + NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_readds3(vnode_t, struct uio *, int *, struct nfsclds *, uint64_t, int, struct nfsfh *, struct ucred *, - NFSPROC_T *); -static int nfsrpc_writeds(vnode_t, struct uio *, int *, int *, + NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_writeds41(vnode_t, struct uio *, int *, int *, nfsv4stateid_t *, struct nfsclds *, uint64_t, int, - struct nfsfh *, int, struct ucred *, NFSPROC_T *); + struct nfsfh *, int, struct ucred *, NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_writeds3(vnode_t, struct uio *, int *, int *, + struct nfsclds *, uint64_t, int, + struct nfsfh *, int, struct ucred *, NFSPROC_T *, struct nfsvattr *, int *); static enum nfsclds_state nfscl_getsameserver(struct nfsmount *, struct nfsclds *, struct nfsclds **); -#ifdef notyet -static int nfsrpc_commitds(vnode_t, uint64_t, int, struct nfsclds *, - struct nfsfh *, struct ucred *, NFSPROC_T *, void *); -#endif +static int nfsrpc_commitds41(vnode_t, uint64_t, int, struct nfsclds *, + struct nfsfh *, struct ucred *, NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_commitds3(vnode_t, uint64_t, int, struct nfsclds *, + struct nfsfh *, struct ucred *, NFSPROC_T *, struct nfsvattr *, int *); +static int nfsrpc_getattrds3(vnode_t, struct nfsclds *, struct nfsfh *, + struct nfsvattr *, struct ucred *, NFSPROC_T *); +static struct nfsclflayout *nfscl_parsefl(struct nfsrv_descript *, uint64_t, + uint64_t, int); +static struct nfsclflayout *nfscl_parseff(struct nfsrv_descript *, uint64_t, + uint64_t, int); +static int nfsrpc_getdeviceinfo(struct nfsmount *, uint8_t *, uint32_t *, + struct nfscldevinfo **, struct ucred *, NFSPROC_T *); +static int nfsv4_getipaddr(struct nfsrv_descript *, struct sockaddr_in *, + struct sockaddr_in6 *, sa_family_t *); +static int nfsrpc_flparseaddr(struct nfsmount *, struct nfsrv_descript *, + struct nfscldevinfo *, int, int *, NFSPROC_T *); +static int nfsrpc_ffparseaddr(struct nfsmount *, struct nfsrv_descript *, + struct nfscldevinfo *, int *, NFSPROC_T *); /* * nfs null call from vfs. @@ -387,7 +413,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vno dp = *dpp; *dpp = NULL; - nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_OPEN, nmp, nfhp, fhlen, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, 5 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid); *tl++ = txdr_unsigned(mode & NFSV4OPEN_ACCESSBOTH); @@ -487,7 +513,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vno default: error = NFSERR_BADXDR; goto nfsmout; - } + }; } else { ndp->nfsdl_flags = NFSCLDL_READ; } @@ -742,7 +768,7 @@ nfsrpc_closerpc(struct nfsrv_descript *n int error; nfscl_reqstart(nd, NFSPROC_CLOSE, nmp, op->nfso_fh, - op->nfso_fhlen, NULL, NULL); + op->nfso_fhlen, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID); *tl++ = txdr_unsigned(op->nfso_own->nfsow_seqid); if (NFSHASNFSV4N(nmp)) @@ -784,7 +810,8 @@ nfsrpc_openconfirm(vnode_t vp, u_int8_t nmp = VFSTONFS(vnode_mount(vp)); if (NFSHASNFSV4N(nmp)) return (0); /* No confirmation for NFSv4.1. */ - nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_OPENCONFIRM, nmp, nfhp, fhlen, NULL, NULL, 0, + 0); NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED + NFSX_STATEID); *tl++ = op->nfso_stateid.seqid; *tl++ = op->nfso_stateid.other[0]; @@ -829,7 +856,6 @@ nfsrpc_setclient(struct nfsmount *nmp, s u_int32_t lease; static u_int32_t rev = 0; struct nfsclds *dsp, *ndsp, *tdsp; - struct in6_addr a6; if (nfsboottime.tv_sec == 0) NFSSETBOOTTIME(nfsboottime); @@ -877,7 +903,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s TAILQ_INSERT_HEAD(&nmp->nm_sess, dsp, nfsclds_list); NFSUNLOCKMNT(nmp); - nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_SETCLIENTID, nmp, NULL, 0, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(nfsboottime.tv_sec); *tl = txdr_unsigned(clp->nfsc_rev); @@ -890,7 +916,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s *tl = txdr_unsigned(NFS_CALLBCKPROG); callblen = strlen(nfsv4_callbackaddr); if (callblen == 0) - cp = nfscl_getmyip(nmp, &a6, &isinet6); + cp = nfscl_getmyip(nmp, &isinet6); if (nfscl_enablecallb && nfs_numnfscbd > 0 && (callblen > 0 || cp != NULL)) { port = htons(nfsv4_cbport); @@ -947,7 +973,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s * and confirm it. */ nfscl_reqstart(nd, NFSPROC_SETCLIENTIDCFRM, nmp, NULL, 0, NULL, - NULL); + NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, 4 * NFSX_UNSIGNED); *tl++ = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[0]; *tl++ = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[1]; @@ -962,7 +988,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s nd->nd_mrep = NULL; if (nd->nd_repstat == 0) { nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, nmp->nm_fh, - nmp->nm_fhsize, NULL, NULL); + nmp->nm_fhsize, NULL, NULL, 0, 0); NFSZERO_ATTRBIT(&attrbits); NFSSETBIT_ATTRBIT(&attrbits, NFSATTRBIT_LEASETIME); (void) nfsrv_putattrbit(nd, &attrbits); @@ -1029,7 +1055,7 @@ nfsrpc_getattrnovp(struct nfsmount *nmp, int error, vers = NFS_VER2; nfsattrbit_t attrbits; - nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, fhp, fhlen, NULL, NULL, 0, 0); if (nd->nd_flag & ND_NFSV4) { vers = NFS_VER4; NFSGETATTR_ATTRBIT(&attrbits); @@ -2086,7 +2112,7 @@ nfsrpc_createv4(vnode_t dvp, char *name, default: error = NFSERR_BADXDR; goto nfsmout; - } + }; } else { dp->nfsdl_flags = NFSCLDL_READ; } @@ -3646,7 +3672,9 @@ nfsrpc_commit(vnode_t vp, u_quad_t offse NFSLOCKMNT(nmp); if (NFSBCMP(nmp->nm_verf, tl, NFSX_VERF)) { NFSBCOPY(tl, nmp->nm_verf, NFSX_VERF); +#ifdef notnow nd->nd_repstat = NFSERR_STALEWRITEVERF; +#endif } NFSUNLOCKMNT(nmp); if (nd->nd_flag & ND_NFSV4) @@ -3698,7 +3726,7 @@ nfsrpc_advlock(vnode_t vp, off_t size, i break; default: return (EINVAL); - } + }; if (start < 0) return (EINVAL); if (fl->l_len != 0) { @@ -3913,7 +3941,7 @@ nfsrpc_locku(struct nfsrv_descript *nd, int error; nfscl_reqstart(nd, NFSPROC_LOCKU, nmp, lp->nfsl_open->nfso_fh, - lp->nfsl_open->nfso_fhlen, NULL, NULL); + lp->nfsl_open->nfso_fhlen, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + 6 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(type); *tl = txdr_unsigned(lp->nfsl_seqid); @@ -3965,7 +3993,7 @@ nfsrpc_lock(struct nfsrv_descript *nd, s int error, size; uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX]; - nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED); if (type == F_RDLCK) *tl++ = txdr_unsigned(NFSV4LOCKT_READ); @@ -4237,7 +4265,7 @@ nfsrpc_renew(struct nfsclclient *clp, st if (nmp == NULL) return (0); nfscl_reqstart(nd, NFSPROC_RENEW, nmp, NULL, 0, NULL, - &dsp->nfsclds_sess); + &dsp->nfsclds_sess, 0, 0); if (!NFSHASNFSV4N(nmp)) { /* NFSv4.1 just uses a Sequence Op and not a Renew. */ NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); @@ -4273,11 +4301,11 @@ nfsrpc_rellockown(struct nfsmount *nmp, if (NFSHASNFSV4N(nmp)) { /* For NFSv4.1, do a FreeStateID. */ nfscl_reqstart(nd, NFSPROC_FREESTATEID, nmp, NULL, 0, NULL, - NULL); + NULL, 0, 0); nfsm_stateidtom(nd, &lp->nfsl_stateid, NFSSTATEID_PUTSTATEID); } else { nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL, - NULL); + NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); *tl++ = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[0]; *tl = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[1]; @@ -4309,7 +4337,8 @@ nfsrpc_getdirpath(struct nfsmount *nmp, int error, cnt, len, setnil; u_int32_t *opcntp; - nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp, NULL); + nfscl_reqstart(nd, NFSPROC_PUTROOTFH, nmp, NULL, 0, &opcntp, NULL, 0, + 0); cp = dirpath; cnt = 0; do { @@ -4376,7 +4405,7 @@ nfsrpc_delegreturn(struct nfscldeleg *dp int error; nfscl_reqstart(nd, NFSPROC_DELEGRETURN, nmp, dp->nfsdl_fh, - dp->nfsdl_fhlen, NULL, NULL); + dp->nfsdl_fhlen, NULL, NULL, 0, 0); NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID); if (NFSHASNFSV4N(nmp)) *tl++ = 0; @@ -4486,7 +4515,7 @@ nfsrpc_exchangeid(struct nfsmount *nmp, int error, len; *dspp = NULL; - nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_EXCHANGEID, nmp, NULL, 0, NULL, NULL, 0, 0); NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED); *tl++ = txdr_unsigned(nfsboottime.tv_sec); /* Client owner */ *tl = txdr_unsigned(clp->nfsc_rev); @@ -4568,7 +4597,8 @@ nfsrpc_createsession(struct nfsmount *nm struct nfsrv_descript *nd = &nfsd; int error, irdcnt; - nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_CREATESESSION, nmp, NULL, 0, NULL, NULL, 0, + 0); NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED); *tl++ = sep->nfsess_clientid.lval[0]; *tl++ = sep->nfsess_clientid.lval[1]; @@ -4662,7 +4692,8 @@ nfsrpc_destroysession(struct nfsmount *n struct nfsrv_descript *nd = &nfsd; int error; - nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_DESTROYSESSION, nmp, NULL, 0, NULL, NULL, 0, + 0); NFSM_BUILD(tl, uint32_t *, NFSX_V4SESSIONID); bcopy(NFSMNT_MDSSESSION(nmp)->nfsess_sessionid, tl, NFSX_V4SESSIONID); nd->nd_flag |= ND_USEGSSNAME; @@ -4687,7 +4718,8 @@ nfsrpc_destroyclient(struct nfsmount *nm struct nfsrv_descript *nd = &nfsd; int error; - nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_DESTROYCLIENT, nmp, NULL, 0, NULL, NULL, 0, + 0); NFSM_BUILD(tl, uint32_t *, 2 * NFSX_UNSIGNED); *tl++ = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[0]; *tl = NFSMNT_MDSSESSION(nmp)->nfsess_clientid.lval[1]; @@ -4712,19 +4744,22 @@ nfsrpc_layoutget(struct nfsmount *nmp, u { uint32_t *tl; struct nfsrv_descript nfsd, *nd = &nfsd; - struct nfsfh *nfhp; struct nfsclflayout *flp, *prevflp, *tflp; - int cnt, error, gotiomode, fhcnt, nfhlen, i, j; - uint8_t *cp; - uint64_t retlen; + int cnt, error, gotiomode, i; + int retiomode, ltyp; + uint64_t off, retlen; flp = NULL; gotiomode = -1; - nfscl_reqstart(nd, NFSPROC_LAYOUTGET, nmp, fhp, fhlen, NULL, NULL); + nfscl_reqstart(nd, NFSPROC_LAYOUTGET, nmp, fhp, fhlen, NULL, NULL, 0, + 0); NFSM_BUILD(tl, uint32_t *, 4 * NFSX_UNSIGNED + 3 * NFSX_HYPER + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 12 22:07:35 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B4E79B0DFA2 for ; Tue, 12 Apr 2016 22:07:35 +0000 (UTC) (envelope-from asomers@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 mx1.freebsd.org (Postfix) with ESMTPS id 8091215A0; Tue, 12 Apr 2016 22:07:35 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CM7YiN063133; Tue, 12 Apr 2016 22:07:34 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CM7XU0063124; Tue, 12 Apr 2016 22:07:33 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201604122207.u3CM7XU0063124@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 12 Apr 2016 22:07:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297882 - in projects/zfsd/head/tests/sys/cddl/zfs: . include tests/cache tests/cachefile tests/hotspare tests/zfsd X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 22:07:35 -0000 Author: asomers Date: Tue Apr 12 22:07:33 2016 New Revision: 297882 URL: https://svnweb.freebsd.org/changeset/base/297882 Log: Fix several intermittent ZFS tests. tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Fix several intermittent tests. These tests all disable a disk's phy and wait for the disk to enter the REMOVED state. However, sometimes the disk enters the UNAVAIL state instead. I don't know why. The fix is to accept UNAVAIL disks as well as REMOVED disks in wait_for_pool_removal, because it doesn't make a difference to the logic under test. tests/sys/cddl/zfs/include/libtest.kshlib Remove floating point variables. Use 64-bit ints instead. Fix the raidz_dva_to_block_addr function. It had multiple errors: * Used floating point * The 4MB offset was not adjusted for ashift * Unnecessarily complicated rounding procedure * Its caller, corrupt_file, was assuming ashift=9 Fix occasional failures cleaning up GPT partitions. The error was EBUSY; debug code caught the geom provider with an active reader (r1w0e0). Since the test case is single threaded, it is speculated that another process outside of Kyua was probing the device while the test case was attempting to delete the partition table. Added a retry wipe_partition_table()'s gpart destroy command. tests/sys/cddl/zfs/Makefile tests/sys/cddl/zfs/include/Makefile tests/sys/cddl/zfs/include/libtest_test.kshlib Add unit tests for raidz_dva_to_block_addr tests/sys/cddl/zfs/tests/cachefile/cachefile_003_pos.ksh tests/sys/cddl/zfs/tests/cache/cache_008_neg.ksh Always use "-f" when destroying pools except when testing the functionality of the non -f command. Fixes intermittency. tests/sys/cddl/zfs/tests/hotspare/hotspare_scrub_002_pos.ksh After scrubbing the pool with spare attached, detach the original device, clear errors, and scrub again. Assert that no new errors are found. I don't know why, but on FreeBSD 11 "zpool scrub" will sometimes find some errors on the spare device even though it doesn't find them all. Sponsored by: Spectra Logic Corp Added: projects/zfsd/head/tests/sys/cddl/zfs/include/libtest_test.sh (contents, props changed) Modified: projects/zfsd/head/tests/sys/cddl/zfs/Makefile projects/zfsd/head/tests/sys/cddl/zfs/include/Makefile projects/zfsd/head/tests/sys/cddl/zfs/include/libtest.kshlib projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_008_neg.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_003_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_scrub_002_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Modified: projects/zfsd/head/tests/sys/cddl/zfs/Makefile ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/Makefile Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/Makefile Tue Apr 12 22:07:33 2016 (r297882) @@ -4,9 +4,8 @@ TESTSDIR= ${TESTSBASE}/sys/cddl/zfs -TESTS_SUBDIRS+= tests +TESTS_SUBDIRS+= tests include SUBDIR+= bin -SUBDIR+= include .include Modified: projects/zfsd/head/tests/sys/cddl/zfs/include/Makefile ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/include/Makefile Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/include/Makefile Tue Apr 12 22:07:33 2016 (r297882) @@ -24,4 +24,6 @@ CLEANFILES+= default.cfg default.cfg: default.cfg.in sed "s:%%STFSUITEDIR%%:${STFSUITEDIR}:" ${.ALLSRC} > ${.TARGET} -.include +TESTSDIR=${TESTSBASE}/sys/cddl/zfs/include +ATF_TESTS_KSH93+= libtest_test +.include Modified: projects/zfsd/head/tests/sys/cddl/zfs/include/libtest.kshlib ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/include/libtest.kshlib Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/include/libtest.kshlib Tue Apr 12 22:07:33 2016 (r297882) @@ -631,7 +631,7 @@ function wipe_partition_table #/dev/null 2>&1; then - log_must $GPART destroy -F $diskname + wait_for 5 1 $GPART destroy -F $diskname else log_note "No GPT partitions detected on $diskname" fi @@ -1336,17 +1336,18 @@ function wait_for # timeout dt # Verify a given disk is online or offline # # Return 0 is pool/disk matches expected state, 1 otherwise +# stateexpr is a regex like ONLINE or REMOVED|UNAVAIL # -function check_state # pool disk state{online,offline} +function check_state # pool disk stateexpr { typeset pool=$1 typeset disk=${2#/dev/dsk/} disk=${disk#/dev/rdsk/} disk=${disk#/dev/} - typeset state=$3 + typeset stateexpr=$3 $ZPOOL status -v $pool | grep "$disk" \ - | grep -i "$state" > /dev/null 2>&1 + | egrep -i "$stateexpr" > /dev/null 2>&1 return $? } @@ -3212,32 +3213,24 @@ function dva_to_block_addr # dva # # Convert a RAIDZ DVA into a physical block address. This has the same -# output as dva_to_block_addr, but is more complicated due to RAIDZ. ashift -# is normally always 9, but RAIDZ uses the actual tvd ashift instead. -# Furthermore, the number of vdevs changes the actual block for each device. -# This is also tricky because ksh93 requires special effort to round up. +# output as dva_to_block_addr (number of blocks from beginning of device), but +# is more complicated due to RAIDZ. ashift is normally always 9, but RAIDZ +# uses the actual tvd ashift instead. Furthermore, the number of vdevs changes +# the actual block for each device. # function raidz_dva_to_block_addr # dva ncols ashift { typeset dva=$1 - typeset -F ncols="${2}.0" - typeset -i ashift=$3 + typeset -i ncols=$2 + typeset -i ashift=$3 typeset -i offset=0x$(echo $dva | cut -f2 -d:) (( offset >>= ashift )) - # Calculate the floating point offset after dividing by #columns. - typeset -F foff=$offset - (( foff /= ncols )) - - # Convert the calculation to integer, then figure out if the - # remainder requires rounding up the integer calculation. - typeset -i ioff=$foff - (( foff -= ioff )) - [[ $foff -ge 0.5 ]] && (( ioff += 1 )) + typeset -i ioff=$(( (offset + ncols - 1) / ncols )) # Now add the front 4MB and return. - (( ioff += 8192 )) + (( ioff += ( 4194304 >> $ashift ) )) echo "$ioff" } @@ -3313,10 +3306,10 @@ function vdevs_for_tvd # pool tvd } # -# Get a vdev path & offset for a given pool/dataset and DVA. +# Get a vdev path, ashift & offset for a given pool/dataset and DVA. # If desired, can also select the toplevel vdev child number. # -function dva_to_vdev_off # pool/dataset dva [leaf_vdev_num] +function dva_to_vdev_ashift_off # pool/dataset dva [leaf_vdev_num] { typeset poollike=$1 typeset dva=$2 @@ -3343,10 +3336,11 @@ function dva_to_vdev_off # pool/dataset off=$(raidz_dva_to_block_addr $dva $nchildren $ashift) ;; *) + ashift=9 off=$(dva_to_block_addr $dva) ;; esac - echo "${lvd}:${off}" + echo "${lvd}:${ashift}:${off}" } # @@ -3357,14 +3351,14 @@ function file_dva # dataset filepath [le typeset dataset=$1 typeset filepath=$2 typeset -i level=$3 - typeset -F offset=$4 + typeset -i offset=$4 typeset -i dva_num=$5 # A lot of these numbers can be larger than 32-bit, so we have to # use floats to manage them... :( - typeset -F blksz=0 + typeset -i blksz=0 typeset -i blknum=0 - typeset -F startoff + typeset -i startoff # The inner match is for 'DVA[0]=<0:1b412600:200>', in which the # text surrounding the actual DVA is a fixed size with 8 characters @@ -3401,7 +3395,7 @@ function file_dva # dataset filepath [le # Calculate the actual desired block starting offset. if (( level > 0 )); then typeset -i nbps_per_level - typeset -F indsz + typeset -i indsz typeset -i i=0 (( nbps_per_level = iblksz / 128 )) @@ -3419,7 +3413,7 @@ function file_dva # dataset filepath [le fi typeset lineoffstr=$(echo $line | cut -d " " -f1) - typeset -F lineoff=$(printf "%d" "0x${lineoffstr}") + typeset -i lineoff=$(printf "%d" "0x${lineoffstr}") typeset dva="$(echo $line | cut -d " " -f2)" log_debug "str='$lineoffstr' lineoff='$lineoff' dva='$dva'" if [[ -n "$dva" ]] && (( lineoff == startoff )); then @@ -3443,12 +3437,14 @@ function corrupt_file # dataset filepath dva=$(file_dva $dataset $filepath) [ $? -ne 0 ] && log_fail "ERROR: Can't find file $filepath on $dataset" - vdoff=$(dva_to_vdev_off $dataset $dva $leaf_vdev_num) + vdoff=$(dva_to_vdev_ashift_off $dataset $dva $leaf_vdev_num) vdev=$(echo $vdoff | cut -d: -f1) - off=$(echo $vdoff | cut -d: -f2) + ashift=$(echo $vdoff | cut -d: -f2) + off=$(echo $vdoff | cut -d: -f3) + blocksize=$(( 1 << $ashift )) - log_note "Corrupting ${dataset}'s $filepath on $vdev at DVA $dva" - log_must $DD if=/dev/urandom of=$vdev seek=$off count=1 conv=notrunc + log_note "Corrupting ${dataset}'s $filepath on $vdev at DVA $dva with ashift $ashift" + log_must $DD if=/dev/urandom bs=$blocksize of=$vdev seek=$off count=1 conv=notrunc } # Added: projects/zfsd/head/tests/sys/cddl/zfs/include/libtest_test.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/zfsd/head/tests/sys/cddl/zfs/include/libtest_test.sh Tue Apr 12 22:07:33 2016 (r297882) @@ -0,0 +1,42 @@ +# 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 2016 Spectra Logic. All rights reserved. +# Use is subject to license terms. +# + +atf_test_case raidz_dva_to_block_addr +raidz_dva_to_block_addr_head() +{ + atf_set "descr" "Unit tests for raidz_dva_to_block_addr" +} +raidz_dva_to_block_addr_body() +{ + . $(atf_get_srcdir)/default.cfg + + # These test cases were determined by hand on an actual filesystem + atf_check_equal 3211 `raidz_dva_to_block_addr 0:3f40000:4000 3 13` +} + +atf_init_test_cases() +{ + atf_add_test_case raidz_dva_to_block_addr +} Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_008_neg.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_008_neg.ksh Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cache/cache_008_neg.ksh Tue Apr 12 22:07:33 2016 (r297882) @@ -71,7 +71,7 @@ do log_mustnot verify_cache_device \ $TESTPOOL $ldev 'ONLINE' $cachetype - log_must $ZPOOL destroy $TESTPOOL + log_must $ZPOOL destroy -f $TESTPOOL done done Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_003_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_003_pos.ksh Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/cachefile/cachefile_003_pos.ksh Tue Apr 12 22:07:33 2016 (r297882) @@ -103,7 +103,7 @@ while (( i < ${#opts[*]} )); do log_fail "cachefile property not set as expected. " \ "Expect: ${opts[((i+1))]}, Current: $PROP" fi - log_must $ZPOOL destroy $TESTPOOL + log_must $ZPOOL destroy -f $TESTPOOL (( i = i + 2 )) done Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_scrub_002_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_scrub_002_pos.ksh Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/hotspare/hotspare_scrub_002_pos.ksh Tue Apr 12 22:07:33 2016 (r297882) @@ -97,6 +97,19 @@ function verify_assertion # odev [[ $(get_cksum $TESTPOOL "spare-0") > 0 ]] spare0_errors=$? log_must [ $sdev_errors -o $spare0_errors ] + + # Now clear the old errors, remove the original device and scrub again. + # No new errors should be found, because the scrub should've found and + # fixed all errors + log_must $ZPOOL clear $TESTPOOL + log_must $ZPOOL detach $TESTPOOL $odev + $ZPOOL scrub $TESTPOOL + while is_pool_scrubbing $TESTPOOL ; do + $SLEEP 2 + done + if [ $(get_cksum $TESTPOOL $sdev) -ne 0 ]; then + log_fail "ERROR: Scrub missed cksum errors on a spare vdev" + fi } log_assert "'zpool scrub' scans spare vdevs" Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd.kshlib Tue Apr 12 22:07:33 2016 (r297882) @@ -60,7 +60,7 @@ function wait_for_pool_dev_state_change function wait_for_pool_removal { typeset -i timeout=$1 - wait_for_pool_dev_state_change $timeout $REMOVAL_DISK REMOVED + wait_for_pool_dev_state_change $timeout $REMOVAL_DISK "REMOVED|UNAVAIL" } function wait_until_scrubbed @@ -122,6 +122,7 @@ function do_autoreplace check_state $TESTPOOL $SPARE_DISK "ONLINE" && break $SLEEP 6 done + zpool status $TESTPOOL log_must check_state $TESTPOOL "$SPARE_DISK" "ONLINE" wait_until_resilvered Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Tue Apr 12 21:47:37 2016 (r297881) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/zfsd/zfsd_replace_003_pos.ksh Tue Apr 12 22:07:33 2016 (r297882) @@ -69,7 +69,7 @@ function remove_disk [ -n "$FOUNDDISK" ] && log_fail "Disk \"$DISK\" was not removed" # Check to make sure ZFS sees the disk as removed - wait_for_pool_dev_state_change 20 $DISK REMOVED + wait_for_pool_dev_state_change 20 $DISK "REMOVED|UNAVAIL" } # arg1: disk's old devname From owner-svn-src-projects@freebsd.org Tue Apr 12 22:58:42 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 82521B0D8DC for ; Tue, 12 Apr 2016 22:58:42 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 1F3491B7D; Tue, 12 Apr 2016 22:58:42 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CMwfL0079762; Tue, 12 Apr 2016 22:58:41 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CMweir079752; Tue, 12 Apr 2016 22:58:40 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604122258.u3CMweir079752@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 12 Apr 2016 22:58:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297887 - projects/pnfs-server/sys/fs/fuse X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 22:58:42 -0000 Author: rmacklem Date: Tue Apr 12 22:58:40 2016 New Revision: 297887 URL: https://svnweb.freebsd.org/changeset/base/297887 Log: Check in the fuse changes that allow it to export the file system via NFS. Modified: projects/pnfs-server/sys/fs/fuse/fuse_file.c projects/pnfs-server/sys/fs/fuse/fuse_file.h projects/pnfs-server/sys/fs/fuse/fuse_internal.c projects/pnfs-server/sys/fs/fuse/fuse_internal.h projects/pnfs-server/sys/fs/fuse/fuse_io.c projects/pnfs-server/sys/fs/fuse/fuse_ipc.c projects/pnfs-server/sys/fs/fuse/fuse_node.c projects/pnfs-server/sys/fs/fuse/fuse_node.h projects/pnfs-server/sys/fs/fuse/fuse_vfsops.c projects/pnfs-server/sys/fs/fuse/fuse_vnops.c Modified: projects/pnfs-server/sys/fs/fuse/fuse_file.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_file.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_file.c Tue Apr 12 22:58:40 2016 (r297887) @@ -88,6 +88,8 @@ static int fuse_fh_count = 0; SYSCTL_INT(_vfs_fuse, OID_AUTO, filehandle_count, CTLFLAG_RD, &fuse_fh_count, 0, ""); +extern int fuse_force_directio; + int fuse_filehandle_open(struct vnode *vp, fufh_type_t fufh_type, @@ -141,7 +143,11 @@ fuse_filehandle_open(struct vnode *vp, foo = fdi.answ; fuse_filehandle_init(vp, fufh_type, fufhp, foo->fh); - fuse_vnode_open(vp, foo->open_flags, td); + + if (fufh_type == FUFH_WRONLY || fuse_force_directio > 0) + fuse_vnode_open(vp, foo->open_flags | FOPEN_DIRECT_IO, td); + else + fuse_vnode_open(vp, foo->open_flags, td); out: fdisp_destroy(&fdi); @@ -206,6 +212,28 @@ fuse_filehandle_valid(struct vnode *vp, return FUFH_IS_VALID(fufh); } +/* + * Check for a valid file handle, first the type requested, but if that + * isn't valid, try for FUFH_RDWR. + * Return the FUFH type that is valid or FUFH_INVALID if there are none. + * This is a variant of fuse_filehandle_vaild() analygous to + * fuse_filehandle_getrw(). + */ +fufh_type_t +fuse_filehandle_validrw(struct vnode *vp, fufh_type_t fufh_type) +{ + struct fuse_vnode_data *fvdat = VTOFUD(vp); + struct fuse_filehandle *fufh; + + fufh = &fvdat->fufh[fufh_type]; + if (FUFH_IS_VALID(fufh) != 0) + return (fufh_type); + fufh = &fvdat->fufh[FUFH_RDWR]; + if (FUFH_IS_VALID(fufh) != 0) + return (FUFH_RDWR); + return (FUFH_INVALID); +} + int fuse_filehandle_get(struct vnode *vp, fufh_type_t fufh_type, struct fuse_filehandle **fufhp) Modified: projects/pnfs-server/sys/fs/fuse/fuse_file.h ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_file.h Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_file.h Tue Apr 12 22:58:40 2016 (r297887) @@ -137,6 +137,7 @@ fuse_filehandle_xlate_to_oflags(fufh_typ } int fuse_filehandle_valid(struct vnode *vp, fufh_type_t fufh_type); +fufh_type_t fuse_filehandle_validrw(struct vnode *vp, fufh_type_t fufh_type); int fuse_filehandle_get(struct vnode *vp, fufh_type_t fufh_type, struct fuse_filehandle **fufhp); int fuse_filehandle_getrw(struct vnode *vp, fufh_type_t fufh_type, Modified: projects/pnfs-server/sys/fs/fuse/fuse_internal.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_internal.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_internal.c Tue Apr 12 22:58:40 2016 (r297887) @@ -251,16 +251,19 @@ fuse_internal_fsync(struct vnode *vp, int fuse_internal_readdir(struct vnode *vp, struct uio *uio, + off_t startoff, struct fuse_filehandle *fufh, - struct fuse_iov *cookediov) + struct fuse_iov *cookediov, + int *ncookies, + u_long *cookies) { int err = 0; struct fuse_dispatcher fdi; struct fuse_read_in *fri; + int fnd_start; - if (uio_resid(uio) == 0) { - return 0; - } + if (uio_resid(uio) == 0) + return (0); fdisp_init(&fdi, 0); /* @@ -268,8 +271,18 @@ fuse_internal_readdir(struct vnode *vp, * I/O). */ + /* + * fnd_start is set non-zero once the offset in the directory gets + * to the startoff. This is done because directories must be read + * from the beginning (offset == 0) when fuse_vnop_readdir() needs + * to do an open of the directory. + * If it is not set non-zero here, it will be set non-zero in + * fuse_internal_readdir_processdata() when uio_offset == startoff. + */ + fnd_start = 0; + if (uio->uio_offset == startoff) + fnd_start = 1; while (uio_resid(uio) > 0) { - fdi.iosize = sizeof(*fri); fdisp_make_vp(&fdi, FUSE_READDIR, vp, NULL, NULL); @@ -277,53 +290,67 @@ fuse_internal_readdir(struct vnode *vp, fri->fh = fufh->fh_id; fri->offset = uio_offset(uio); fri->size = min(uio_resid(uio), FUSE_DEFAULT_IOSIZE); - /* mp->max_read */ - if ((err = fdisp_wait_answ(&fdi))) { + if ((err = fdisp_wait_answ(&fdi)) != 0) break; - } - if ((err = fuse_internal_readdir_processdata(uio, fri->size, fdi.answ, - fdi.iosize, cookediov))) { + if ((err = fuse_internal_readdir_processdata(uio, startoff, + &fnd_start, fri->size, fdi.answ, fdi.iosize, cookediov, + ncookies, &cookies)) != 0) break; - } } fdisp_destroy(&fdi); return ((err == -1) ? 0 : err); } +/* + * Return -1 to indicate that this readdir is finished, 0 if it copied + * all the directory data read in and it may be possible to read more + * and greater than 0 for a failure. + */ int fuse_internal_readdir_processdata(struct uio *uio, + off_t startoff, + int *fnd_start, size_t reqsize, void *buf, size_t bufsize, - void *param) + struct fuse_iov *cookediov, + int *ncookies, + u_long **cookiesp) { int err = 0; - int cou = 0; int bytesavail; size_t freclen; - struct dirent *de; struct fuse_dirent *fudge; - struct fuse_iov *cookediov = param; + u_long *cookies; + cookies = *cookiesp; if (bufsize < FUSE_NAME_OFFSET) { - return -1; + return (-1); } for (;;) { if (bufsize < FUSE_NAME_OFFSET) { - err = -1; + /* + * Return 0 since we have done at least one loop + * iteration and we are at the end of the buffer. + * As such, we might be able to read more directory + * data. + */ + err = 0; break; } fudge = (struct fuse_dirent *)buf; freclen = FUSE_DIRENT_SIZE(fudge); - cou++; - if (bufsize < freclen) { - err = ((cou == 1) ? -1 : 0); + /* + * This indicates a partial directory entry at the + * end of the directory data. + */ + err = -1; break; } #ifdef ZERO_PAD_INCOMPLETE_BUFS @@ -333,40 +360,60 @@ fuse_internal_readdir_processdata(struct } #endif - if (!fudge->namelen || fudge->namelen > MAXNAMLEN) { + if (fudge->namelen == 0 || fudge->namelen > MAXNAMLEN) { err = EINVAL; break; } - bytesavail = GENERIC_DIRSIZ((struct pseudo_dirent *) - &fudge->namelen); + /* bytesavail is the size of the BSD dirent. */ + bytesavail = GENERIC_DIRSIZ((struct pseudo_dirent *) + &fudge->namelen); if (bytesavail > uio_resid(uio)) { + /* Out of space for the dir so we are done. */ err = -1; break; } - fiov_refresh(cookediov); - fiov_adjust(cookediov, bytesavail); - de = (struct dirent *)cookediov->base; - de->d_fileno = fudge->ino; /* XXX: truncation */ - de->d_reclen = bytesavail; - de->d_type = fudge->type; - de->d_namlen = fudge->namelen; - memcpy((char *)cookediov->base + sizeof(struct dirent) - - MAXNAMLEN - 1, - (char *)buf + FUSE_NAME_OFFSET, fudge->namelen); - ((char *)cookediov->base)[bytesavail] = '\0'; + /* + * Don't start to copy the directory entries out until + * the requested offset in the directory is found. + */ + if (*fnd_start != 0) { + fiov_refresh(cookediov); + fiov_adjust(cookediov, bytesavail); + de = (struct dirent *)cookediov->base; + de->d_fileno = fudge->ino; /* XXX: truncation */ + de->d_reclen = bytesavail; + de->d_type = fudge->type; + de->d_namlen = fudge->namelen; + memcpy((char *)cookediov->base + + sizeof(struct dirent) - MAXNAMLEN - 1, + (char *)buf + FUSE_NAME_OFFSET, fudge->namelen); + ((char *)cookediov->base)[bytesavail] = '\0'; + + err = uiomove(cookediov->base, cookediov->len, uio); + if (err != 0) + break; + if (cookies != NULL) { + if (*ncookies == 0) { + err = -1; + break; + } + *cookies = fudge->off; + cookies++; + (*ncookies)--; + } + } else if (startoff == fudge->off) + *fnd_start = 1; - err = uiomove(cookediov->base, cookediov->len, uio); - if (err) { - break; - } + /* Move to the next fuse directory entry. */ + uio_setoffset(uio, fudge->off); buf = (char *)buf + freclen; bufsize -= freclen; - uio_setoffset(uio, fudge->off); } + *cookiesp = cookies; - return err; + return (err); } /* remove */ Modified: projects/pnfs-server/sys/fs/fuse/fuse_internal.h ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_internal.h Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_internal.h Tue Apr 12 22:58:40 2016 (r297887) @@ -261,15 +261,22 @@ struct pseudo_dirent { int fuse_internal_readdir(struct vnode *vp, struct uio *uio, + off_t startoff, struct fuse_filehandle *fufh, - struct fuse_iov *cookediov); + struct fuse_iov *cookediov, + int *ncookies, + u_long *cookies); int fuse_internal_readdir_processdata(struct uio *uio, + off_t startoff, + int *fnd_start, size_t reqsize, void *buf, size_t bufsize, - void *param); + struct fuse_iov *cookediov, + int *ncookies, + u_long **cookies); /* remove */ Modified: projects/pnfs-server/sys/fs/fuse/fuse_io.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_io.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_io.c Tue Apr 12 22:58:40 2016 (r297887) @@ -119,15 +119,10 @@ fuse_io_dispatch(struct vnode *vp, struc { struct fuse_filehandle *fufh; int err, directio; + fufh_type_t fufhtype; MPASS(vp->v_type == VREG || vp->v_type == VDIR); - err = fuse_filehandle_getrw(vp, - (uio->uio_rw == UIO_READ) ? FUFH_RDONLY : FUFH_WRONLY, &fufh); - if (err) { - printf("FUSE: io dispatch: filehandles are closed\n"); - return err; - } /* * Ideally, when the daemon asks for direct io at open time, the * standard file flag should be set according to this, so that would @@ -140,6 +135,18 @@ fuse_io_dispatch(struct vnode *vp, struc */ directio = (ioflag & IO_DIRECT) || !fsess_opt_datacache(vnode_mount(vp)); + if (uio->uio_rw == UIO_READ) + fufhtype = FUFH_RDONLY; + else if (directio != 0) + fufhtype = FUFH_WRONLY; + else + /* Buffer cache writing might read a block in. */ + fufhtype = FUFH_RDWR; + err = fuse_filehandle_getrw(vp, fufhtype, &fufh); + if (err) { + printf("FUSE: io dispatch: filehandles are closed\n"); + return err; + } switch (uio->uio_rw) { case UIO_READ: if (directio) { Modified: projects/pnfs-server/sys/fs/fuse/fuse_ipc.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_ipc.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_ipc.c Tue Apr 12 22:58:40 2016 (r297887) @@ -549,6 +549,7 @@ fuse_body_audit(struct fuse_ticket *ftic { int err = 0; enum fuse_opcode opcode; + struct fuse_getxattr_in *fgin; debug_printf("ftick=%p, blen = %zu\n", ftick, blen); @@ -636,23 +637,23 @@ fuse_body_audit(struct fuse_ticket *ftic break; case FUSE_SETXATTR: - panic("FUSE_SETXATTR implementor has forgotten to define a" - " response body format check"); + err = (blen == 0) ? 0 : EINVAL; break; case FUSE_GETXATTR: - panic("FUSE_GETXATTR implementor has forgotten to define a" - " response body format check"); - break; - case FUSE_LISTXATTR: - panic("FUSE_LISTXATTR implementor has forgotten to define a" - " response body format check"); + fgin = (struct fuse_getxattr_in *) + ((char *)ftick->tk_ms_fiov.base + + sizeof(struct fuse_in_header)); + if (fgin->size == 0) + err = (blen == sizeof(struct fuse_getxattr_out)) ? 0 : + EINVAL; + else + err = (blen <= fgin->size) ? 0 : EINVAL; break; case FUSE_REMOVEXATTR: - panic("FUSE_REMOVEXATTR implementor has forgotten to define a" - " response body format check"); + err = (blen == 0) ? 0 : EINVAL; break; case FUSE_FLUSH: @@ -687,15 +688,15 @@ fuse_body_audit(struct fuse_ticket *ftic break; case FUSE_GETLK: - panic("FUSE: no response body format check for FUSE_GETLK"); + err = (blen == sizeof(struct fuse_lk_out)) ? 0 : EINVAL; break; case FUSE_SETLK: - panic("FUSE: no response body format check for FUSE_SETLK"); + err = (blen == 0) ? 0 : EINVAL; break; case FUSE_SETLKW: - panic("FUSE: no response body format check for FUSE_SETLKW"); + err = (blen == 0) ? 0 : EINVAL; break; case FUSE_ACCESS: Modified: projects/pnfs-server/sys/fs/fuse/fuse_node.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_node.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_node.c Tue Apr 12 22:58:40 2016 (r297887) @@ -169,7 +169,7 @@ fuse_vnode_hash(uint64_t id) return (fnv_32_buf(&id, sizeof(id), FNV1_32_INIT)); } -static int +int fuse_vnode_alloc(struct mount *mp, struct thread *td, uint64_t nodeid, @@ -289,7 +289,16 @@ fuse_vnode_open(struct vnode *vp, int32_ * XXXIP: Handle fd based DIRECT_IO */ if (fuse_open_flags & FOPEN_DIRECT_IO) { - VTOFUD(vp)->flag |= FN_DIRECTIO; + ASSERT_VOP_ELOCKED(vp, __func__); + /* + * If switching from buffer cache I/O to direct I/O, the + * buffer cache blocks must be invalidated to avoid accessing + * stale data in the buffer cache. + */ + if ((VTOFUD(vp)->flag & FN_DIRECTIO) == 0) { + VTOFUD(vp)->flag |= FN_DIRECTIO; + fuse_io_invalbuf(vp, td); + } } else { VTOFUD(vp)->flag &= ~FN_DIRECTIO; } Modified: projects/pnfs-server/sys/fs/fuse/fuse_node.h ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_node.h Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_node.h Tue Apr 12 22:58:40 2016 (r297887) @@ -111,6 +111,12 @@ fuse_vnode_setparent(struct vnode *vp, s void fuse_vnode_destroy(struct vnode *vp); +int fuse_vnode_alloc(struct mount *mp, + struct thread *td, + uint64_t nodeid, + enum vtype vtyp, + struct vnode **vpp); + int fuse_vnode_get(struct mount *mp, uint64_t nodeid, struct vnode *dvp, @@ -128,4 +134,21 @@ int fuse_vnode_savesize(struct vnode *vp int fuse_vnode_setsize(struct vnode *vp, struct ucred *cred, off_t newsize); +/* + * Since making a structure that is a file system specific "struct fid" + * is too big, due to alignment issues, this structure is copied into the + * fid_data field. fid_data0 in "struct fid" is used for the vnode type. + * Until MAXFIDSZ is increased, only the first half of this structure will + * fit in fid_data. This is fine for GlusterFS, since it always sets the + * "generation" to 0. As such, the rest is #ifdef notyet. + */ +struct fuse_fid_data { + uint64_t ffid_nid; + uint64_t ffid_parent_nid; +#ifdef notyet + uint64_t ffid_nid_gen; + uint64_t ffid_parent_nid_gen; +#endif +}; + #endif /* _FUSE_NODE_H_ */ Modified: projects/pnfs-server/sys/fs/fuse/fuse_vfsops.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_vfsops.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_vfsops.c Tue Apr 12 22:58:40 2016 (r297887) @@ -105,12 +105,14 @@ static vfs_mount_t fuse_vfsop_mount; static vfs_unmount_t fuse_vfsop_unmount; static vfs_root_t fuse_vfsop_root; static vfs_statfs_t fuse_vfsop_statfs; +static vfs_fhtovp_t fuse_vfsop_fhtovp; struct vfsops fuse_vfsops = { .vfs_mount = fuse_vfsop_mount, .vfs_unmount = fuse_vfsop_unmount, .vfs_root = fuse_vfsop_root, .vfs_statfs = fuse_vfsop_statfs, + .vfs_fhtovp = fuse_vfsop_fhtovp, }; SYSCTL_INT(_vfs_fuse, OID_AUTO, init_backgrounded, CTLFLAG_RD, @@ -232,8 +234,12 @@ fuse_vfsop_mount(struct mount *mp) fuse_trace_printf_vfsop(); + /* + * Allow MNT_UPDATE only so the mountd can set exports on the file + * system. + */ if (mp->mnt_flag & MNT_UPDATE) - return EOPNOTSUPP; + return (0); MNT_ILOCK(mp); mp->mnt_flag |= MNT_SYNCHRONOUS; @@ -532,3 +538,35 @@ fake: return 0; } + +/* + * Translate a file handle into a vnode. fid_data0 is the v_type and + * fid_data is "struct fuse_fid" memcpy()'d so that alignment doesn't + * make the structure too big. + * There is no "generation" field in the file handle. GlusterFS never + * sets it. I don't know if other fuse filesystems do set it, but there + * is no space for it in fhandle_t. + */ +static int +fuse_vfsop_fhtovp(struct mount *mp, struct fid *fhp, int flags, + struct vnode **vpp) +{ + struct fuse_fid_data ffid; + enum vtype vtyp; + int err; + + if (fhp->fid_len != offsetof(struct fid, fid_data) + + sizeof(struct fuse_fid_data)) + return (ESTALE); + vtyp = (enum vtype)fhp->fid_data0; + if (vtyp != VREG && vtyp != VDIR && vtyp != VLNK) + return (ESTALE); + memcpy(&ffid, fhp->fid_data, sizeof(ffid)); + err = fuse_vnode_alloc(mp, curthread, ffid.ffid_nid, vtyp, vpp); + if (err != 0) + return (ESTALE); + if (vtyp == VDIR) + VTOFUD(*vpp)->parent_nid = ffid.ffid_parent_nid; + return (0); +} + Modified: projects/pnfs-server/sys/fs/fuse/fuse_vnops.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_vnops.c Tue Apr 12 22:55:47 2016 (r297886) +++ projects/pnfs-server/sys/fs/fuse/fuse_vnops.c Tue Apr 12 22:58:40 2016 (r297887) @@ -82,6 +82,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include @@ -133,6 +135,12 @@ static vop_write_t fuse_vnop_write; static vop_getpages_t fuse_vnop_getpages; static vop_putpages_t fuse_vnop_putpages; static vop_print_t fuse_vnop_print; +static vop_getextattr_t fuse_vnop_getextattr; +static vop_setextattr_t fuse_vnop_setextattr; +static vop_listextattr_t fuse_vnop_listextattr; +static vop_deleteextattr_t fuse_vnop_deleteextattr; +static vop_advlock_t fuse_vnop_advlock; +static vop_vptofh_t fuse_vnop_vptofh; struct vop_vector fuse_vnops = { .vop_default = &default_vnodeops, @@ -162,6 +170,12 @@ struct vop_vector fuse_vnops = { .vop_getpages = fuse_vnop_getpages, .vop_putpages = fuse_vnop_putpages, .vop_print = fuse_vnop_print, + .vop_getextattr = fuse_vnop_getextattr, + .vop_setextattr = fuse_vnop_setextattr, + .vop_listextattr = fuse_vnop_listextattr, + .vop_deleteextattr = fuse_vnop_deleteextattr, + .vop_advlock = fuse_vnop_advlock, + .vop_vptofh = fuse_vnop_vptofh, }; static u_long fuse_lookup_cache_hits = 0; @@ -190,6 +204,8 @@ SYSCTL_INT(_vfs_fuse, OID_AUTO, reclaim_ int fuse_pbuf_freecnt = -1; +int fuse_force_directio = 0; + #define fuse_vm_page_lock(m) vm_page_lock((m)); #define fuse_vm_page_unlock(m) vm_page_unlock((m)); #define fuse_vm_page_lock_queues() ((void)0) @@ -391,6 +407,8 @@ bringup: x_fh_id = ((struct fuse_open_out *)(feo + 1))->fh; x_open_flags = ((struct fuse_open_out *)(feo + 1))->open_flags; + if (fuse_force_directio > 0) + x_open_flags |= FOPEN_DIRECT_IO; fuse_filehandle_init(*vpp, FUFH_RDWR, NULL, x_fh_id); fuse_vnode_open(*vpp, x_open_flags, td); cache_purge_negative(dvp); @@ -560,27 +578,39 @@ fuse_vnop_inactive(struct vop_inactive_a FS_DEBUG("inode=%ju\n", (uintmax_t)VTOI(vp)); - for (type = 0; type < FUFH_MAXTYPE; type++) { - fufh = &(fvdat->fufh[type]); - if (FUFH_IS_VALID(fufh)) { - if (need_flush && vp->v_type == VREG) { - if ((VTOFUD(vp)->flag & FN_SIZECHANGE) != 0) { - fuse_vnode_savesize(vp, NULL); + /* + * For NFS exported mounts, delay buffer cache flushing and the + * close until the vnode is reclaimed. This is done since NFS + * does the open implicitly when a read/write occurs and then + * it reduces the vnode reference count to 0 for each read/write. + */ + if ((vp->v_mount->mnt_flag & MNT_EXPORTED) == 0) { + for (type = 0; type < FUFH_MAXTYPE; type++) { + fufh = &(fvdat->fufh[type]); + if (FUFH_IS_VALID(fufh)) { + if (need_flush && vp->v_type == VREG) { + if ((VTOFUD(vp)->flag & FN_SIZECHANGE) + != 0) { + fuse_vnode_savesize(vp, NULL); + } + if (fuse_data_cache_invalidate || + (fvdat->flag & FN_REVOKED) != 0) + fuse_io_invalbuf(vp, td); + else + fuse_io_flushbuf(vp, MNT_WAIT, + td); + need_flush = 0; } - if (fuse_data_cache_invalidate || - (fvdat->flag & FN_REVOKED) != 0) - fuse_io_invalbuf(vp, td); - else - fuse_io_flushbuf(vp, MNT_WAIT, td); - need_flush = 0; + fuse_filehandle_close(vp, type, td, NULL); } - fuse_filehandle_close(vp, type, td, NULL); } } +#ifdef notnow if ((fvdat->flag & FN_REVOKED) != 0 && fuse_reclaim_revoked) { vrecycle(vp); } +#endif return 0; } @@ -1125,6 +1155,7 @@ fuse_vnop_open(struct vop_open_args *ap) struct fuse_vnode_data *fvdat; int error, isdir = 0; + int32_t fuse_open_flags; FS_DEBUG2G("inode=%ju mode=0x%x\n", (uintmax_t)VTOI(vp), mode); @@ -1136,14 +1167,19 @@ fuse_vnop_open(struct vop_open_args *ap) if (vnode_isdir(vp)) { isdir = 1; } + fuse_open_flags = 0; if (isdir) { fufh_type = FUFH_RDONLY; } else { fufh_type = fuse_filehandle_xlate_from_fflags(mode); + if (fufh_type == FUFH_WRONLY || + (fvdat->flag & FN_DIRECTIO) != 0 || + fuse_force_directio > 0) + fuse_open_flags = FOPEN_DIRECT_IO; } if (fuse_filehandle_valid(vp, fufh_type)) { - fuse_vnode_open(vp, 0, td); + fuse_vnode_open(vp, fuse_open_flags, td); return 0; } error = fuse_filehandle_open(vp, fufh_type, NULL, td, cred); @@ -1165,20 +1201,53 @@ fuse_vnop_read(struct vop_read_args *ap) struct vnode *vp = ap->a_vp; struct uio *uio = ap->a_uio; int ioflag = ap->a_ioflag; - struct ucred *cred = ap->a_cred; + struct ucred *cred = NULL; + int err, freecred; + gid_t gid; FS_DEBUG2G("inode=%ju offset=%jd resid=%zd\n", (uintmax_t)VTOI(vp), uio->uio_offset, uio->uio_resid); - if (fuse_isdeadfs(vp)) { - return ENXIO; - } + if (fuse_isdeadfs(vp)) + return (ENXIO); - if (VTOFUD(vp)->flag & FN_DIRECTIO) { + if ((VTOFUD(vp)->flag & FN_DIRECTIO) != 0) ioflag |= IO_DIRECT; - } - return fuse_io_dispatch(vp, uio, ioflag, cred); + err = 0; + freecred = 0; + if ((vnode_mount(vp)->mnt_flag & MNT_EXPORTED) != 0 && + fuse_filehandle_validrw(vp, FUFH_RDONLY) == FUFH_INVALID) { + FS_DEBUG("doing open() before read"); + /* + * This should only happen when VOP_READ() is done by an + * nfsd thread. Since the nfsd thread has already done + * permission checks, I believe it is safe to open the + * file as root. + */ + cred = crget(); + cred->cr_uid = cred->cr_ruid = cred->cr_svuid = 0; + gid = 0; + crsetgroups(cred, 1, &gid); + cred->cr_rgid = cred->cr_svgid = cred->cr_groups[0]; + cred->cr_prison = &prison0; + prison_hold(cred->cr_prison); + freecred = 1; + err = fuse_filehandle_open(vp, FUFH_RDONLY, NULL, curthread, + cred); + } else + cred = ap->a_cred; + + if (err == 0) + err = fuse_io_dispatch(vp, uio, ioflag, cred); + +#ifdef notdef + if (freefufh != 0) + fuse_filehandle_close(vp, FUFH_RDONLY, NULL, cred); +#endif + if (freecred != 0) + crfree(cred); + return (err); } /* @@ -1187,7 +1256,7 @@ fuse_vnop_read(struct vop_read_args *ap) struct uio *a_uio; struct ucred *a_cred; int *a_eofflag; - int *ncookies; + int *a_ncookies; u_long **a_cookies; }; */ @@ -1203,10 +1272,14 @@ fuse_vnop_readdir(struct vop_readdir_arg struct fuse_iov cookediov; int err = 0; - int freefufh = 0; + int ncookies; + u_long *cookies; + off_t startoff; + ssize_t tresid; FS_DEBUG2G("inode=%ju\n", (uintmax_t)VTOI(vp)); + *ap->a_eofflag = 0; if (fuse_isdeadfs(vp)) { return ENXIO; } @@ -1216,25 +1289,61 @@ fuse_vnop_readdir(struct vop_readdir_arg } fvdat = VTOFUD(vp); + tresid = uio->uio_resid; + startoff = uio->uio_offset; if (!fuse_filehandle_valid(vp, FUFH_RDONLY)) { FS_DEBUG("calling readdir() before open()"); err = fuse_filehandle_open(vp, FUFH_RDONLY, &fufh, NULL, cred); - freefufh = 1; + if (err == 0) { + /* + * When a directory is opened, it must be read from + * the beginning. Hopefully, the "startoff" still + * exists as an offset cookie for the directory. + * If not, it will read the entire directory without + * returning any entries and just return eof. + */ + uio->uio_offset = 0; + } } else { err = fuse_filehandle_get(vp, FUFH_RDONLY, &fufh); } if (err) { return (err); } + + if (ap->a_ncookies != NULL) { + ncookies = uio->uio_resid; + ncookies = ncookies / (offsetof(struct dirent, d_name) + 4) + 1; + cookies = malloc(ncookies * sizeof(*cookies), M_TEMP, M_WAITOK); + *ap->a_ncookies = ncookies; + *ap->a_cookies = cookies; + } else { + ncookies = 0; + cookies = NULL; + } #define DIRCOOKEDSIZE FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + MAXNAMLEN + 1) fiov_init(&cookediov, DIRCOOKEDSIZE); - err = fuse_internal_readdir(vp, uio, fufh, &cookediov); + err = fuse_internal_readdir(vp, uio, startoff, fufh, &cookediov, + &ncookies, cookies); fiov_teardown(&cookediov); +#ifdef notdef if (freefufh) { fuse_filehandle_close(vp, FUFH_RDONLY, NULL, cred); } +#endif + if (ap->a_ncookies != NULL) { + if (err == 0) { + *ap->a_ncookies -= ncookies; + } else { + free(*ap->a_cookies, M_TEMP); + *ap->a_ncookies = 0; + *ap->a_cookies = NULL; + } + } + if (err == 0 && tresid == uio->uio_resid) + *ap->a_eofflag = 1; return err; } @@ -1307,7 +1416,7 @@ fuse_vnop_reclaim(struct vop_reclaim_arg for (type = 0; type < FUFH_MAXTYPE; type++) { fufh = &(fvdat->fufh[type]); if (FUFH_IS_VALID(fufh)) { - printf("FUSE: vnode being reclaimed but fufh (type=%d) is valid", + FS_DEBUG("FUSE: vnode being reclaimed but fufh (type=%d) is valid", type); fuse_filehandle_close(vp, type, td, NULL); } @@ -1708,20 +1817,56 @@ fuse_vnop_write(struct vop_write_args *a struct vnode *vp = ap->a_vp; struct uio *uio = ap->a_uio; int ioflag = ap->a_ioflag; - struct ucred *cred = ap->a_cred; + struct ucred *cred = NULL; + int err, freecred; + gid_t gid; fuse_trace_printf_vnop(); - if (fuse_isdeadfs(vp)) { - return ENXIO; - } - fuse_vnode_refreshsize(vp, cred); + if (fuse_isdeadfs(vp)) + return (ENXIO); + fuse_vnode_refreshsize(vp, ap->a_cred); - if (VTOFUD(vp)->flag & FN_DIRECTIO) { + if ((VTOFUD(vp)->flag & FN_DIRECTIO) != 0) ioflag |= IO_DIRECT; - } - return fuse_io_dispatch(vp, uio, ioflag, cred); + err = 0; + freecred = 0; + if ((vnode_mount(vp)->mnt_flag & MNT_EXPORTED) != 0 && + !fuse_filehandle_valid(vp, FUFH_RDWR)) { + FS_DEBUG("doing open() before write"); + /* + * This should only happen when VOP_WRITE() is done by an + * nfsd thread. Since the nfsd thread has already done + * permission checks, I believe it is safe to open the + * file as root. + * The open is done FUFH_RDWR and not FUFH_WRONLY because + * a write of a partial buffer cache block will require + * that the block be read in first. + */ + cred = crget(); + cred->cr_uid = cred->cr_ruid = cred->cr_svuid = 0; + gid = 0; + crsetgroups(cred, 1, &gid); + cred->cr_rgid = cred->cr_svgid = cred->cr_groups[0]; + cred->cr_prison = &prison0; + prison_hold(cred->cr_prison); + freecred = 1; + err = fuse_filehandle_open(vp, FUFH_RDWR, NULL, curthread, + cred); + } else + cred = ap->a_cred; + + if (err == 0) + err = fuse_io_dispatch(vp, uio, ioflag, cred); + +#ifdef notdef + if (freefufh != 0) + fuse_filehandle_close(vp, FUFH_RDWR, NULL, cred); +#endif + if (freecred != 0) + crfree(cred); + return (err); } /* @@ -1752,24 +1897,35 @@ fuse_vnop_getpages(struct vop_getpages_a td = curthread; /* XXX */ cred = curthread->td_ucred; /* XXX */ pages = ap->a_m; - npages = ap->a_count; + count = ap->a_count; if (!fsess_opt_mmap(vnode_mount(vp))) { FS_DEBUG("called on non-cacheable vnode??\n"); return (VM_PAGER_ERROR); } + npages = btoc(count); /* - * If the last page is partially valid, just return it and allow - * the pager to zero-out the blanks. Partially valid pages can - * only occur at the file EOF. - * - * XXXGL: is that true for FUSE, which is a local filesystem, - * but still somewhat disconnected from the kernel? + * If the requested page is partially valid, just return it and + * allow the pager to zero-out the blanks. Partially valid pages + * can only occur at the file EOF. */ + VM_OBJECT_WLOCK(vp->v_object); - if (pages[npages - 1]->valid != 0 && --npages == 0) - goto out; + fuse_vm_page_lock_queues(); + if (pages[ap->a_reqpage]->valid != 0) { + for (i = 0; i < npages; ++i) { + if (i != ap->a_reqpage) { + fuse_vm_page_lock(pages[i]); + vm_page_free(pages[i]); + fuse_vm_page_unlock(pages[i]); + } + } + fuse_vm_page_unlock_queues(); + VM_OBJECT_WUNLOCK(vp->v_object); + return 0; + } + fuse_vm_page_unlock_queues(); VM_OBJECT_WUNLOCK(vp->v_object); /* @@ -1783,7 +1939,6 @@ fuse_vnop_getpages(struct vop_getpages_a PCPU_INC(cnt.v_vnodein); PCPU_ADD(cnt.v_vnodepgsin, npages); - count = npages << PAGE_SHIFT; iov.iov_base = (caddr_t)kva; iov.iov_len = count; uio.uio_iov = &iov; @@ -1801,6 +1956,17 @@ fuse_vnop_getpages(struct vop_getpages_a if (error && (uio.uio_resid == count)) { FS_DEBUG("error %d\n", error); + VM_OBJECT_WLOCK(vp->v_object); + fuse_vm_page_lock_queues(); + for (i = 0; i < npages; ++i) { + if (i != ap->a_reqpage) { + fuse_vm_page_lock(pages[i]); + vm_page_free(pages[i]); + fuse_vm_page_unlock(pages[i]); + } + } + fuse_vm_page_unlock_queues(); + VM_OBJECT_WUNLOCK(vp->v_object); return VM_PAGER_ERROR; } /* @@ -1841,15 +2007,12 @@ fuse_vnop_getpages(struct vop_getpages_a */ ; } + if (i != ap->a_reqpage) + vm_page_readahead_finish(m); } fuse_vm_page_unlock_queues(); -out: VM_OBJECT_WUNLOCK(vp->v_object); - if (ap->a_rbehind) - *ap->a_rbehind = 0; - if (ap->a_rahead) - *ap->a_rahead = 0; - return (VM_PAGER_OK); + return 0; } /* @@ -1962,3 +2125,411 @@ fuse_vnop_print(struct vop_print_args *a return 0; } + +/* + struct vop_getextattr_args { + struct vnode *a_vp; + int a_attrnamespace; + const char *a_name; + struct uio *a_uio; + size_t *a_size; + struct ucred *a_cred; + struct thread *a_td; + }; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Tue Apr 12 23:04:42 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 24802B0DC6D for ; Tue, 12 Apr 2016 23:04:42 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id EB0B813D4; Tue, 12 Apr 2016 23:04:41 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3CN4fgP082856; Tue, 12 Apr 2016 23:04:41 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3CN4fei082855; Tue, 12 Apr 2016 23:04:41 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604122304.u3CN4fei082855@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 12 Apr 2016 23:04:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297891 - projects/pnfs-server/sys/fs/nfsclient X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2016 23:04:42 -0000 Author: rmacklem Date: Tue Apr 12 23:04:40 2016 New Revision: 297891 URL: https://svnweb.freebsd.org/changeset/base/297891 Log: Fix the call to nfscl_getmyip(). Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c Modified: projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 12 23:03:37 2016 (r297890) +++ projects/pnfs-server/sys/fs/nfsclient/nfs_clrpcops.c Tue Apr 12 23:04:40 2016 (r297891) @@ -856,6 +856,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s u_int32_t lease; static u_int32_t rev = 0; struct nfsclds *dsp, *ndsp, *tdsp; + struct in6_addr a6; if (nfsboottime.tv_sec == 0) NFSSETBOOTTIME(nfsboottime); @@ -916,7 +917,7 @@ nfsrpc_setclient(struct nfsmount *nmp, s *tl = txdr_unsigned(NFS_CALLBCKPROG); callblen = strlen(nfsv4_callbackaddr); if (callblen == 0) - cp = nfscl_getmyip(nmp, &isinet6); + cp = nfscl_getmyip(nmp, &a6, &isinet6); if (nfscl_enablecallb && nfs_numnfscbd > 0 && (callblen > 0 || cp != NULL)) { port = htons(nfsv4_cbport); From owner-svn-src-projects@freebsd.org Wed Apr 13 00:10:43 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CB029B0D5ED for ; Wed, 13 Apr 2016 00:10:43 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 9A2F415D5; Wed, 13 Apr 2016 00:10:43 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3D0Aga8001809; Wed, 13 Apr 2016 00:10:42 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3D0Ag9M001807; Wed, 13 Apr 2016 00:10:42 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604130010.u3D0Ag9M001807@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 13 Apr 2016 00:10:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297896 - in projects/pnfs-server/sys/fs: fuse nfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 00:10:43 -0000 Author: rmacklem Date: Wed Apr 13 00:10:42 2016 New Revision: 297896 URL: https://svnweb.freebsd.org/changeset/base/297896 Log: Fix the build by replacing fuse_getpages with the current one and fixing the nfscl_getmyip() definition. Modified: projects/pnfs-server/sys/fs/fuse/fuse_vnops.c projects/pnfs-server/sys/fs/nfs/nfs_var.h Modified: projects/pnfs-server/sys/fs/fuse/fuse_vnops.c ============================================================================== --- projects/pnfs-server/sys/fs/fuse/fuse_vnops.c Tue Apr 12 23:38:10 2016 (r297895) +++ projects/pnfs-server/sys/fs/fuse/fuse_vnops.c Wed Apr 13 00:10:42 2016 (r297896) @@ -1897,35 +1897,24 @@ fuse_vnop_getpages(struct vop_getpages_a td = curthread; /* XXX */ cred = curthread->td_ucred; /* XXX */ pages = ap->a_m; - count = ap->a_count; + npages = ap->a_count; if (!fsess_opt_mmap(vnode_mount(vp))) { FS_DEBUG("called on non-cacheable vnode??\n"); return (VM_PAGER_ERROR); } - npages = btoc(count); /* - * If the requested page is partially valid, just return it and - * allow the pager to zero-out the blanks. Partially valid pages - * can only occur at the file EOF. + * If the last page is partially valid, just return it and allow + * the pager to zero-out the blanks. Partially valid pages can + * only occur at the file EOF. + * + * XXXGL: is that true for FUSE, which is a local filesystem, + * but still somewhat disconnected from the kernel? */ - VM_OBJECT_WLOCK(vp->v_object); - fuse_vm_page_lock_queues(); - if (pages[ap->a_reqpage]->valid != 0) { - for (i = 0; i < npages; ++i) { - if (i != ap->a_reqpage) { - fuse_vm_page_lock(pages[i]); - vm_page_free(pages[i]); - fuse_vm_page_unlock(pages[i]); - } - } - fuse_vm_page_unlock_queues(); - VM_OBJECT_WUNLOCK(vp->v_object); - return 0; - } - fuse_vm_page_unlock_queues(); + if (pages[npages - 1]->valid != 0 && --npages == 0) + goto out; VM_OBJECT_WUNLOCK(vp->v_object); /* @@ -1939,6 +1928,7 @@ fuse_vnop_getpages(struct vop_getpages_a PCPU_INC(cnt.v_vnodein); PCPU_ADD(cnt.v_vnodepgsin, npages); + count = npages << PAGE_SHIFT; iov.iov_base = (caddr_t)kva; iov.iov_len = count; uio.uio_iov = &iov; @@ -1956,17 +1946,6 @@ fuse_vnop_getpages(struct vop_getpages_a if (error && (uio.uio_resid == count)) { FS_DEBUG("error %d\n", error); - VM_OBJECT_WLOCK(vp->v_object); - fuse_vm_page_lock_queues(); - for (i = 0; i < npages; ++i) { - if (i != ap->a_reqpage) { - fuse_vm_page_lock(pages[i]); - vm_page_free(pages[i]); - fuse_vm_page_unlock(pages[i]); - } - } - fuse_vm_page_unlock_queues(); - VM_OBJECT_WUNLOCK(vp->v_object); return VM_PAGER_ERROR; } /* @@ -2007,12 +1986,15 @@ fuse_vnop_getpages(struct vop_getpages_a */ ; } - if (i != ap->a_reqpage) - vm_page_readahead_finish(m); } fuse_vm_page_unlock_queues(); +out: VM_OBJECT_WUNLOCK(vp->v_object); - return 0; + if (ap->a_rbehind) + *ap->a_rbehind = 0; + if (ap->a_rahead) + *ap->a_rahead = 0; + return (VM_PAGER_OK); } /* Modified: projects/pnfs-server/sys/fs/nfs/nfs_var.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfs_var.h Tue Apr 12 23:38:10 2016 (r297895) +++ projects/pnfs-server/sys/fs/nfs/nfs_var.h Wed Apr 13 00:10:42 2016 (r297896) @@ -321,7 +321,7 @@ void nfscl_reqstart(struct nfsrv_descrip nfsuint64 *nfscl_getcookie(struct nfsnode *, off_t off, int); void nfscl_fillsattr(struct nfsrv_descript *, struct vattr *, vnode_t, int, u_int32_t); -u_int8_t *nfscl_getmyip(struct nfsmount *, int *); +u_int8_t *nfscl_getmyip(struct nfsmount *, struct in6_addr *, int *); int nfsm_getfh(struct nfsrv_descript *, struct nfsfh **); int nfscl_mtofh(struct nfsrv_descript *, struct nfsfh **, struct nfsvattr *, int *); From owner-svn-src-projects@freebsd.org Wed Apr 13 01:00:30 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31DA8B0CA2C for ; Wed, 13 Apr 2016 01:00:30 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 0E33B1E7D; Wed, 13 Apr 2016 01:00:29 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3D10T76017115; Wed, 13 Apr 2016 01:00:29 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3D10T2n017114; Wed, 13 Apr 2016 01:00:29 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604130100.u3D10T2n017114@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 13 Apr 2016 01:00:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297899 - projects/pnfs-server/usr.sbin/nfsd X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 01:00:30 -0000 Author: rmacklem Date: Wed Apr 13 01:00:29 2016 New Revision: 297899 URL: https://svnweb.freebsd.org/changeset/base/297899 Log: Update nfsd.c so that it has the "-p" option for the pNFS server. Modified: projects/pnfs-server/usr.sbin/nfsd/nfsd.c Modified: projects/pnfs-server/usr.sbin/nfsd/nfsd.c ============================================================================== --- projects/pnfs-server/usr.sbin/nfsd/nfsd.c Wed Apr 13 00:53:04 2016 (r297898) +++ projects/pnfs-server/usr.sbin/nfsd/nfsd.c Wed Apr 13 01:00:29 2016 (r297899) @@ -59,12 +59,16 @@ static const char rcsid[] = #include #include #include +#include #include #include -#include #include +#include +#include +#include + #include #include #include @@ -92,6 +96,8 @@ static int stablefd = -1; /* Fd for the static int backupfd; /* Fd for the backup stable restart file */ static const char *getopt_shortopts; static const char *getopt_usage; +static char *dshost = NULL; +static int dshostc = 0; static int minthreads_set; static int maxthreads_set; @@ -100,9 +106,18 @@ static struct option longopts[] = { { "debug", no_argument, &debug, 1 }, { "minthreads", required_argument, &minthreads_set, 1 }, { "maxthreads", required_argument, &maxthreads_set, 1 }, + { "pnfs", required_argument, NULL, 'p' }, { NULL, 0, NULL, 0} }; +struct nfhret { + u_long stat; + long vers; + long auth; + long fhsize; + u_char nfh[NFS3_FHSIZE]; +}; + static void cleanup(int); static void child_cleanup(int); static void killchildren(void); @@ -111,13 +126,18 @@ static void nonfs(int); static void reapchild(int); static int setbindhost(struct addrinfo **ia, const char *bindhost, struct addrinfo hints); -static void start_server(int); +static void start_server(int, struct nfsd_nfsd_args *); static void unregistration(void); static void usage(void); static void open_stable(int *, int *); static void copy_stable(int, int); static void backup_stable(int); static void set_nfsdcnt(int); +static void parse_dsserver(const char *, struct nfsd_nfsd_args *); +static int xdr_dir(XDR *, char *); +static int xdr_fh(XDR *, struct nfhret *); +static u_long getdsrootfh(struct sockaddr *, socklen_t, + struct nfsd_nfsd_args *, char *); /* * Nfs server daemon mostly just a user context for nfssvc() @@ -161,15 +181,18 @@ main(int argc, char **argv) const char *lopt; char **bindhost = NULL; pid_t pid; + struct nfsd_nfsd_args nfsdargs; nfsdcnt = DEFNFSDCNT; unregister = reregister = tcpflag = maxsock = 0; bindanyflag = udpflag = connect_type_cnt = bindhostc = 0; - getopt_shortopts = "ah:n:rdtue"; + getopt_shortopts = "ah:n:rdtuep:"; getopt_usage = "usage:\n" " nfsd [-ardtue] [-h bindip]\n" - " [-n numservers] [--minthreads #] [--maxthreads #]\n"; + " [-n numservers] [--minthreads #] [--maxthreads #]\n" + " [-p/--pnfs dsserver0,...,dsserverN:/gluster-volume-name:" + "mntport#:nfsport#]\n"; while ((ch = getopt_long(argc, argv, getopt_shortopts, longopts, &longindex)) != -1) switch (ch) { @@ -203,6 +226,10 @@ main(int argc, char **argv) case 'e': /* now a no-op, since this is the default */ break; + case 'p': + /* Parse out the DS server host names and the port#s. */ + parse_dsserver(optarg, &nfsdargs); + break; case 0: lopt = longopts[longindex].name; if (!strcmp(lopt, "minthreads")) { @@ -393,7 +420,7 @@ main(int argc, char **argv) exit(1); } nfssvc_addsock = NFSSVC_NFSDADDSOCK; - nfssvc_nfsd = NFSSVC_NFSDNFSD; + nfssvc_nfsd = NFSSVC_NFSDNFSD | NFSSVC_NEWSTRUCT; if (tcpflag) { /* @@ -411,7 +438,7 @@ main(int argc, char **argv) } else { (void)signal(SIGUSR1, child_cleanup); setproctitle("server"); - start_server(0); + start_server(0, &nfsdargs); } } @@ -711,7 +738,7 @@ main(int argc, char **argv) * a "server" too. start_server will not return. */ if (!tcpflag) - start_server(1); + start_server(1, &nfsdargs); /* * Loop forever accepting connections and passing the sockets @@ -935,10 +962,9 @@ get_tuned_nfsdcount(void) } static void -start_server(int master) +start_server(int master, struct nfsd_nfsd_args *nfsdargp) { char principal[MAXHOSTNAMELEN + 5]; - struct nfsd_nfsd_args nfsdargs; int status, error; char hostname[MAXHOSTNAMELEN + 1], *cp; struct addrinfo *aip, hints; @@ -961,17 +987,17 @@ start_server(int master) freeaddrinfo(aip); } } - nfsdargs.principal = principal; + nfsdargp->principal = principal; if (nfsdcnt_set) - nfsdargs.minthreads = nfsdargs.maxthreads = nfsdcnt; + nfsdargp->minthreads = nfsdargp->maxthreads = nfsdcnt; else { - nfsdargs.minthreads = minthreads_set ? minthreads : get_tuned_nfsdcount(); - nfsdargs.maxthreads = maxthreads_set ? maxthreads : nfsdargs.minthreads; - if (nfsdargs.maxthreads < nfsdargs.minthreads) - nfsdargs.maxthreads = nfsdargs.minthreads; + nfsdargp->minthreads = minthreads_set ? minthreads : get_tuned_nfsdcount(); + nfsdargp->maxthreads = maxthreads_set ? maxthreads : nfsdargp->minthreads; + if (nfsdargp->maxthreads < nfsdargp->minthreads) + nfsdargp->maxthreads = nfsdargp->minthreads; } - error = nfssvc(nfssvc_nfsd, &nfsdargs); + error = nfssvc(nfssvc_nfsd, nfsdargp); if (error < 0 && errno == EAUTH) { /* * This indicates that it could not register the @@ -981,7 +1007,7 @@ start_server(int master) */ syslog(LOG_ERR, "No gssd, using AUTH_SYS only"); principal[0] = '\0'; - error = nfssvc(nfssvc_nfsd, &nfsdargs); + error = nfssvc(nfssvc_nfsd, nfsdargp); } if (error < 0) { syslog(LOG_ERR, "nfssvc: %m"); @@ -1084,3 +1110,239 @@ backup_stable(__unused int signo) copy_stable(stablefd, backupfd); } +/* + * Parse the pNFS string and extract the DS servers and ports numbers. + */ +static void +parse_dsserver(const char *optarg, struct nfsd_nfsd_args *nfsdargp) +{ + char *ad, *cp, *cp2, *dsaddr, *dshost, *gvol, nfsprt[9], *portcp; + int adsiz, dsaddrcnt, dshostcnt, ecode, hostsiz; + size_t cpsiz, dsaddrsiz, dshostsiz, nfsprtsiz; + struct addrinfo hints, *ai_tcp; + struct sockaddr_in *sin; + u_short dsmntport, dsnfsport; + u_long getrootret; + + cp = strdup(optarg); + if (cp == NULL) + errx(1, "Out of memory"); + cpsiz = strlen(cp); + /* + * The first field separated from the dshost lby ':' ist is the + * GlusterFS volume path. (ie. '/' followed by the GlusterFS volume + * name). + */ + gvol = strchr(cp, ':'); + if (gvol == NULL || gvol == cp) + usage(); + + /* + * The last two fields separated by ':' are the Mount and NFS protocol + * port #s for the DS servers. + * The minimal field starting with ':' is 4 characters long. + * consisting of 2 ':' characters each followed by a digit. + */ + portcp = strchr(gvol + 1, ':'); + if (portcp == NULL || portcp == gvol + 1 || portcp > cp + cpsiz - 4) + usage(); + cp2 = strchr(portcp + 1, ':'); + if (cp2 == NULL || cp2 == portcp + 1 || cp2 > cp + cpsiz - 1) + usage(); + *gvol++ = '\0'; + *portcp++ = '\0'; + *cp2++ = '\0'; + + /* Do the port numbers. */ + dsmntport = atoi(portcp); + dsnfsport = atoi(cp2); + if (dsmntport <= 0 || dsmntport > 65535 || + dsnfsport <= 0 || dsnfsport > 65535) + usage(); + snprintf(nfsprt, 9, ".%d.%d", dsnfsport >> 8, dsnfsport & 0xff); + nfsprtsiz = strlen(nfsprt); + + /* Now, do the host names. */ + dshostsiz = 1024; + dshostcnt = 0; + dshost = malloc(dshostsiz); + if (dshost == NULL) + errx(1, "Out of memory"); + dsaddrsiz = 1024; + dsaddrcnt = 0; + dsaddr = malloc(dsaddrsiz); + if (dsaddr == NULL) + errx(1, "Out of memory"); + ai_tcp = NULL; + /* Loop around for each DS server name. */ + do { + if (ai_tcp != NULL) + freeaddrinfo(ai_tcp); + cp2 = strchr(cp, ','); + if (cp2 != NULL) + *cp2++ = '\0'; + + /* Get the fully qualified domain name and IP address. */ + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + ecode = getaddrinfo(cp, NULL, &hints, &ai_tcp); + if (ecode != 0) + err(1, "getaddrinfo pnfs: %s %s", cp, + gai_strerror(ecode)); + sin = (struct sockaddr_in *)ai_tcp->ai_addr; + if (sin->sin_family != AF_INET) + err(1, "getaddrinfo() returned non-INET address"); + + /* Append this address to dsaddr. */ + ad = inet_ntoa(sin->sin_addr); + adsiz = strlen(ad); + if (dsaddrcnt + adsiz + nfsprtsiz + 1 > dsaddrsiz) { + dsaddrsiz *= 2; + dsaddr = realloc(dsaddr, dsaddrsiz); + if (dsaddr == NULL) + errx(1, "Out of memory"); + } + strcpy(&dsaddr[dsaddrcnt], ad); + strcat(&dsaddr[dsaddrcnt], nfsprt); + dsaddrcnt += adsiz + nfsprtsiz + 1; + + /* Append this hostname to dshost. */ + hostsiz = strlen(ai_tcp->ai_canonname); + if (dshostcnt + hostsiz + 1 > dshostsiz) { + dshostsiz *= 2; + dshost = realloc(dshost, dshostsiz); + if (dshost == NULL) + errx(1, "Out of memory"); + } + strcpy(&dshost[dshostcnt], ai_tcp->ai_canonname); + dshostcnt += hostsiz + 1; + + cp = cp2; + } while (cp != NULL && *cp != '\0' && cp < portcp); + + /* + * At the point, ai_tcp refers to the last DS server host and + * sin is set to point to the sockaddr structure in it. + * Set the port# for the DS Mount protocol and get the DS root FH. + */ + sin->sin_port = htons(dsmntport); + getrootret = getdsrootfh(ai_tcp->ai_addr, ai_tcp->ai_addrlen, nfsdargp, + gvol); + if (getrootret != 0) + errx(1, "Can't do Mount RPC against DS:%s stat=%lu", + ai_tcp->ai_canonname, getrootret); + nfsdargp->addr = dsaddr; + nfsdargp->addrlen = dsaddrcnt; + nfsdargp->dnshost = dshost; + nfsdargp->dnshostlen = dshostcnt; + freeaddrinfo(ai_tcp); +} + +/* + * Do a Mount RPC agains a DS server to get the root fh for the DS volume. + */ +static u_long +getdsrootfh(struct sockaddr *saddr, socklen_t len, + struct nfsd_nfsd_args *nfsdargp, char *gvol) +{ + struct netbuf srvaddr; + struct netconfig *nconf; + CLIENT *clp; + struct timeval try; + struct nfhret nfhret; + enum clnt_stat clntstat; + int so; + + nconf = getnetconfigent("tcp"); + if (nconf == NULL) + errx(1, "getdsrootfh: getnetconfigent for tcp failed"); + so = socket(AF_INET, SOCK_STREAM, 0); + if (so < 0) + err(1, "getdsrootfh: can't create socket"); + srvaddr.buf = saddr; + srvaddr.len = srvaddr.maxlen = len; + clp = clnt_tli_create(so, nconf, &srvaddr, MOUNTPROG, 3, 0, 0); + if (clp == NULL) + errx(1, "getdsrootfh: clnt_tli_create failed"); + /* Send the MOUNTPROC_MNT RPC to get the root filehandle. */ + try.tv_sec = 10; + try.tv_usec = 0; + clp->cl_auth = authsys_create_default(); + nfhret.auth = AUTH_SYS; + nfhret.vers = 3; + clntstat = clnt_call(clp, MOUNTPROC_MNT, (xdrproc_t)xdr_dir, gvol, + (xdrproc_t)xdr_fh, &nfhret, try); + auth_destroy(clp->cl_auth); + clnt_destroy(clp); + freenetconfigent(nconf); + + if (clntstat != RPC_SUCCESS) + return (clntstat); + if (nfhret.stat != 0) + return (nfhret.stat); + /* + * Store the filehandle and server address in nfsargsp, making + * sure to copy any locally allocated structures. + */ + if (nfhret.fhsize != sizeof(struct pnfsfh)) + errx(1, "getdsrootfh: DS FH size wrong"); + memcpy(&nfsdargp->nfsfh, nfhret.nfh, nfhret.fhsize); + return (0); +} + +/* + * xdr routines for mount rpc's + */ +static int +xdr_dir(XDR *xdrsp, char *dirp) +{ + + return (xdr_string(xdrsp, &dirp, MNTPATHLEN)); +} + +static int +xdr_fh(XDR *xdrsp, struct nfhret *np) +{ + int i; + long auth, authcnt, authfnd = 0; + + if (!xdr_u_long(xdrsp, &np->stat)) + return (0); + if (np->stat != 0) + return (1); + switch (np->vers) { + case 3: + if (!xdr_long(xdrsp, &np->fhsize)) + return (0); + if (np->fhsize <= 0 || np->fhsize > NFS3_FHSIZE) + return (0); + if (!xdr_opaque(xdrsp, (caddr_t)np->nfh, np->fhsize)) + return (0); + if (!xdr_long(xdrsp, &authcnt)) + return (0); + for (i = 0; i < authcnt; i++) { + if (!xdr_long(xdrsp, &auth)) + return (0); + if (np->auth == -1) { + np->auth = auth; + authfnd++; + } else if (auth == np->auth) { + authfnd++; + } + } + /* + * Some servers, such as DEC's OSF/1 return a nil authenticator + * list to indicate RPCAUTH_UNIX. + */ + if (authcnt == 0 && np->auth == -1) + np->auth = AUTH_SYS; + if (!authfnd && (authcnt > 0 || np->auth != AUTH_SYS)) + np->stat = EAUTH; + return (1); + }; + return (0); +} + From owner-svn-src-projects@freebsd.org Wed Apr 13 01:08:43 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A6262B0CDDC for ; Wed, 13 Apr 2016 01:08:43 +0000 (UTC) (envelope-from rmacklem@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 mx1.freebsd.org (Postfix) with ESMTPS id 782651349; Wed, 13 Apr 2016 01:08:43 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3D18gb6020052; Wed, 13 Apr 2016 01:08:42 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3D18gts020051; Wed, 13 Apr 2016 01:08:42 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201604130108.u3D18gts020051@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 13 Apr 2016 01:08:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297900 - projects/pnfs-server/sys/fs/nfs X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 01:08:43 -0000 Author: rmacklem Date: Wed Apr 13 01:08:42 2016 New Revision: 297900 URL: https://svnweb.freebsd.org/changeset/base/297900 Log: Fix the nfsproto.h file so that nfsd.c will build. Modified: projects/pnfs-server/sys/fs/nfs/nfsproto.h Modified: projects/pnfs-server/sys/fs/nfs/nfsproto.h ============================================================================== --- projects/pnfs-server/sys/fs/nfs/nfsproto.h Wed Apr 13 01:00:29 2016 (r297899) +++ projects/pnfs-server/sys/fs/nfs/nfsproto.h Wed Apr 13 01:08:42 2016 (r297900) @@ -644,6 +644,7 @@ #define NFSFLAYUTIL_DENSE 0x1 #define NFSFLAYUTIL_COMMIT_THRU_MDS 0x2 +#ifdef _KERNEL /* Conversion macros */ #define vtonfsv2_mode(t,m) \ txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ @@ -793,6 +794,7 @@ struct nfsv3_sattr { u_int32_t sa_mtimetype; nfstime3 sa_mtime; }; +#endif /* _KERNEL */ /* * The attribute bits used for V4. From owner-svn-src-projects@freebsd.org Wed Apr 13 02:04:10 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B8022B0E6A0 for ; Wed, 13 Apr 2016 02:04:10 +0000 (UTC) (envelope-from gjb@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 mx1.freebsd.org (Postfix) with ESMTPS id 8764B19BE; Wed, 13 Apr 2016 02:04:10 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3D249dp041593; Wed, 13 Apr 2016 02:04:09 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3D249bJ041588; Wed, 13 Apr 2016 02:04:09 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201604130204.u3D249bJ041588@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Wed, 13 Apr 2016 02:04:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r297906 - in projects/release-pkg: . contrib/libxo contrib/libxo/doc contrib/libxo/libxo contrib/libxo/m4 lib/libc/gen lib/libxo libexec/bootpd libexec/bootpd/tools/bootptest sbin/fsck_... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 02:04:10 -0000 Author: gjb Date: Wed Apr 13 02:04:09 2016 New Revision: 297906 URL: https://svnweb.freebsd.org/changeset/base/297906 Log: MFH Sponsored by: The FreeBSD Foundation Added: projects/release-pkg/contrib/libxo/.gitignore - copied unchanged from r297905, head/contrib/libxo/.gitignore projects/release-pkg/contrib/libxo/.svnignore - copied unchanged from r297905, head/contrib/libxo/.svnignore projects/release-pkg/contrib/libxo/doc/libxo-manual.html - copied unchanged from r297905, head/contrib/libxo/doc/libxo-manual.html projects/release-pkg/lib/libxo/add.man - copied unchanged from r297905, head/lib/libxo/add.man projects/release-pkg/usr.bin/resizewin/ - copied from r297905, head/usr.bin/resizewin/ Replaced: projects/release-pkg/contrib/libxo/libxo/xo_config.h.in - copied unchanged from r297905, head/contrib/libxo/libxo/xo_config.h.in Deleted: projects/release-pkg/contrib/libxo/install-sh projects/release-pkg/contrib/libxo/libxo/add.man projects/release-pkg/contrib/libxo/m4/libtool.m4 projects/release-pkg/contrib/libxo/m4/ltoptions.m4 projects/release-pkg/contrib/libxo/m4/ltsugar.m4 projects/release-pkg/contrib/libxo/m4/ltversion.m4 projects/release-pkg/contrib/libxo/m4/lt~obsolete.m4 Modified: projects/release-pkg/Makefile.inc1 projects/release-pkg/contrib/libxo/configure.ac projects/release-pkg/contrib/libxo/libxo/libxo.c projects/release-pkg/contrib/libxo/libxo/xo_open_container.3 projects/release-pkg/contrib/libxo/libxo/xo_open_list.3 projects/release-pkg/lib/libc/gen/setproctitle.c projects/release-pkg/lib/libxo/xo_config.h projects/release-pkg/libexec/bootpd/getether.c projects/release-pkg/libexec/bootpd/hash.c projects/release-pkg/libexec/bootpd/hwaddr.c projects/release-pkg/libexec/bootpd/readfile.c projects/release-pkg/libexec/bootpd/rtmsg.c projects/release-pkg/libexec/bootpd/tools/bootptest/bootptest.c projects/release-pkg/libexec/bootpd/tools/bootptest/print-bootp.c projects/release-pkg/sbin/fsck_ffs/dir.c projects/release-pkg/sbin/fsck_ffs/fsutil.c projects/release-pkg/sbin/fsck_ffs/inode.c projects/release-pkg/sbin/fsck_ffs/main.c projects/release-pkg/sbin/fsck_ffs/pass1.c projects/release-pkg/sbin/fsck_ffs/pass1b.c projects/release-pkg/sbin/fsck_ffs/pass4.c projects/release-pkg/sbin/fsck_ffs/pass5.c projects/release-pkg/sbin/fsck_ffs/utilities.c projects/release-pkg/sys/amd64/conf/GENERIC projects/release-pkg/sys/amd64/conf/MINIMAL projects/release-pkg/sys/amd64/include/param.h projects/release-pkg/sys/boot/efi/boot1/Makefile.fat projects/release-pkg/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu projects/release-pkg/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu projects/release-pkg/sys/boot/efi/boot1/fat-arm64.tmpl.bz2.uu projects/release-pkg/sys/boot/efi/boot1/fat-i386.tmpl.bz2.uu projects/release-pkg/sys/boot/efi/boot1/generate-fat.sh projects/release-pkg/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/release-pkg/sys/contrib/rdma/krping/krping.c projects/release-pkg/sys/dev/bxe/bxe.c projects/release-pkg/sys/dev/bxe/bxe.h projects/release-pkg/sys/dev/bxe/bxe_ioctl.h projects/release-pkg/sys/dev/bxe/bxe_stats.c projects/release-pkg/sys/dev/bxe/bxe_stats.h projects/release-pkg/sys/dev/cxgbe/common/t4_hw.c projects/release-pkg/sys/dev/cxgbe/common/t4_regs.h projects/release-pkg/sys/dev/cxgbe/t4_sge.c projects/release-pkg/sys/dev/isp/isp.c projects/release-pkg/sys/dev/mn/if_mn.c projects/release-pkg/sys/dev/mpt/mpt_raid.c projects/release-pkg/sys/dev/mrsas/mrsas_ioctl.c projects/release-pkg/sys/dev/mvs/mvs_pci.c projects/release-pkg/sys/dev/mvs/mvs_soc.c projects/release-pkg/sys/dev/nxge/xgehal/xgehal-device.c projects/release-pkg/sys/dev/sound/isa/ad1816.c projects/release-pkg/sys/dev/sound/isa/ess.c projects/release-pkg/sys/dev/sound/isa/mss.c projects/release-pkg/sys/dev/sound/isa/sb16.c projects/release-pkg/sys/dev/sound/isa/sb8.c projects/release-pkg/sys/dev/sound/midi/midi.c projects/release-pkg/sys/dev/sound/pci/als4000.c projects/release-pkg/sys/dev/sound/pci/aureal.c projects/release-pkg/sys/dev/sound/pci/cmi.c projects/release-pkg/sys/dev/sound/pci/emu10k1.c projects/release-pkg/sys/dev/sound/pci/emu10kx.c projects/release-pkg/sys/dev/sound/pci/fm801.c projects/release-pkg/sys/dev/sound/pci/neomagic.c projects/release-pkg/sys/dev/sound/pci/solo.c projects/release-pkg/sys/dev/sound/pci/t4dwave.c projects/release-pkg/sys/dev/sound/pci/via8233.c projects/release-pkg/sys/dev/sound/pci/via82c686.c projects/release-pkg/sys/dev/vxge/vxgehal/vxgehal-fifo.c projects/release-pkg/sys/dev/vxge/vxgehal/vxgehal-mrpcim.c projects/release-pkg/sys/fs/nfsserver/nfs_nfsdport.c projects/release-pkg/sys/kern/kern_rctl.c projects/release-pkg/sys/netinet/sctp_usrreq.c projects/release-pkg/usr.bin/Makefile projects/release-pkg/usr.bin/fmt/fmt.c projects/release-pkg/usr.sbin/ypldap/ber.c Directory Properties: projects/release-pkg/ (props changed) projects/release-pkg/contrib/libxo/ (props changed) projects/release-pkg/contrib/libxo/doc/ (props changed) projects/release-pkg/contrib/libxo/encoder/ (props changed) projects/release-pkg/contrib/libxo/encoder/cbor/ (props changed) projects/release-pkg/contrib/libxo/encoder/test/ (props changed) projects/release-pkg/contrib/libxo/libxo/ (props changed) projects/release-pkg/contrib/libxo/tests/ (props changed) projects/release-pkg/contrib/libxo/tests/core/ (props changed) projects/release-pkg/contrib/libxo/tests/gettext/ (props changed) projects/release-pkg/contrib/libxo/tests/xo/ (props changed) projects/release-pkg/contrib/libxo/xo/ (props changed) projects/release-pkg/contrib/libxo/xohtml/ (props changed) projects/release-pkg/contrib/libxo/xolint/ (props changed) projects/release-pkg/contrib/libxo/xopo/ (props changed) projects/release-pkg/lib/libc/ (props changed) projects/release-pkg/sbin/ (props changed) projects/release-pkg/sys/ (props changed) projects/release-pkg/sys/boot/ (props changed) projects/release-pkg/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/release-pkg/Makefile.inc1 ============================================================================== --- projects/release-pkg/Makefile.inc1 Wed Apr 13 01:57:06 2016 (r297905) +++ projects/release-pkg/Makefile.inc1 Wed Apr 13 02:04:09 2016 (r297906) @@ -153,7 +153,15 @@ BUILDENV_SHELL?=${SHELL} BUILDENV_SHELL?=/bin/sh .endif -SVN?= /usr/local/bin/svn +.if !defined(SVN) || empty(SVN) +. for _P in /usr/bin /usr/local/bin +. for _S in svn svnlite +. if exists(${_P}/${_S}) +SVN= ${_P}/${_S} +. endif +. endfor +. endfor +.endif SVNFLAGS?= -r HEAD MAKEOBJDIRPREFIX?= /usr/obj @@ -1388,13 +1396,6 @@ doxygen: .PHONY # latest copy. # update: -.if (defined(CVS_UPDATE) || defined(SUP_UPDATE)) && !defined(SVN_UPDATE) - @echo "--------------------------------------------------------------" - @echo "CVS_UPDATE and SUP_UPDATE are no longer supported." - @echo "Please see: https://wiki.freebsd.org/CvsIsDeprecated" - @echo "--------------------------------------------------------------" - @exit 1 -.endif .if defined(SVN_UPDATE) @echo "--------------------------------------------------------------" @echo ">>> Updating ${.CURDIR} using Subversion" Copied: projects/release-pkg/contrib/libxo/.gitignore (from r297905, head/contrib/libxo/.gitignore) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/release-pkg/contrib/libxo/.gitignore Wed Apr 13 02:04:09 2016 (r297906, copy of r297905, head/contrib/libxo/.gitignore) @@ -0,0 +1,46 @@ +# Object files +*.o + +# Libraries +*.lib +*.a + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.app + +*~ +*.orig + +aclocal.m4 +ar-lib +autom4te.cache +build +compile +config.guess +config.h.in +config.sub +depcomp +install-sh +ltmain.sh +missing +m4 + +Makefile.in +configure +.DS_Store + +xoconfig.h.in +xo_config.h.in + +.gdbinit +.gdbinit.local +xtest +xtest.dSYM +tests/w Copied: projects/release-pkg/contrib/libxo/.svnignore (from r297905, head/contrib/libxo/.svnignore) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/release-pkg/contrib/libxo/.svnignore Wed Apr 13 02:04:09 2016 (r297906, copy of r297905, head/contrib/libxo/.svnignore) @@ -0,0 +1,18 @@ +Makefile.in +aclocal.m4 +ar-lib +autom4te.cache +bin* +build* +compile +configure +config.guess +config.sub +depcomp +doc/Makefile.in +info* +install-sh +ltmain.sh +m4 +missing +patches* Modified: projects/release-pkg/contrib/libxo/configure.ac ============================================================================== --- projects/release-pkg/contrib/libxo/configure.ac Wed Apr 13 01:57:06 2016 (r297905) +++ projects/release-pkg/contrib/libxo/configure.ac Wed Apr 13 02:04:09 2016 (r297906) @@ -12,7 +12,7 @@ # AC_PREREQ(2.2) -AC_INIT([libxo], [0.4.5], [phil@juniper.net]) +AC_INIT([libxo], [0.4.6], [phil@juniper.net]) AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability]) # Support silent build rules. Requires at least automake-1.11. Copied: projects/release-pkg/contrib/libxo/doc/libxo-manual.html (from r297905, head/contrib/libxo/doc/libxo-manual.html) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/release-pkg/contrib/libxo/doc/libxo-manual.html Wed Apr 13 02:04:09 2016 (r297906, copy of r297905, head/contrib/libxo/doc/libxo-manual.html) @@ -0,0 +1,27134 @@ + + + + +libxo: The Easy Way to Generate text, XML, JSON, and HTML output + + +