From owner-svn-src-projects@freebsd.org Mon Mar 11 02:57:02 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 458F3152A0B2 for ; Mon, 11 Mar 2019 02:57:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A2D2474F4F; Mon, 11 Mar 2019 02:57:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D7F0F498E; Mon, 11 Mar 2019 02:57:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2B2v0Gf038196; Mon, 11 Mar 2019 02:57:00 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2B2v08Y038195; Mon, 11 Mar 2019 02:57:00 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903110257.x2B2v08Y038195@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 02:57:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r344996 - projects/import-googletest-1.8.1/contrib/googletest/googlemock/test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/import-googletest-1.8.1/contrib/googletest/googlemock/test X-SVN-Commit-Revision: 344996 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: A2D2474F4F X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.95 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.96)[-0.957,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 02:57:02 -0000 Author: ngie Date: Mon Mar 11 02:57:00 2019 New Revision: 344996 URL: https://svnweb.freebsd.org/changeset/base/344996 Log: Expect `WhenDynamicCastToTest.AmbiguousCast` to fail on FreeBSD Casting `AmbiguousCastTypes::DerivedSub1` to `Base` currently succeeds, when it's expected to fail. See https://github.com/google/googletest/issues/2172 for more details. Modified: projects/import-googletest-1.8.1/contrib/googletest/googlemock/test/gmock-matchers_test.cc Modified: projects/import-googletest-1.8.1/contrib/googletest/googlemock/test/gmock-matchers_test.cc ============================================================================== --- projects/import-googletest-1.8.1/contrib/googletest/googlemock/test/gmock-matchers_test.cc Mon Mar 11 02:42:49 2019 (r344995) +++ projects/import-googletest-1.8.1/contrib/googletest/googlemock/test/gmock-matchers_test.cc Mon Mar 11 02:57:00 2019 (r344996) @@ -3767,6 +3767,12 @@ TEST(WhenDynamicCastToTest, AmbiguousCast) { AmbiguousCastTypes::DerivedSub1 sub1; AmbiguousCastTypes::ManyDerivedInHierarchy many_derived; // Multiply derived from Base. dynamic_cast<> returns NULL. + + // This testcase fails on FreeBSD. See this GitHub issue for more details: + // https://github.com/google/googletest/issues/2172 +#ifdef __FreeBSD__ + EXPECT_NONFATAL_FAILURE({ +#endif Base* as_base_ptr = static_cast(&many_derived); EXPECT_THAT(as_base_ptr, @@ -3775,6 +3781,9 @@ TEST(WhenDynamicCastToTest, AmbiguousCast) { EXPECT_THAT( as_base_ptr, WhenDynamicCastTo(Not(IsNull()))); +#ifdef __FreeBSD__ + }, ""); +#endif } TEST(WhenDynamicCastToTest, Describe) { From owner-svn-src-projects@freebsd.org Mon Mar 11 03:03:02 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 486CC152A56C for ; Mon, 11 Mar 2019 03:03:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D1A27758B4; Mon, 11 Mar 2019 03:03:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AD8074B82; Mon, 11 Mar 2019 03:03:01 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2B331gp044695; Mon, 11 Mar 2019 03:03:01 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2B32x2Z044679; Mon, 11 Mar 2019 03:02:59 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903110302.x2B32x2Z044679@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 03:02:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r344999 - in projects/import-googletest-1.8.1: . bin/chmod bin/sh/tests/expansion contrib/binutils/opcodes contrib/elftoolchain/libelf contrib/ipfilter/ipsend/.OLD contrib/llvm/include/... X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/import-googletest-1.8.1: . bin/chmod bin/sh/tests/expansion contrib/binutils/opcodes contrib/elftoolchain/libelf contrib/ipfilter/ipsend/.OLD contrib/llvm/include/llvm/IR contrib/llvm/tool... X-SVN-Commit-Revision: 344999 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: D1A27758B4 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.96)[-0.964,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 03:03:03 -0000 Author: ngie Date: Mon Mar 11 03:02:58 2019 New Revision: 344999 URL: https://svnweb.freebsd.org/changeset/base/344999 Log: MFhead@r344996 Added: projects/import-googletest-1.8.1/contrib/ntp/libntp/xsbprintf.c - copied unchanged from r344996, head/contrib/ntp/libntp/xsbprintf.c projects/import-googletest-1.8.1/lib/libkvm/kvm_minidump_riscv.c - copied unchanged from r344996, head/lib/libkvm/kvm_minidump_riscv.c projects/import-googletest-1.8.1/lib/libkvm/kvm_riscv.h - copied unchanged from r344996, head/lib/libkvm/kvm_riscv.h projects/import-googletest-1.8.1/lib/libsecureboot/efi/ - copied from r344996, head/lib/libsecureboot/efi/ projects/import-googletest-1.8.1/sys/arm/allwinner/clkng/ccu_de2.c - copied unchanged from r344996, head/sys/arm/allwinner/clkng/ccu_de2.c projects/import-googletest-1.8.1/tests/sys/net/if_tun_test.sh - copied unchanged from r344996, head/tests/sys/net/if_tun_test.sh projects/import-googletest-1.8.1/tools/build/options/WITH_LOADER_EFI_SECUREBOOT - copied unchanged from r344996, head/tools/build/options/WITH_LOADER_EFI_SECUREBOOT projects/import-googletest-1.8.1/tools/tools/ath/athani/ - copied from r344996, head/tools/tools/ath/athani/ projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-apm.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-bsd.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-ebr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-gpt.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-mbr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-apm.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-bsd.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-ebr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-gpt.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-mbr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-apm.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-bsd.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-ebr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-gpt.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-mbr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-apm.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-bsd.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-ebr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-gpt.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-mbr.vmdk.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow2.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow2.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.raw.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.raw.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhd.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhd.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhdf.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhdf.hex projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vmdk.hex - copied unchanged from r344996, head/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vmdk.hex Deleted: projects/import-googletest-1.8.1/contrib/ipfilter/ipsend/.OLD/ projects/import-googletest-1.8.1/tools/kerneldoc/subsys/Doxyfile-dev_drm projects/import-googletest-1.8.1/tools/kerneldoc/subsys/Doxyfile-dev_drm2 projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-apm.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-bsd.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-ebr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-gpt.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-mbr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-4096-vtoc8.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-apm.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-bsd.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-ebr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-gpt.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-mbr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-1x1-512-vtoc8.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-apm.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-bsd.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-ebr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-gpt.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-mbr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-4096-vtoc8.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-apm.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-bsd.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-ebr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-gpt.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-mbr.vmdk.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.qcow2.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.raw.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhd.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vhdf.gz.uu projects/import-googletest-1.8.1/usr.bin/mkimg/tests/img-63x255-512-vtoc8.vmdk.gz.uu Modified: projects/import-googletest-1.8.1/UPDATING projects/import-googletest-1.8.1/bin/chmod/chmod.1 projects/import-googletest-1.8.1/bin/sh/tests/expansion/arith15.0 projects/import-googletest-1.8.1/contrib/binutils/opcodes/ppc-dis.c projects/import-googletest-1.8.1/contrib/elftoolchain/libelf/gelf_mips64el.c projects/import-googletest-1.8.1/contrib/llvm/include/llvm/IR/IntrinsicsX86.td projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/AST/APValue.h projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/AST/APValue.cpp projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/CodeGen/CGStmt.cpp projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/Sema/SemaStmtAsm.cpp projects/import-googletest-1.8.1/contrib/llvm/tools/lldb/include/lldb/Target/MemoryRegionInfo.h projects/import-googletest-1.8.1/contrib/netbsd-tests/lib/libpthread/t_cond.c projects/import-googletest-1.8.1/contrib/ntp/COPYRIGHT projects/import-googletest-1.8.1/contrib/ntp/ChangeLog projects/import-googletest-1.8.1/contrib/ntp/CommitLog projects/import-googletest-1.8.1/contrib/ntp/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/NEWS projects/import-googletest-1.8.1/contrib/ntp/aclocal.m4 projects/import-googletest-1.8.1/contrib/ntp/adjtimed/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/build projects/import-googletest-1.8.1/contrib/ntp/clockstuff/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/config.h.in projects/import-googletest-1.8.1/contrib/ntp/configure projects/import-googletest-1.8.1/contrib/ntp/configure.ac projects/import-googletest-1.8.1/contrib/ntp/include/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/include/isc/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/include/ntp_calendar.h projects/import-googletest-1.8.1/contrib/ntp/include/ntp_stdlib.h projects/import-googletest-1.8.1/contrib/ntp/include/ntpd.h projects/import-googletest-1.8.1/contrib/ntp/include/parse.h projects/import-googletest-1.8.1/contrib/ntp/kernel/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/kernel/sys/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/libntp/Makefile.am projects/import-googletest-1.8.1/contrib/ntp/libntp/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/libntp/authreadkeys.c projects/import-googletest-1.8.1/contrib/ntp/libntp/calyearstart.c projects/import-googletest-1.8.1/contrib/ntp/libntp/ntp_calendar.c projects/import-googletest-1.8.1/contrib/ntp/libntp/work_fork.c projects/import-googletest-1.8.1/contrib/ntp/libparse/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/libparse/clk_trimtsip.c projects/import-googletest-1.8.1/contrib/ntp/libparse/gpstolfp.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/invoke-ntp.conf.texi projects/import-googletest-1.8.1/contrib/ntp/ntpd/invoke-ntp.keys.texi projects/import-googletest-1.8.1/contrib/ntp/ntpd/invoke-ntpd.texi projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.conf.5man projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.conf.5mdoc projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.conf.html projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.conf.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.conf.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.keys.5man projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.keys.5mdoc projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.keys.html projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.keys.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp.keys.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_config.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_control.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_crypto.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_loopfilter.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_proto.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_request.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntp_timer.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd-opts.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd-opts.h projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.1ntpdman projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.1ntpdmdoc projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.html projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/ntpd.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/ntpd/refclock_bancomm.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/refclock_jupiter.c projects/import-googletest-1.8.1/contrib/ntp/ntpd/refclock_parse.c projects/import-googletest-1.8.1/contrib/ntp/ntpdate/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/ntpdate/ntpdate.c projects/import-googletest-1.8.1/contrib/ntp/ntpdc/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/ntpdc/invoke-ntpdc.texi projects/import-googletest-1.8.1/contrib/ntp/ntpdc/nl.pl projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc-opts.c projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc-opts.h projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc.1ntpdcman projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc.html projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/ntpdc/ntpdc_ops.c projects/import-googletest-1.8.1/contrib/ntp/ntpq/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/ntpq/invoke-ntpq.texi projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq-opts.c projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq-opts.h projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq.1ntpqman projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq.1ntpqmdoc projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq.html projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpq/ntpq.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd.html projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in projects/import-googletest-1.8.1/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/packageinfo.sh projects/import-googletest-1.8.1/contrib/ntp/parseutil/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/build/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/build/check--help projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/invoke-plot_summary.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/invoke-summary.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/lib/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait.html projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep.html projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace.html projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary.1plot_summaryman projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary.1plot_summarymdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary.html projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/plot_summary.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/summary-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/summary.1summaryman projects/import-googletest-1.8.1/contrib/ntp/scripts/summary.1summarymdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/summary.html projects/import-googletest-1.8.1/contrib/ntp/scripts/summary.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/summary.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/invoke-update-leap.texi projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap-opts projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap.1update-leapman projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap.html projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap.man.in projects/import-googletest-1.8.1/contrib/ntp/scripts/update-leap/update-leap.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/sntp/COPYRIGHT projects/import-googletest-1.8.1/contrib/ntp/sntp/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/aclocal.m4 projects/import-googletest-1.8.1/contrib/ntp/sntp/config.h.in projects/import-googletest-1.8.1/contrib/ntp/sntp/configure projects/import-googletest-1.8.1/contrib/ntp/sntp/include/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/include/version.def projects/import-googletest-1.8.1/contrib/ntp/sntp/include/version.texi projects/import-googletest-1.8.1/contrib/ntp/sntp/invoke-sntp.texi projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/aclocal.m4 projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/ar-lib projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/compile projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/config.guess projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/config.sub projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/depcomp projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/install-sh projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/missing projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/test-driver projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/build-aux/ylwrap projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/config.h.in projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/configure projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/evconfig-private.h projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/test/regress.gen.c projects/import-googletest-1.8.1/contrib/ntp/sntp/libevent/test/regress.gen.h projects/import-googletest-1.8.1/contrib/ntp/sntp/libopts/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/libopts/autoopts/options.h projects/import-googletest-1.8.1/contrib/ntp/sntp/libopts/genshell.h projects/import-googletest-1.8.1/contrib/ntp/sntp/m4/ntp_libntp.m4 projects/import-googletest-1.8.1/contrib/ntp/sntp/m4/version.m4 projects/import-googletest-1.8.1/contrib/ntp/sntp/main.c projects/import-googletest-1.8.1/contrib/ntp/sntp/networking.c projects/import-googletest-1.8.1/contrib/ntp/sntp/scm-rev projects/import-googletest-1.8.1/contrib/ntp/sntp/scripts/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp-opts.c projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp-opts.h projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp.1sntpman projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp.1sntpmdoc projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp.html projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp.man.in projects/import-googletest-1.8.1/contrib/ntp/sntp/sntp.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/sntp/tests/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/unity/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/sntp/version.c projects/import-googletest-1.8.1/contrib/ntp/util/Makefile.in projects/import-googletest-1.8.1/contrib/ntp/util/invoke-ntp-keygen.texi projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen-opts.c projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen-opts.h projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen.1ntp-keygenman projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen.html projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen.man.in projects/import-googletest-1.8.1/contrib/ntp/util/ntp-keygen.mdoc.in projects/import-googletest-1.8.1/contrib/ntp/util/ntptime.c projects/import-googletest-1.8.1/gnu/usr.bin/Makefile projects/import-googletest-1.8.1/gnu/usr.bin/binutils/Makefile projects/import-googletest-1.8.1/lib/clang/include/clang/Basic/Version.inc projects/import-googletest-1.8.1/lib/clang/include/lld/Common/Version.inc projects/import-googletest-1.8.1/lib/clang/include/llvm/Support/VCSRevision.h projects/import-googletest-1.8.1/lib/clang/libllvm/Makefile projects/import-googletest-1.8.1/lib/libc/tests/gen/makecontext_test.c projects/import-googletest-1.8.1/lib/libdevctl/devctl.3 projects/import-googletest-1.8.1/lib/libdevctl/devctl.c projects/import-googletest-1.8.1/lib/libdevctl/devctl.h projects/import-googletest-1.8.1/lib/libkvm/Makefile projects/import-googletest-1.8.1/lib/libkvm/kvm_aarch64.h projects/import-googletest-1.8.1/lib/libkvm/kvm_amd64.h projects/import-googletest-1.8.1/lib/libkvm/kvm_arm.h projects/import-googletest-1.8.1/lib/libkvm/kvm_i386.h projects/import-googletest-1.8.1/lib/libkvm/kvm_mips.h projects/import-googletest-1.8.1/lib/libkvm/kvm_native.3 projects/import-googletest-1.8.1/lib/libkvm/kvm_sparc64.h projects/import-googletest-1.8.1/lib/libsecureboot/Makefile.inc projects/import-googletest-1.8.1/lib/libsecureboot/Makefile.libsa.inc projects/import-googletest-1.8.1/lib/libsecureboot/h/verify_file.h projects/import-googletest-1.8.1/lib/libsecureboot/libsecureboot-priv.h projects/import-googletest-1.8.1/lib/libsecureboot/local.trust.mk projects/import-googletest-1.8.1/lib/libsecureboot/verify_file.c projects/import-googletest-1.8.1/lib/libsecureboot/vets.c projects/import-googletest-1.8.1/lib/libsysdecode/errno.c projects/import-googletest-1.8.1/lib/libsysdecode/signal.c projects/import-googletest-1.8.1/lib/libsysdecode/syscallnames.c projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode.h projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_abi_to_freebsd_errno.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_cap_rights.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_enum.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_fcntl_arg.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_ioctlname.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_kevent.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_mask.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_quotactl_cmd.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_sigcode.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_socket_protocol.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_sockopt_name.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_syscallnames.3 projects/import-googletest-1.8.1/lib/libsysdecode/sysdecode_utrace.3 projects/import-googletest-1.8.1/lib/libthr/thread/thr_cond.c projects/import-googletest-1.8.1/lib/libusb/libusb10.c projects/import-googletest-1.8.1/lib/libutil/kinfo_getvmobject.3 projects/import-googletest-1.8.1/sbin/fsck/fsck.8 projects/import-googletest-1.8.1/sbin/hastd/refcnt.h projects/import-googletest-1.8.1/sbin/ifconfig/Makefile projects/import-googletest-1.8.1/sbin/ifconfig/af_inet6.c projects/import-googletest-1.8.1/sbin/ifconfig/af_nd6.c projects/import-googletest-1.8.1/share/man/man3/sigevent.3 projects/import-googletest-1.8.1/share/man/man4/ktr.4 projects/import-googletest-1.8.1/share/man/man4/witness.4 projects/import-googletest-1.8.1/share/man/man5/src.conf.5 projects/import-googletest-1.8.1/share/man/man5/style.mdoc.5 projects/import-googletest-1.8.1/share/man/man9/BUS_GET_CPUS.9 projects/import-googletest-1.8.1/share/man/man9/BUS_RESCAN.9 projects/import-googletest-1.8.1/share/man/man9/atomic.9 projects/import-googletest-1.8.1/share/man/man9/bus_map_resource.9 projects/import-googletest-1.8.1/share/man/man9/critical_enter.9 projects/import-googletest-1.8.1/share/man/man9/ieee80211_radiotap.9 projects/import-googletest-1.8.1/share/man/man9/ithread.9 projects/import-googletest-1.8.1/share/man/man9/ktr.9 projects/import-googletest-1.8.1/share/man/man9/runqueue.9 projects/import-googletest-1.8.1/share/man/man9/scheduler.9 projects/import-googletest-1.8.1/share/man/man9/sleepqueue.9 projects/import-googletest-1.8.1/share/man/man9/swi.9 projects/import-googletest-1.8.1/share/misc/organization.dot projects/import-googletest-1.8.1/share/mk/src.opts.mk projects/import-googletest-1.8.1/stand/common/module.c projects/import-googletest-1.8.1/stand/efi/libefi/devpath.c projects/import-googletest-1.8.1/stand/efi/loader/Makefile projects/import-googletest-1.8.1/stand/efi/loader/bootinfo.c projects/import-googletest-1.8.1/stand/efi/loader/copy.c projects/import-googletest-1.8.1/stand/efi/loader/main.c projects/import-googletest-1.8.1/stand/i386/cdboot/cdboot.S projects/import-googletest-1.8.1/stand/i386/libi386/pxe.c projects/import-googletest-1.8.1/stand/i386/libi386/pxe.h projects/import-googletest-1.8.1/stand/i386/pxeldr/pxeldr.S projects/import-googletest-1.8.1/sys/amd64/amd64/vm_machdep.c projects/import-googletest-1.8.1/sys/amd64/conf/NOTES projects/import-googletest-1.8.1/sys/amd64/include/intr_machdep.h projects/import-googletest-1.8.1/sys/arm/allwinner/clkng/aw_clk_nm.c projects/import-googletest-1.8.1/sys/arm/allwinner/clkng/ccu_a64.c projects/import-googletest-1.8.1/sys/arm/arm/ptrace_machdep.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_label.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c projects/import-googletest-1.8.1/sys/conf/files projects/import-googletest-1.8.1/sys/conf/files.arm64 projects/import-googletest-1.8.1/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_ani.c projects/import-googletest-1.8.1/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_misc.c projects/import-googletest-1.8.1/sys/dev/acpica/acpi_isab.c projects/import-googletest-1.8.1/sys/dev/acpica/acpi_pcivar.h projects/import-googletest-1.8.1/sys/dev/ath/ath_hal/ah.h projects/import-googletest-1.8.1/sys/dev/ath/if_athioctl.h projects/import-googletest-1.8.1/sys/dev/bwi/if_bwi.c projects/import-googletest-1.8.1/sys/dev/bwi/if_bwivar.h projects/import-googletest-1.8.1/sys/dev/bwn/if_bwn.c projects/import-googletest-1.8.1/sys/dev/bwn/if_bwnvar.h projects/import-googletest-1.8.1/sys/dev/e1000/if_em.c projects/import-googletest-1.8.1/sys/dev/flash/at45d.c projects/import-googletest-1.8.1/sys/dev/flash/mx25l.c projects/import-googletest-1.8.1/sys/dev/ipw/if_ipwvar.h projects/import-googletest-1.8.1/sys/dev/iwi/if_iwivar.h projects/import-googletest-1.8.1/sys/dev/iwm/if_iwmvar.h projects/import-googletest-1.8.1/sys/dev/iwn/if_iwn.c projects/import-googletest-1.8.1/sys/dev/iwn/if_iwnvar.h projects/import-googletest-1.8.1/sys/dev/malo/if_maloioctl.h projects/import-googletest-1.8.1/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c projects/import-googletest-1.8.1/sys/dev/mwl/if_mwlioctl.h projects/import-googletest-1.8.1/sys/dev/nvme/nvme_ctrlr.c projects/import-googletest-1.8.1/sys/dev/nvme/nvme_private.h projects/import-googletest-1.8.1/sys/dev/nvme/nvme_qpair.c projects/import-googletest-1.8.1/sys/dev/otus/if_otus.c projects/import-googletest-1.8.1/sys/dev/otus/if_otusreg.h projects/import-googletest-1.8.1/sys/dev/pci/vga_pci.c projects/import-googletest-1.8.1/sys/dev/ral/rt2560var.h projects/import-googletest-1.8.1/sys/dev/ral/rt2661var.h projects/import-googletest-1.8.1/sys/dev/ral/rt2860var.h projects/import-googletest-1.8.1/sys/dev/random/fortuna.c projects/import-googletest-1.8.1/sys/dev/random/hash.c projects/import-googletest-1.8.1/sys/dev/random/hash.h projects/import-googletest-1.8.1/sys/dev/random/uint128.h projects/import-googletest-1.8.1/sys/dev/rc/rc.c projects/import-googletest-1.8.1/sys/dev/rc/rcreg.h projects/import-googletest-1.8.1/sys/dev/rtwn/if_rtwn.c projects/import-googletest-1.8.1/sys/dev/rtwn/if_rtwnvar.h projects/import-googletest-1.8.1/sys/dev/smartpqi/smartpqi_cam.c projects/import-googletest-1.8.1/sys/dev/usb/usbdevs projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_rsu.c projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_rsureg.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_rumvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_run.c projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_runvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_uathvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_upgtvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_uralvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_urtw.c projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_urtwvar.h projects/import-googletest-1.8.1/sys/dev/usb/wlan/if_zydreg.h projects/import-googletest-1.8.1/sys/dev/wi/if_wireg.h projects/import-googletest-1.8.1/sys/dev/wpi/if_wpivar.h projects/import-googletest-1.8.1/sys/dev/wtap/if_wtapioctl.h projects/import-googletest-1.8.1/sys/fs/fuse/fuse_io.c projects/import-googletest-1.8.1/sys/fs/fuse/fuse_vfsops.c projects/import-googletest-1.8.1/sys/fs/fuse/fuse_vnops.c projects/import-googletest-1.8.1/sys/geom/part/g_part_gpt.c projects/import-googletest-1.8.1/sys/gnu/gcov/gcc_4_7.c projects/import-googletest-1.8.1/sys/gnu/gcov/gcov_fs.c projects/import-googletest-1.8.1/sys/i386/i386/vm_machdep.c projects/import-googletest-1.8.1/sys/i386/pci/pci_pir.c projects/import-googletest-1.8.1/sys/kern/kern_ktr.c projects/import-googletest-1.8.1/sys/kern/kern_proc.c projects/import-googletest-1.8.1/sys/kern/kern_rwlock.c projects/import-googletest-1.8.1/sys/kern/subr_lock.c projects/import-googletest-1.8.1/sys/kern/subr_sleepqueue.c projects/import-googletest-1.8.1/sys/kern/subr_smp.c projects/import-googletest-1.8.1/sys/net/if_arp.h projects/import-googletest-1.8.1/sys/net/if_ethersubr.c projects/import-googletest-1.8.1/sys/net/if_tun.c projects/import-googletest-1.8.1/sys/net/iflib.c projects/import-googletest-1.8.1/sys/net/pfil.c projects/import-googletest-1.8.1/sys/net/pfil.h projects/import-googletest-1.8.1/sys/netinet/if_ether.c projects/import-googletest-1.8.1/sys/netinet/sctp_ss_functions.c projects/import-googletest-1.8.1/sys/netinet/sctp_usrreq.c projects/import-googletest-1.8.1/sys/netinet6/in6_proto.c projects/import-googletest-1.8.1/sys/netinet6/ip6_var.h projects/import-googletest-1.8.1/sys/netinet6/nd6.c projects/import-googletest-1.8.1/sys/netinet6/nd6.h projects/import-googletest-1.8.1/sys/netinet6/nd6_rtr.c projects/import-googletest-1.8.1/sys/netpfil/ipfw/ip_fw_dynamic.c projects/import-googletest-1.8.1/sys/netpfil/pf/pf_ioctl.c projects/import-googletest-1.8.1/sys/powerpc/aim/trap_subr64.S projects/import-googletest-1.8.1/sys/powerpc/cpufreq/dfs.c projects/import-googletest-1.8.1/sys/powerpc/cpufreq/pcr.c projects/import-googletest-1.8.1/sys/powerpc/powerpc/db_trace.c projects/import-googletest-1.8.1/sys/powerpc/powerpc/swtch32.S projects/import-googletest-1.8.1/sys/powerpc/powerpc/swtch64.S projects/import-googletest-1.8.1/sys/powerpc/powerpc/trap.c projects/import-googletest-1.8.1/sys/riscv/riscv/minidump_machdep.c projects/import-googletest-1.8.1/sys/riscv/riscv/pmap.c projects/import-googletest-1.8.1/sys/riscv/riscv/uma_machdep.c projects/import-googletest-1.8.1/sys/sys/_rwlock.h projects/import-googletest-1.8.1/sys/sys/refcount.h projects/import-googletest-1.8.1/sys/sys/rwlock.h projects/import-googletest-1.8.1/sys/sys/sleepqueue.h projects/import-googletest-1.8.1/sys/sys/socketvar.h projects/import-googletest-1.8.1/sys/sys/turnstile.h projects/import-googletest-1.8.1/sys/sys/user.h projects/import-googletest-1.8.1/sys/vm/vm_page.c projects/import-googletest-1.8.1/sys/x86/acpica/madt.c projects/import-googletest-1.8.1/sys/x86/include/apicvar.h projects/import-googletest-1.8.1/sys/x86/include/intr_machdep.h projects/import-googletest-1.8.1/sys/x86/isa/atpic.c projects/import-googletest-1.8.1/sys/x86/isa/atrtc.c projects/import-googletest-1.8.1/sys/x86/isa/elcr.c projects/import-googletest-1.8.1/sys/x86/x86/intr_machdep.c projects/import-googletest-1.8.1/sys/x86/x86/io_apic.c projects/import-googletest-1.8.1/sys/x86/x86/local_apic.c projects/import-googletest-1.8.1/sys/x86/x86/mptable.c projects/import-googletest-1.8.1/sys/x86/x86/mptable_pci.c projects/import-googletest-1.8.1/sys/x86/xen/pvcpu_enum.c projects/import-googletest-1.8.1/tests/sys/capsicum/ioctls_test.c projects/import-googletest-1.8.1/tests/sys/kern/ptrace_test.c projects/import-googletest-1.8.1/tests/sys/net/Makefile projects/import-googletest-1.8.1/tests/sys/netpfil/pf/pft_ping.py projects/import-googletest-1.8.1/tools/tools/ath/Makefile projects/import-googletest-1.8.1/tools/tools/decioctl/decioctl.c projects/import-googletest-1.8.1/usr.bin/ctlstat/ctlstat.c projects/import-googletest-1.8.1/usr.bin/mkimg/gpt.c projects/import-googletest-1.8.1/usr.bin/mkimg/tests/Makefile projects/import-googletest-1.8.1/usr.bin/mkimg/tests/mkimg_test.sh projects/import-googletest-1.8.1/usr.bin/ncal/ncal.1 projects/import-googletest-1.8.1/usr.bin/netstat/inet.c projects/import-googletest-1.8.1/usr.bin/procstat/procstat.1 projects/import-googletest-1.8.1/usr.bin/procstat/procstat_vm.c projects/import-googletest-1.8.1/usr.bin/seq/seq.c projects/import-googletest-1.8.1/usr.bin/seq/tests/seq_test.sh projects/import-googletest-1.8.1/usr.sbin/bhyve/gdb.c projects/import-googletest-1.8.1/usr.sbin/bhyve/gdb.h projects/import-googletest-1.8.1/usr.sbin/devctl/devctl.8 projects/import-googletest-1.8.1/usr.sbin/devctl/devctl.c projects/import-googletest-1.8.1/usr.sbin/efivar/efivar.8 projects/import-googletest-1.8.1/usr.sbin/freebsd-update/freebsd-update.8 projects/import-googletest-1.8.1/usr.sbin/ntp/libntp/Makefile projects/import-googletest-1.8.1/usr.sbin/rtadvctl/rtadvctl.8 Directory Properties: projects/import-googletest-1.8.1/ (props changed) projects/import-googletest-1.8.1/contrib/binutils/ (props changed) projects/import-googletest-1.8.1/contrib/compiler-rt/ (props changed) projects/import-googletest-1.8.1/contrib/compiler-rt/lib/fuzzer/ (props changed) projects/import-googletest-1.8.1/contrib/elftoolchain/ (props changed) projects/import-googletest-1.8.1/contrib/ipfilter/ (props changed) projects/import-googletest-1.8.1/contrib/libc++/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/tools/clang/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/tools/lld/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/tools/lldb/ (props changed) projects/import-googletest-1.8.1/contrib/netbsd-tests/ (props changed) projects/import-googletest-1.8.1/contrib/ntp/ (props changed) projects/import-googletest-1.8.1/gnu/usr.bin/binutils/ (props changed) projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/import-googletest-1.8.1/UPDATING ============================================================================== --- projects/import-googletest-1.8.1/UPDATING Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/UPDATING Mon Mar 11 03:02:58 2019 (r344999) @@ -133,8 +133,8 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: Other than KPI chasing, drm-legacy-kmod will not be updated. As outlined elsewhere, the drm and drm2 modules will be eliminated from the src base - soon (with a limited exception for arm). Please update to the package asap - and report any issues to x11@freebsd.org. + soon (with a limited exception for arm). Please update to the package + asap and report any issues to x11@freebsd.org. Generally, anybody using the drm*-kmod packages should add WITHOUT_DRM_MODULE=t and WITHOUT_DRM2_MODULE=t to avoid nasty @@ -309,7 +309,8 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: 20180628: r335753 introduced a new quoting method. However, etc/devd/devmatch.conf needed to be changed to work with it. This change was made with r335763 - and requires a mergemaster / etcupdate / etc to update the installed file. + and requires a mergemaster / etcupdate / etc to update the installed + file. 20180612: r334930 changed the interface between the NFS modules, so they all @@ -450,8 +451,9 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: 20180211: devmatch functionality has been turned on in devd. It will automatically - load drivers for unattached devices. This may cause unexpected drivers to - be loaded. Please report any problems to current@ and imp@freebsd.org. + load drivers for unattached devices. This may cause unexpected drivers + to be loaded. Please report any problems to current@ and + imp@freebsd.org. 20180114: Clang, llvm, lld, lldb, compiler-rt and libc++ have been upgraded to @@ -469,9 +471,9 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: 20180110: On i386, pmtimer has been removed. Its functionality has been folded - into apm. It was a no-op on ACPI in current for a while now (but was still - needed on i386 in FreeBSD 11 and earlier). Users may need to remove it - from kernel config files. + into apm. It was a no-op on ACPI in current for a while now (but was + still needed on i386 in FreeBSD 11 and earlier). Users may need to + remove it from kernel config files. 20180104: The use of RSS hash from the network card aka flowid has been @@ -712,11 +714,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: system will be running the ino64 kernel with the existing world). For the safest in-place upgrade begin by removing previous build - artifacts via "rm -rf /usr/obj/*". Then, carefully follow the - full procedure documented below under the heading "To rebuild - everything and install it on the current system." Specifically, - a reboot is required after installing the new kernel before - installing world. + artifacts via "rm -rf /usr/obj/*". Then, carefully follow the full + procedure documented below under the heading "To rebuild everything and + install it on the current system." Specifically, a reboot is required + after installing the new kernel before installing world. While an + installworld normally works by accident from multiuser after rebooting + the proper kernel, there are many cases where this will fail across this + upgrade and installworld from single user is required. 20170424: The NATM framework including the en(4), fatm(4), hatm(4), and @@ -813,7 +817,8 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: 20170109: The igb(4), em(4) and lem(4) ethernet drivers are now implemented via IFLIB. If you have a custom kernel configuration that excludes em(4) - but you use igb(4), you need to re-add em(4) to your custom configuration. + but you use igb(4), you need to re-add em(4) to your custom + configuration. 20161217: Clang, llvm, lldb, compiler-rt and libc++ have been upgraded to 3.9.1. @@ -1901,7 +1906,8 @@ COMMON ITEMS: fsck -p mount -u / mount -a - cd src + sh /etc/rc.d/zfs start # mount zfs filesystem, if needed + cd src # full path to source adjkerntz -i # if CMOS is wall time Also, when doing a major release upgrade, it is required that you boot into single user mode to do the installworld. @@ -1931,10 +1937,12 @@ COMMON ITEMS: option for existing binaries (e.g. COMPAT_FREEBSD11 to run 11.x binaries). Failure to do so may leave you with a system that is hard to boot to recover. A GENERIC kernel will include suitable - compatibility options to run binaries from older branches. + compatibility options to run binaries from supported older branches. Make sure that you merge any new devices from GENERIC since the - last time you updated your kernel config file. + last time you updated your kernel config file. Options also + change over time, so you may need to adjust your custom kernels + for these as well. [9] If CPUTYPE is defined in your /etc/make.conf, make sure to use the "?=" instead of the "=" assignment operator, so that buildworld can Modified: projects/import-googletest-1.8.1/bin/chmod/chmod.1 ============================================================================== --- projects/import-googletest-1.8.1/bin/chmod/chmod.1 Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/bin/chmod/chmod.1 Mon Mar 11 03:02:58 2019 (r344999) @@ -259,7 +259,7 @@ If no value is supplied for each permission bit specified in .Ar perm , for which the corresponding bit in the file mode creation mask -is clear, is cleared. +is set, is cleared. Otherwise, the mode bits represented by the specified .Ar who and Modified: projects/import-googletest-1.8.1/bin/sh/tests/expansion/arith15.0 ============================================================================== --- projects/import-googletest-1.8.1/bin/sh/tests/expansion/arith15.0 Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/bin/sh/tests/expansion/arith15.0 Mon Mar 11 03:02:58 2019 (r344999) @@ -12,9 +12,9 @@ check() { XXX=-9223372036854775808 check "XXX" -9223372036854775808 check "XXX - 1" 9223372036854775807 -check $(($XXX - 1)) 9223372036854775807 -check $(($XXX - 2)) 9223372036854775806 -check $((0x8000000000000000 == 0x7fffffffffffffff)) \ +check "$XXX - 1" 9223372036854775807 +check "$XXX - 2" 9223372036854775806 +check "0x8000000000000000 == 0x7fffffffffffffff" \ 0 exit $((failures != 0)) Modified: projects/import-googletest-1.8.1/contrib/binutils/opcodes/ppc-dis.c ============================================================================== --- projects/import-googletest-1.8.1/contrib/binutils/opcodes/ppc-dis.c Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/binutils/opcodes/ppc-dis.c Mon Mar 11 03:02:58 2019 (r344999) @@ -20,6 +20,7 @@ along with this file; see the file COPYING. If not, w Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include +#include #include "sysdep.h" #include "dis-asm.h" #include "opcode/ppc.h" @@ -97,7 +98,7 @@ powerpc_dialect (struct disassemble_info *info) dialect |= PPC_OPCODE_64; } - info->private_data = (char *) 0 + dialect; + info->private_data = (void *)(uintptr_t)dialect; return dialect; } Modified: projects/import-googletest-1.8.1/contrib/elftoolchain/libelf/gelf_mips64el.c ============================================================================== --- projects/import-googletest-1.8.1/contrib/elftoolchain/libelf/gelf_mips64el.c Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/elftoolchain/libelf/gelf_mips64el.c Mon Mar 11 03:02:58 2019 (r344999) @@ -1,6 +1,5 @@ /*- * Copyright (c) 2018 John Baldwin - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: projects/import-googletest-1.8.1/contrib/llvm/include/llvm/IR/IntrinsicsX86.td ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/include/llvm/IR/IntrinsicsX86.td Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/llvm/include/llvm/IR/IntrinsicsX86.td Mon Mar 11 03:02:58 2019 (r344999) @@ -1677,71 +1677,73 @@ let TargetPrefix = "x86" in { // All intrinsics start // Gather ops let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">, Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">, Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">, Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">, Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">, Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">, Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">, Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">, Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">, Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">, Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; } // Misc. @@ -3564,530 +3566,542 @@ let TargetPrefix = "x86" in { // Gather and Scatter ops let TargetPrefix = "x86" in { // NOTE: These are deprecated in favor of the versions that take a vXi1 mask. + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_gather_dpd_512 : GCCBuiltin<"__builtin_ia32_gathersiv8df">, Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_dps_512 : GCCBuiltin<"__builtin_ia32_gathersiv16sf">, Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8df">, Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_qps_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">, Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_dpq_512 : GCCBuiltin<"__builtin_ia32_gathersiv8di">, Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_dpi_512 : GCCBuiltin<"__builtin_ia32_gathersiv16si">, Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_qpq_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8di">, Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather_qpi_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16si">, Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div2_df : GCCBuiltin<"__builtin_ia32_gather3div2df">, Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div2_di : GCCBuiltin<"__builtin_ia32_gather3div2di">, Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div4_df : GCCBuiltin<"__builtin_ia32_gather3div4df">, Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div4_di : GCCBuiltin<"__builtin_ia32_gather3div4di">, Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div4_sf : GCCBuiltin<"__builtin_ia32_gather3div4sf">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div4_si : GCCBuiltin<"__builtin_ia32_gather3div4si">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div8_sf : GCCBuiltin<"__builtin_ia32_gather3div8sf">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3div8_si : GCCBuiltin<"__builtin_ia32_gather3div8si">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv2_df : GCCBuiltin<"__builtin_ia32_gather3siv2df">, Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv2_di : GCCBuiltin<"__builtin_ia32_gather3siv2di">, Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv4_df : GCCBuiltin<"__builtin_ia32_gather3siv4df">, Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv4_di : GCCBuiltin<"__builtin_ia32_gather3siv4di">, Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv4_sf : GCCBuiltin<"__builtin_ia32_gather3siv4sf">, Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv4_si : GCCBuiltin<"__builtin_ia32_gather3siv4si">, Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv8_sf : GCCBuiltin<"__builtin_ia32_gather3siv8sf">, Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_gather3siv8_si : GCCBuiltin<"__builtin_ia32_gather3siv8si">, Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; // scatter // NOTE: These are deprecated in favor of the versions that take a vXi1 mask. + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_scatter_dpd_512 : GCCBuiltin<"__builtin_ia32_scattersiv8df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_dps_512 : GCCBuiltin<"__builtin_ia32_scattersiv16sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_qps_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_dpq_512 : GCCBuiltin<"__builtin_ia32_scattersiv8di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_dpi_512 : GCCBuiltin<"__builtin_ia32_scattersiv16si">, Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_qpq_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatter_qpi_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16si">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv2_df : GCCBuiltin<"__builtin_ia32_scatterdiv2df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv2_di : GCCBuiltin<"__builtin_ia32_scatterdiv2di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv4_df : GCCBuiltin<"__builtin_ia32_scatterdiv4df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv4_di : GCCBuiltin<"__builtin_ia32_scatterdiv4di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv4_sf : GCCBuiltin<"__builtin_ia32_scatterdiv4sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv4_si : GCCBuiltin<"__builtin_ia32_scatterdiv4si">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv8_sf : GCCBuiltin<"__builtin_ia32_scatterdiv8sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scatterdiv8_si : GCCBuiltin<"__builtin_ia32_scatterdiv8si">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv2_df : GCCBuiltin<"__builtin_ia32_scattersiv2df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv2_di : GCCBuiltin<"__builtin_ia32_scattersiv2di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv4_df : GCCBuiltin<"__builtin_ia32_scattersiv4df">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv4_di : GCCBuiltin<"__builtin_ia32_scattersiv4di">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv4_sf : GCCBuiltin<"__builtin_ia32_scattersiv4sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv4_si : GCCBuiltin<"__builtin_ia32_scattersiv4si">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv8_sf : GCCBuiltin<"__builtin_ia32_scattersiv8sf">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_scattersiv8_si : GCCBuiltin<"__builtin_ia32_scattersiv8si">, Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; // gather prefetch + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_gatherpf_dpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfdpd">, Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_gatherpf_dps_512 : GCCBuiltin<"__builtin_ia32_gatherpfdps">, Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_gatherpf_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfqpd">, Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_gatherpf_qps_512 : GCCBuiltin<"__builtin_ia32_gatherpfqps">, Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; // scatter prefetch + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_scatterpf_dpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfdpd">, Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_scatterpf_dps_512 : GCCBuiltin<"__builtin_ia32_scatterpfdps">, Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_scatterpf_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfqpd">, Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; def int_x86_avx512_scatterpf_qps_512 : GCCBuiltin<"__builtin_ia32_scatterpfqps">, Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, - llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; + llvm_i32_ty, llvm_i32_ty], []>; } // AVX512 gather/scatter intrinsics that use vXi1 masks. let TargetPrefix = "x86" in { + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_mask_gather_dpd_512 : Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_dps_512 : Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty, llvm_v16i32_ty, llvm_v16i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_qpd_512 : Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_qps_512 : Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_dpq_512 : Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_dpi_512 : Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty, llvm_v16i32_ty, llvm_v16i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_qpq_512 : Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather_qpi_512 : Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i64_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div2_df : Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div2_di : Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div4_df : Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div4_di : Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div4_sf : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div4_si : Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div8_sf : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3div8_si : Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv2_df : Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv2_di : Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv4_df : Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv4_di : Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv4_sf : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv4_si : Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv8_sf : Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_gather3siv8_si : Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i1_ty, llvm_i32_ty], - [IntrReadMem, IntrArgMemOnly]>; + [IntrReadMem]>; def int_x86_avx512_mask_scatter_dpd_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_dps_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v16i1_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_qpd_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_qps_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; + // NOTE: These can't be ArgMemOnly because you can put the address completely + // in the index register. def int_x86_avx512_mask_scatter_dpq_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_dpi_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v16i1_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_qpq_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty,llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatter_qpi_512 : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i64_ty, llvm_v8i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv2_df : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv2_di : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv4_df : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv4_di : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv4_sf : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv4_si : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv8_sf : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scatterdiv8_si : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv2_df : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv2_di : Intrinsic<[], [llvm_ptr_ty, llvm_v2i1_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv4_df : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv4_di : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv4_sf : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv4_si : Intrinsic<[], [llvm_ptr_ty, llvm_v4i1_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv8_sf : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; def int_x86_avx512_mask_scattersiv8_si : Intrinsic<[], [llvm_ptr_ty, llvm_v8i1_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], - [IntrArgMemOnly]>; + []>; } // AVX-512 conflict detection instruction Modified: projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/AST/APValue.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/AST/APValue.h Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/AST/APValue.h Mon Mar 11 03:02:58 2019 (r344999) @@ -257,6 +257,12 @@ class APValue { (public) return const_cast(this)->getInt(); } + /// Try to convert this value to an integral constant. This works if it's an + /// integer, null pointer, or offset from a null pointer. Returns true on + /// success. + bool toIntegralConstant(APSInt &Result, QualType SrcTy, + const ASTContext &Ctx) const; + APFloat &getFloat() { assert(isFloat() && "Invalid accessor"); return *(APFloat*)(char*)Data.buffer; Modified: projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h Mon Mar 11 03:02:58 2019 (r344999) @@ -807,6 +807,7 @@ class TargetInfo : public RefCountedBase { struct { int Min; int Max; + bool isConstrained; } ImmRange; llvm::SmallSet ImmSet; @@ -817,6 +818,7 @@ class TargetInfo : public RefCountedBase { : Flags(0), TiedOperand(-1), ConstraintStr(ConstraintStr.str()), Name(Name.str()) { ImmRange.Min = ImmRange.Max = 0; + ImmRange.isConstrained = false; } const std::string &getConstraintStr() const { return ConstraintStr; } @@ -845,8 +847,9 @@ class TargetInfo : public RefCountedBase { return (Flags & CI_ImmediateConstant) != 0; } bool isValidAsmImmediate(const llvm::APInt &Value) const { - return (Value.sge(ImmRange.Min) && Value.sle(ImmRange.Max)) || - ImmSet.count(Value.getZExtValue()) != 0; + if (!ImmSet.empty()) + return ImmSet.count(Value.getZExtValue()) != 0; + return !ImmRange.isConstrained || (Value.sge(ImmRange.Min) && Value.sle(ImmRange.Max)); } void setIsReadWrite() { Flags |= CI_ReadWrite; } @@ -858,6 +861,7 @@ class TargetInfo : public RefCountedBase { Flags |= CI_ImmediateConstant; ImmRange.Min = Min; ImmRange.Max = Max; + ImmRange.isConstrained = true; } void setRequiresImmediate(llvm::ArrayRef Exacts) { Flags |= CI_ImmediateConstant; @@ -870,8 +874,6 @@ class TargetInfo : public RefCountedBase { } void setRequiresImmediate() { Flags |= CI_ImmediateConstant; - ImmRange.Min = INT_MIN; - ImmRange.Max = INT_MAX; } /// Indicate that this is an input operand that is tied to Modified: projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td Mon Mar 11 03:02:58 2019 (r344999) @@ -395,7 +395,9 @@ def _SLASH_Zo_ : CLIgnoredFlag<"Zo-">; // Unsupported: -def _SLASH_AI : CLJoined<"AI">; +def _SLASH_await : CLFlag<"await">; +def _SLASH_constexpr : CLJoined<"constexpr:">; +def _SLASH_AI : CLJoinedOrSeparate<"AI">; def _SLASH_Bt : CLFlag<"Bt">; def _SLASH_Bt_plus : CLFlag<"Bt+">; def _SLASH_clr : CLJoined<"clr">; @@ -430,6 +432,9 @@ def _SLASH_Qfast_transcendentals : CLFlag<"Qfast_trans def _SLASH_QIfist : CLFlag<"QIfist">; def _SLASH_Qimprecise_fwaits : CLFlag<"Qimprecise_fwaits">; def _SLASH_Qpar : CLFlag<"Qpar">; +def _SLASH_Qpar_report : CLJoined<"Qpar-report">; +def _SLASH_Qsafe_fp_loads : CLFlag<"Qsafe_fp_loads">; +def _SLASH_Qspectre : CLFlag<"Qspectre">; def _SLASH_Qvec_report : CLJoined<"Qvec-report">; def _SLASH_u : CLFlag<"u">; def _SLASH_V : CLFlag<"V">; Modified: projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/AST/APValue.cpp ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/AST/APValue.cpp Mon Mar 11 03:01:58 2019 (r344998) +++ projects/import-googletest-1.8.1/contrib/llvm/tools/clang/lib/AST/APValue.cpp Mon Mar 11 03:02:58 2019 (r344999) @@ -600,6 +600,26 @@ std::string APValue::getAsString(ASTContext &Ctx, Qual return Result; } +bool APValue::toIntegralConstant(APSInt &Result, QualType SrcTy, + const ASTContext &Ctx) const { + if (isInt()) { + Result = getInt(); + return true; + } + + if (isLValue() && isNullPointer()) { + Result = Ctx.MakeIntValue(Ctx.getTargetNullPointerValue(SrcTy), SrcTy); + return true; + } + + if (isLValue() && !getLValueBase()) { + Result = Ctx.MakeIntValue(getLValueOffset().getQuantity(), SrcTy); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Mar 11 18:28:22 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 545D51528F32 for ; Mon, 11 Mar 2019 18:28:22 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0283274AF1; Mon, 11 Mar 2019 18:28:22 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E6A1CE9EF; Mon, 11 Mar 2019 18:28:21 +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 x2BISLb5032452; Mon, 11 Mar 2019 18:28:21 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BISKh7032445; Mon, 11 Mar 2019 18:28:20 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903111828.x2BISKh7032445@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Mon, 11 Mar 2019 18:28:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345017 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345017 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0283274AF1 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.968,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 18:28:22 -0000 Author: asomers Date: Mon Mar 11 18:28:20 2019 New Revision: 345017 URL: https://svnweb.freebsd.org/changeset/base/345017 Log: fuse(4): add tests for FUSE_READ PR: 236379 PR: 236466 PR: 236472 Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/read.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Mon Mar 11 18:28:20 2019 (r345017) @@ -13,6 +13,7 @@ ATF_TESTS_CXX+= lookup ATF_TESTS_CXX+= mkdir ATF_TESTS_CXX+= mknod ATF_TESTS_CXX+= open +ATF_TESTS_CXX+= read ATF_TESTS_CXX+= readlink ATF_TESTS_CXX+= release ATF_TESTS_CXX+= rename @@ -67,6 +68,11 @@ SRCS.open+= getmntopts.c SRCS.open+= mockfs.cc SRCS.open+= open.cc SRCS.open+= utils.cc + +SRCS.read+= getmntopts.c +SRCS.read+= mockfs.cc +SRCS.read+= read.cc +SRCS.read+= utils.cc SRCS.readlink+= getmntopts.c SRCS.readlink+= mockfs.cc Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 18:28:20 2019 (r345017) @@ -165,12 +165,13 @@ void debug_fuseop(const mockfs_buf_in *in) printf("\n"); } -MockFS::MockFS() { +MockFS::MockFS(int max_readahead) { struct iovec *iov = NULL; int iovlen = 0; char fdstr[15]; m_daemon_id = NULL; + m_maxreadahead = max_readahead; quit = 0; /* @@ -247,8 +248,7 @@ void MockFS::init() { m_max_write = MIN(default_max_write, MAXPHYS / 2); out->body.init.max_write = m_max_write; - /* Default max_readahead is UINT_MAX, though it can be lowered */ - out->body.init.max_readahead = UINT_MAX; + out->body.init.max_readahead = m_maxreadahead; SET_OUT_HEADER_LEN(out, init); write(m_fuse_fd, out, out->header.len); Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 18:28:20 2019 (r345017) @@ -99,7 +99,7 @@ union fuse_payloads_out { fuse_attr_out attr; fuse_create_out create; /* The protocol places no limits on the size of bytes */ - uint8_t bytes[0x2000]; + uint8_t bytes[0x20000]; fuse_entry_out entry; fuse_init_out init; fuse_open_out open; @@ -152,6 +152,9 @@ class MockFS { /* file descriptor of /dev/fuse control device */ int m_fuse_fd; + /* The max_readahead filesystem option */ + uint32_t m_maxreadahead; + /* pid of the test process */ pid_t m_pid; @@ -175,7 +178,7 @@ class MockFS { uint32_t m_max_write; /* Create a new mockfs and mount it to a tempdir */ - MockFS(); + MockFS(int max_readahead); virtual ~MockFS(); /* Kill the filesystem daemon without unmounting the filesystem */ Added: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Mon Mar 11 18:28:20 2019 (r345017) @@ -0,0 +1,566 @@ +/*- + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +#include +#include +#include + +#include +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +class Read: public FuseTest { + +public: +const static uint64_t FH = 0xdeadbeef1a7ebabe; +void expect_getattr(uint64_t ino, uint64_t size) +{ + /* Until the attr cache is working, we may send an additional GETATTR */ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_GETATTR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + out->body.attr.attr.mode = S_IFREG | 0644; + out->body.attr.attr.size = size; + })); + +} + +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFREG | 0644; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_open(uint64_t ino, uint32_t flags, int times) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPEN && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).Times(times) + .WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = Read::FH; + out->body.open.open_flags = flags; + })); +} + +void expect_read(uint64_t ino, uint64_t offset, uint64_t isize, uint64_t osize, + const void *contents) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == Read::FH && + in->body.read.offset == offset && + in->body.read.size == isize); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(struct fuse_out_header) + osize; + memmove(out->body.bytes, contents, osize); + })).RetiresOnSaturation(); +} +}; + +class AioRead: public Read { +virtual void SetUp() { + const char *node = "vfs.aio.enable_unsafe"; + int val = 0; + size_t size = sizeof(val); + + ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0)) + << strerror(errno); + // TODO: With GoogleTest 1.8.2, use SKIP instead + if (!val) + FAIL() << "vfs.aio.enable_unsafe must be set for this test"; + FuseTest::SetUp(); +} +}; + +class ReadAhead: public Read, public WithParamInterface { + virtual void SetUp() { + m_maxreadahead = GetParam(); + Read::SetUp(); + } +}; + +/* AIO reads need to set the header's pid field correctly */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236379 */ +TEST_F(AioRead, aio_read) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + struct aiocb iocb, *piocb; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + iocb.aio_nbytes = bufsize; + iocb.aio_fildes = fd; + iocb.aio_buf = buf; + iocb.aio_offset = 0; + iocb.aio_sigevent.sigev_notify = SIGEV_NONE; + ASSERT_EQ(0, aio_read(&iocb)) << strerror(errno); + ASSERT_EQ(bufsize, aio_waitcomplete(&piocb, NULL)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* 0-length reads shouldn't cause any confusion */ +TEST_F(Read, direct_io_read_nothing) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + uint64_t offset = 100; + char buf[80]; + + expect_lookup(RELPATH, ino); + expect_open(ino, FOPEN_DIRECT_IO, 1); + expect_getattr(ino, offset + 1000); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(0, pread(fd, buf, 0, offset)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * With direct_io, reads should not fill the cache. They should go straight to + * the daemon + */ +TEST_F(Read, direct_io_pread) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + uint64_t offset = 100; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, FOPEN_DIRECT_IO, 1); + expect_getattr(ino, offset + bufsize); + expect_read(ino, offset, bufsize, bufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, pread(fd, buf, bufsize, offset)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * With direct_io, filesystems are allowed to return less data than is + * requested. fuse(4) should return a short read to userland. + */ +TEST_F(Read, direct_io_short_read) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefghijklmnop"; + uint64_t ino = 42; + int fd; + uint64_t offset = 100; + ssize_t bufsize = strlen(CONTENTS); + ssize_t halfbufsize = bufsize / 2; + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, FOPEN_DIRECT_IO, 1); + expect_getattr(ino, offset + bufsize); + expect_read(ino, offset, bufsize, halfbufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(halfbufsize, pread(fd, buf, bufsize, offset)) + << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, halfbufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +TEST_F(Read, eio) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EIO))); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(-1, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(EIO, errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +TEST_F(Read, mmap) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t len; + ssize_t bufsize = strlen(CONTENTS); + void *p; + //char buf[bufsize]; + + len = getpagesize(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + /* mmap may legitimately try to read more data than is available */ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == Read::FH && + in->body.read.offset == 0 && + in->body.read.size >= bufsize); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(struct fuse_out_header) + bufsize; + memmove(out->body.bytes, CONTENTS, bufsize); + })); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + p = mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 0); + ASSERT_NE(MAP_FAILED, p) << strerror(errno); + + ASSERT_EQ(0, memcmp(p, CONTENTS, bufsize)); + + ASSERT_EQ(0, munmap(p, len)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * Just as when FOPEN_DIRECT_IO is used, reads with O_DIRECT should bypass + * cache and to straight to the daemon + */ +TEST_F(Read, o_direct) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + // Fill the cache + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + + // Reads with o_direct should bypass the cache + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + ASSERT_EQ(0, fcntl(fd, F_SETFL, O_DIRECT)) << strerror(errno); + ASSERT_EQ(0, lseek(fd, 0, SEEK_SET)) << strerror(errno); + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +TEST_F(Read, pread) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + /* + * Set offset to a maxbcachebuf boundary so we'll be sure what offset + * to read from. Without this, the read might start at a lower offset. + */ + uint64_t offset = m_maxbcachebuf; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, offset + bufsize); + expect_read(ino, offset, bufsize, bufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, pread(fd, buf, bufsize, offset)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +TEST_F(Read, read) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* If the filesystem allows it, the kernel should try to readahead */ +TEST_F(Read, default_readahead) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS0 = "abcdefghijklmnop"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = 8; + /* hard-coded in fuse_internal.c */ + size_t default_maxreadahead = 65536; + ssize_t filesize = default_maxreadahead * 2; + char *contents; + char buf[bufsize]; + const char *contents1 = CONTENTS0 + bufsize; + + contents = (char*)calloc(1, filesize); + ASSERT_NE(NULL, contents); + memmove(contents, CONTENTS0, strlen(CONTENTS0)); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, filesize); + expect_read(ino, 0, default_maxreadahead, default_maxreadahead, + contents); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS0, bufsize)); + + /* A subsequent read should be serviced by cache */ + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, contents1, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* Reading with sendfile should work (though it obviously won't be 0-copy) */ +TEST_F(Read, sendfile) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + int sp[2]; + off_t sbytes; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + /* Like mmap, sendfile may request more data than is available */ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == Read::FH && + in->body.read.offset == 0 && + in->body.read.size >= bufsize); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(struct fuse_out_header) + bufsize; + memmove(out->body.bytes, CONTENTS, bufsize); + })); + + ASSERT_EQ(0, socketpair(PF_LOCAL, SOCK_STREAM, 0, sp)) + << strerror(errno); + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(0, sendfile(fd, sp[1], 0, bufsize, NULL, &sbytes, 0)) + << strerror(errno); + ASSERT_EQ(bufsize, read(sp[0], buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + + close(sp[1]); + close(sp[0]); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* sendfile should fail gracefully if fuse declines the read */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236466 */ +TEST_F(Read, DISABLED_sendfile_eio) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + int sp[2]; + off_t sbytes; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EIO))); + + ASSERT_EQ(0, socketpair(PF_LOCAL, SOCK_STREAM, 0, sp)) + << strerror(errno); + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_NE(0, sendfile(fd, sp[1], 0, bufsize, NULL, &sbytes, 0)); + + close(sp[1]); + close(sp[0]); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* fuse(4) should honor the filesystem's requested m_readahead parameter */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236472 */ +TEST_P(ReadAhead, DISABLED_readahead) { + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS0 = "abcdefghijklmnop"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = 8; + ssize_t filesize = m_maxbcachebuf * 2; + char *contents; + char buf[bufsize]; + + ASSERT_TRUE(GetParam() < (uint32_t)m_maxbcachebuf) + << "Test assumes that max_readahead < maxbcachebuf"; + + contents = (char*)calloc(1, filesize); + ASSERT_NE(NULL, contents); + memmove(contents, CONTENTS0, strlen(CONTENTS0)); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, filesize); + /* fuse(4) should only read ahead the allowed amount */ + expect_read(ino, 0, GetParam(), GetParam(), contents); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); + ASSERT_EQ(0, memcmp(buf, CONTENTS0, bufsize)); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +INSTANTIATE_TEST_CASE_P(RA, ReadAhead, ::testing::Values(0u, 2048u)); Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Mon Mar 11 18:28:20 2019 (r345017) @@ -65,6 +65,22 @@ class FuseEnv: public ::testing::Environment { } }; +void FuseTest::SetUp() { + const char *node = "vfs.maxbcachebuf"; + int val = 0; + size_t size = sizeof(val); + + ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0)) + << strerror(errno); + m_maxbcachebuf = val; + + try { + m_mock = new MockFS(m_maxreadahead); + } catch (std::system_error err) { + FAIL() << err.what(); + } +} + static void usage(char* progname) { fprintf(stderr, "Usage: %s [-v]\n\t-v increase verbosity\n", progname); exit(2); Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.hh Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/utils.hh Mon Mar 11 18:28:20 2019 (r345017) @@ -29,16 +29,20 @@ class FuseTest : public ::testing::Test { protected: + uint32_t m_maxreadahead; MockFS *m_mock = NULL; public: - virtual void SetUp() { - try { - m_mock = new MockFS{}; - } catch (std::system_error err) { - FAIL() << err.what(); - } - } + int m_maxbcachebuf; + + /* + * libfuse's default max_readahead is UINT_MAX, though it can be + * lowered + */ + FuseTest(): FuseTest(UINT_MAX) {} + FuseTest(uint32_t maxreadahead): m_maxreadahead(maxreadahead) {} + + virtual void SetUp(); virtual void TearDown() { if (m_mock) Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 18:17:26 2019 (r345016) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 18:28:20 2019 (r345017) @@ -56,20 +56,6 @@ using namespace testing; class Write: public FuseTest { public: -int m_maxbcachebuf; - -virtual void SetUp() { - const char *node = "vfs.maxbcachebuf"; - int val = 0; - size_t size = sizeof(val); - - ASSERT_EQ(0, sysctlbyname(node, &val, &size, NULL, 0)) - << strerror(errno); - m_maxbcachebuf = val; - - FuseTest::SetUp(); -} - const static uint64_t FH = 0xdeadbeef1a7ebabe; void expect_getattr(uint64_t ino, uint64_t size) { @@ -137,7 +123,6 @@ void expect_read(uint64_t ino, uint64_t offset, uint64 out->header.len = sizeof(struct fuse_out_header) + size; memmove(out->body.bytes, contents, size); })).RetiresOnSaturation(); - } void expect_release(uint64_t ino, ProcessMockerT r) From owner-svn-src-projects@freebsd.org Mon Mar 11 19:10:53 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BD30B152A64E for ; Mon, 11 Mar 2019 19:10:53 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6211976710; Mon, 11 Mar 2019 19:10:53 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 541E7F229; Mon, 11 Mar 2019 19:10:53 +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 x2BJArVW054030; Mon, 11 Mar 2019 19:10:53 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BJAmc4054007; Mon, 11 Mar 2019 19:10:48 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903111910.x2BJAmc4054007@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Mon, 11 Mar 2019 19:10:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345020 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345020 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 6211976710 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.972,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 19:10:54 -0000 Author: asomers Date: Mon Mar 11 19:10:48 2019 New Revision: 345020 URL: https://svnweb.freebsd.org/changeset/base/345020 Log: Update copyright info in fuse tests * Add SPDX tags * Remove "All Rights Reserved", with permission of emaste (FBSD Foundation) Reported by: emaste Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/access.cc projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/getattr.cc projects/fuse2/tests/sys/fs/fuse/link.cc projects/fuse2/tests/sys/fs/fuse/lookup.cc projects/fuse2/tests/sys/fs/fuse/mkdir.cc projects/fuse2/tests/sys/fs/fuse/mknod.cc projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/open.cc projects/fuse2/tests/sys/fs/fuse/read.cc projects/fuse2/tests/sys/fs/fuse/readlink.cc projects/fuse2/tests/sys/fs/fuse/release.cc projects/fuse2/tests/sys/fs/fuse/rename.cc projects/fuse2/tests/sys/fs/fuse/rmdir.cc projects/fuse2/tests/sys/fs/fuse/setattr.cc projects/fuse2/tests/sys/fs/fuse/statfs.cc projects/fuse2/tests/sys/fs/fuse/symlink.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/access.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/access.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/access.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/getattr.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/getattr.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/link.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/link.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/link.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/lookup.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/lookup.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/lookup.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mkdir.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/mknod.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mknod.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/mknod.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/open.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/open.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/open.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/read.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation * * This software was developed by BFF Storage Systems, LLC under sponsorship Modified: projects/fuse2/tests/sys/fs/fuse/readlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readlink.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/readlink.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/release.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/release.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/release.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/rename.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/rename.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/rename.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/rmdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/rmdir.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/rmdir.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/setattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/setattr.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/setattr.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/statfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/statfs.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/statfs.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/symlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/symlink.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/symlink.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.hh Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/utils.hh Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 18:56:04 2019 (r345019) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 19:10:48 2019 (r345020) @@ -1,6 +1,7 @@ /*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * * Copyright (c) 2019 The FreeBSD Foundation - * All rights reserved. * * This software was developed by BFF Storage Systems, LLC under sponsorship * from the FreeBSD Foundation. From owner-svn-src-projects@freebsd.org Mon Mar 11 19:41:15 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D4296152C293 for ; Mon, 11 Mar 2019 19:41:15 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 374897786B; Mon, 11 Mar 2019 19:41:14 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id x2BJfAF8011298; Mon, 11 Mar 2019 12:41:10 -0700 (PDT) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: (from freebsd@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id x2BJfA3b011297; Mon, 11 Mar 2019 12:41:10 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201903111941.x2BJfA3b011297@gndrsh.dnsmgr.net> Subject: Re: svn commit: r345020 - projects/fuse2/tests/sys/fs/fuse In-Reply-To: <201903111910.x2BJAmc4054007@repo.freebsd.org> To: Alan Somers Date: Mon, 11 Mar 2019 12:41:10 -0700 (PDT) CC: src-committers@freebsd.org, svn-src-projects@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 374897786B X-Spamd-Bar: ------ Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-6.96 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.96)[-0.964,0]; REPLY(-4.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 19:41:16 -0000 > Author: asomers > Date: Mon Mar 11 19:10:48 2019 > New Revision: 345020 > URL: https://svnweb.freebsd.org/changeset/base/345020 > > Log: > Update copyright info in fuse tests > > * Add SPDX tags > * Remove "All Rights Reserved", with permission of emaste (FBSD Foundation) > > Reported by: emaste > Sponsored by: The FreeBSD Foundation Thank you! > Modified: > projects/fuse2/tests/sys/fs/fuse/access.cc > projects/fuse2/tests/sys/fs/fuse/create.cc > projects/fuse2/tests/sys/fs/fuse/flush.cc > projects/fuse2/tests/sys/fs/fuse/getattr.cc > projects/fuse2/tests/sys/fs/fuse/link.cc > projects/fuse2/tests/sys/fs/fuse/lookup.cc ... -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-projects@freebsd.org Mon Mar 11 19:50:45 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A41D4152C530 for ; Mon, 11 Mar 2019 19:50:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 41F4380017; Mon, 11 Mar 2019 19:50:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 28507F7C6; Mon, 11 Mar 2019 19:50:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2BJoiVf075694; Mon, 11 Mar 2019 19:50:44 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BJoinp075691; Mon, 11 Mar 2019 19:50:44 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903111950.x2BJoinp075691@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 19:50:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345023 - in projects/import-googletest-1.8.1: etc/mtree share/examples/tests/tests share/examples/tests/tests/googletest X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/import-googletest-1.8.1: etc/mtree share/examples/tests/tests share/examples/tests/tests/googletest X-SVN-Commit-Revision: 345023 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 41F4380017 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.967,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 19:50:45 -0000 Author: ngie Date: Mon Mar 11 19:50:44 2019 New Revision: 345023 URL: https://svnweb.freebsd.org/changeset/base/345023 Log: Compile and install most of the googletest examples sample9_unittest is not compiled/installed, because it intentionally fails and would result in red test runs until broken to always pass. Added: projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/ projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile (contents, props changed) Modified: projects/import-googletest-1.8.1/etc/mtree/BSD.tests.dist projects/import-googletest-1.8.1/share/examples/tests/tests/Makefile Modified: projects/import-googletest-1.8.1/etc/mtree/BSD.tests.dist ============================================================================== --- projects/import-googletest-1.8.1/etc/mtree/BSD.tests.dist Mon Mar 11 19:46:15 2019 (r345022) +++ projects/import-googletest-1.8.1/etc/mtree/BSD.tests.dist Mon Mar 11 19:50:44 2019 (r345023) @@ -440,6 +440,8 @@ tests atf .. + googletest + .. plain .. tap Modified: projects/import-googletest-1.8.1/share/examples/tests/tests/Makefile ============================================================================== --- projects/import-googletest-1.8.1/share/examples/tests/tests/Makefile Mon Mar 11 19:46:15 2019 (r345022) +++ projects/import-googletest-1.8.1/share/examples/tests/tests/Makefile Mon Mar 11 19:50:44 2019 (r345023) @@ -1,5 +1,7 @@ # $FreeBSD$ +.include + # Directory into which the Kyuafile provided by this directory will be # installed. # @@ -20,6 +22,10 @@ TESTS_SUBDIRS+= atf TESTS_SUBDIRS+= plain TESTS_SUBDIRS+= tap + +.if ${MK_GOOGLETEST} != no +TESTS_SUBDIRS+= googletest +.endif # We leave KYUAFILE unset so that bsd.test.mk auto-generates a Kyuafile # for us based on the contents of the TESTS_SUBDIRS line above. The Added: projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile Mon Mar 11 19:50:44 2019 (r345023) @@ -0,0 +1,36 @@ +# $FreeBSD$ + +.PATH: ${SRCTOP}/contrib/googletest/googletest/samples + +GTEST_MAIN_REQ_TESTS+= sample1_unittest +GTEST_MAIN_REQ_TESTS+= sample2_unittest +GTEST_MAIN_REQ_TESTS+= sample3_unittest +GTEST_MAIN_REQ_TESTS+= sample4_unittest +GTEST_MAIN_REQ_TESTS+= sample5_unittest +GTEST_MAIN_REQ_TESTS+= sample6_unittest +GTEST_MAIN_REQ_TESTS+= sample7_unittest +GTEST_MAIN_REQ_TESTS+= sample8_unittest + +# sample9_unittest's `CustomOutputTest.Fails` fails intentionally to illustrate +# how output format can be adjusted with command-line parameters. +#GTEST_REQ_TESTS+= sample9_unittest +GTEST_REQ_TESTS+= sample10_unittest + +.for t in ${GTEST_MAIN_REQ_TESTS} +GTESTS+= $t +LIBADD.$t+= gtest_main +SRCS.$t+= $t.cc +.endfor + +.for t in ${GTEST_REQ_TESTS} +GTESTS+= $t +LIBADD.$t+= gtest +SRCS.$t+= $t.cc +.endfor + +SRCS.sample1_unittest+= sample1.cc +SRCS.sample2_unittest+= sample2.cc +SRCS.sample4_unittest+= sample4.cc +SRCS.sample5_unittest+= sample1.cc + +.include From owner-svn-src-projects@freebsd.org Mon Mar 11 21:01:01 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B3C58152E655 for ; Mon, 11 Mar 2019 21:01:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 39E0B837D2; Mon, 11 Mar 2019 21:01:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2C92D184C3; Mon, 11 Mar 2019 21:01:00 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2BL10I8013924; Mon, 11 Mar 2019 21:01:00 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BL0wYV013913; Mon, 11 Mar 2019 21:00:58 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903112100.x2BL0wYV013913@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 21:00:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345026 - in projects/import-googletest-1.8.1: contrib/llvm/lib/CodeGen contrib/llvm/projects/libunwind contrib/llvm/projects/libunwind/include contrib/llvm/projects/libunwind/include/m... X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/import-googletest-1.8.1: contrib/llvm/lib/CodeGen contrib/llvm/projects/libunwind contrib/llvm/projects/libunwind/include contrib/llvm/projects/libunwind/include/mach-o contrib/llvm/projec... X-SVN-Commit-Revision: 345026 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 39E0B837D2 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.970,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 21:01:01 -0000 Author: ngie Date: Mon Mar 11 21:00:58 2019 New Revision: 345026 URL: https://svnweb.freebsd.org/changeset/base/345026 Log: MFhead@r345025 Added: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/LICENSE.TXT - copied unchanged from r345025, head/contrib/llvm/projects/libunwind/LICENSE.TXT projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/RWMutex.hpp - copied unchanged from r345025, head/contrib/llvm/projects/libunwind/src/RWMutex.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Unwind-seh.cpp - copied unchanged from r345025, head/contrib/llvm/projects/libunwind/src/Unwind-seh.cpp Deleted: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/unwind_ext.h Modified: projects/import-googletest-1.8.1/contrib/llvm/lib/CodeGen/TargetRegisterInfo.cpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/__libunwind_config.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/libunwind.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/mach-o/compact_unwind_encoding.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/unwind.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/AddressSpace.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/CompactUnwinder.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/DwarfInstructions.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/DwarfParser.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/EHHeaderParser.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Registers.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Unwind-EHABI.cpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Unwind-EHABI.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Unwind-sjlj.c projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/UnwindCursor.hpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/UnwindLevel1-gcc-ext.c projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/UnwindLevel1.c projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/UnwindRegistersRestore.S projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/UnwindRegistersSave.S projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/Unwind_AppleExtras.cpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/assembly.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/config.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/dwarf2.h projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/libunwind.cpp projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/libunwind_ext.h projects/import-googletest-1.8.1/libexec/rc/rc.d/growfs projects/import-googletest-1.8.1/share/misc/organization.dot projects/import-googletest-1.8.1/sys/arm/freescale/imx/imx_spi.c projects/import-googletest-1.8.1/sys/cam/scsi/scsi_da.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_queue.c projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c projects/import-googletest-1.8.1/sys/dev/isp/isp.c projects/import-googletest-1.8.1/sys/dev/isp/isp_freebsd.c projects/import-googletest-1.8.1/sys/dev/isp/isp_stds.h projects/import-googletest-1.8.1/sys/dev/isp/ispmbox.h projects/import-googletest-1.8.1/sys/dev/isp/ispvar.h projects/import-googletest-1.8.1/sys/dev/iwm/if_iwm.c projects/import-googletest-1.8.1/sys/dev/iwm/if_iwm_7000.c projects/import-googletest-1.8.1/sys/dev/iwm/if_iwm_config.h projects/import-googletest-1.8.1/sys/dev/iwm/if_iwmreg.h projects/import-googletest-1.8.1/sys/dev/mlx4/mlx4_core/mlx4_cmd.c projects/import-googletest-1.8.1/sys/dev/mlx4/mlx4_core/mlx4_main.c projects/import-googletest-1.8.1/sys/dev/pms/RefTisa/tisa/sassata/sas/ini/itdio.c projects/import-googletest-1.8.1/sys/fs/nandfs/nandfs_vnops.c projects/import-googletest-1.8.1/sys/fs/nfsclient/nfs_clvnops.c projects/import-googletest-1.8.1/sys/kern/vfs_default.c projects/import-googletest-1.8.1/sys/netpfil/ipfw/ip_fw_pfil.c projects/import-googletest-1.8.1/sys/netpfil/ipfw/ip_fw_private.h projects/import-googletest-1.8.1/sys/netpfil/ipfw/nat64/nat64_translate.c projects/import-googletest-1.8.1/sys/ufs/ufs/ufs_vnops.c projects/import-googletest-1.8.1/sys/x86/isa/atrtc.c Directory Properties: projects/import-googletest-1.8.1/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/ (props changed) projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/ (props changed) projects/import-googletest-1.8.1/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/import-googletest-1.8.1/contrib/llvm/lib/CodeGen/TargetRegisterInfo.cpp ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/lib/CodeGen/TargetRegisterInfo.cpp Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/lib/CodeGen/TargetRegisterInfo.cpp Mon Mar 11 21:00:58 2019 (r345026) @@ -14,6 +14,7 @@ #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/BitVector.h" +#include "llvm/ADT/SmallSet.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/CodeGen/MachineFrameInfo.h" @@ -398,6 +399,7 @@ TargetRegisterInfo::getRegAllocationHints(unsigned Vir const std::pair> &Hints_MRI = MRI.getRegAllocationHints(VirtReg); + SmallSet HintedRegs; // First hint may be a target hint. bool Skip = (Hints_MRI.first != 0); for (auto Reg : Hints_MRI.second) { @@ -411,6 +413,10 @@ TargetRegisterInfo::getRegAllocationHints(unsigned Vir if (VRM && isVirtualRegister(Phys)) Phys = VRM->getPhys(Phys); + // Don't add the same reg twice (Hints_MRI may contain multiple virtual + // registers allocated to the same physreg). + if (!HintedRegs.insert(Phys).second) + continue; // Check that Phys is a valid hint in VirtReg's register class. if (!isPhysicalRegister(Phys)) continue; Copied: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/LICENSE.TXT (from r345025, head/contrib/llvm/projects/libunwind/LICENSE.TXT) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/LICENSE.TXT Mon Mar 11 21:00:58 2019 (r345026, copy of r345025, head/contrib/llvm/projects/libunwind/LICENSE.TXT) @@ -0,0 +1,76 @@ +============================================================================== +libunwind License +============================================================================== + +The libunwind library is dual licensed under both the University of Illinois +"BSD-Like" license and the MIT license. As a user of this code you may choose +to use it under either license. As a contributor, you agree to allow your code +to be used under both. + +Full text of the relevant licenses is included below. + +============================================================================== + +University of Illinois/NCSA +Open Source License + +Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +============================================================================== + +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. Modified: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/__libunwind_config.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/__libunwind_config.h Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/__libunwind_config.h Mon Mar 11 21:00:58 2019 (r345026) @@ -12,65 +12,101 @@ #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ !defined(__ARM_DWARF_EH__) -#define _LIBUNWIND_ARM_EHABI 1 -#else -#define _LIBUNWIND_ARM_EHABI 0 +#define _LIBUNWIND_ARM_EHABI #endif +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 8 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 32 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC 112 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 116 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 95 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM 287 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K 32 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV 95 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS 65 +#define _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC 31 + #if defined(_LIBUNWIND_IS_NATIVE_ONLY) # if defined(__i386__) -# define _LIBUNWIND_TARGET_I386 1 +# define _LIBUNWIND_TARGET_I386 # define _LIBUNWIND_CONTEXT_SIZE 8 -# define _LIBUNWIND_CURSOR_SIZE 19 -# define _LIBUNWIND_MAX_REGISTER 9 +# define _LIBUNWIND_CURSOR_SIZE 15 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86 # elif defined(__x86_64__) # define _LIBUNWIND_TARGET_X86_64 1 -# define _LIBUNWIND_CONTEXT_SIZE 21 -# define _LIBUNWIND_CURSOR_SIZE 33 -# define _LIBUNWIND_MAX_REGISTER 17 +# if defined(_WIN64) +# define _LIBUNWIND_CONTEXT_SIZE 54 +# ifdef __SEH__ +# define _LIBUNWIND_CURSOR_SIZE 204 +# else +# define _LIBUNWIND_CURSOR_SIZE 66 +# endif +# else +# define _LIBUNWIND_CONTEXT_SIZE 21 +# define _LIBUNWIND_CURSOR_SIZE 33 +# endif +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_X86_64 +# elif defined(__powerpc64__) +# define _LIBUNWIND_TARGET_PPC64 1 +# define _LIBUNWIND_CONTEXT_SIZE 167 +# define _LIBUNWIND_CURSOR_SIZE 179 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC64 # elif defined(__ppc__) # define _LIBUNWIND_TARGET_PPC 1 # define _LIBUNWIND_CONTEXT_SIZE 117 -# define _LIBUNWIND_CURSOR_SIZE 128 -# define _LIBUNWIND_MAX_REGISTER 113 +# define _LIBUNWIND_CURSOR_SIZE 124 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_PPC # elif defined(__aarch64__) # define _LIBUNWIND_TARGET_AARCH64 1 # define _LIBUNWIND_CONTEXT_SIZE 66 -# define _LIBUNWIND_CURSOR_SIZE 78 -# define _LIBUNWIND_MAX_REGISTER 96 +# if defined(__SEH__) +# define _LIBUNWIND_CURSOR_SIZE 164 +# else +# define _LIBUNWIND_CURSOR_SIZE 78 +# endif +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM64 # elif defined(__arm__) # define _LIBUNWIND_TARGET_ARM 1 -# define _LIBUNWIND_CONTEXT_SIZE 60 -# define _LIBUNWIND_CURSOR_SIZE 67 -# define _LIBUNWIND_MAX_REGISTER 96 +# if defined(__SEH__) +# define _LIBUNWIND_CONTEXT_SIZE 42 +# define _LIBUNWIND_CURSOR_SIZE 80 +# elif defined(__ARM_WMMX) +# define _LIBUNWIND_CONTEXT_SIZE 61 +# define _LIBUNWIND_CURSOR_SIZE 68 +# else +# define _LIBUNWIND_CONTEXT_SIZE 42 +# define _LIBUNWIND_CURSOR_SIZE 49 +# endif +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_ARM # elif defined(__or1k__) # define _LIBUNWIND_TARGET_OR1K 1 # define _LIBUNWIND_CONTEXT_SIZE 16 -# define _LIBUNWIND_CURSOR_SIZE 28 -# define _LIBUNWIND_MAX_REGISTER 32 +# define _LIBUNWIND_CURSOR_SIZE 24 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_OR1K # elif defined(__riscv) # define _LIBUNWIND_TARGET_RISCV 1 # define _LIBUNWIND_CONTEXT_SIZE 64 # define _LIBUNWIND_CURSOR_SIZE 76 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_RISCV # define _LIBUNWIND_MAX_REGISTER 96 # elif defined(__mips__) # if defined(_ABIO32) && _MIPS_SIM == _ABIO32 # define _LIBUNWIND_TARGET_MIPS_O32 1 # if defined(__mips_hard_float) # define _LIBUNWIND_CONTEXT_SIZE 50 -# define _LIBUNWIND_CURSOR_SIZE 61 +# define _LIBUNWIND_CURSOR_SIZE 57 # else # define _LIBUNWIND_CONTEXT_SIZE 18 -# define _LIBUNWIND_CURSOR_SIZE 29 +# define _LIBUNWIND_CURSOR_SIZE 24 # endif # elif defined(_ABIN32) && _MIPS_SIM == _ABIN32 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 # if defined(__mips_hard_float) # define _LIBUNWIND_CONTEXT_SIZE 67 -# define _LIBUNWIND_CURSOR_SIZE 78 +# define _LIBUNWIND_CURSOR_SIZE 74 # else # define _LIBUNWIND_CONTEXT_SIZE 35 -# define _LIBUNWIND_CURSOR_SIZE 46 +# define _LIBUNWIND_CURSOR_SIZE 42 # endif # elif defined(_ABI64) && _MIPS_SIM == _ABI64 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 @@ -84,22 +120,29 @@ # else # error "Unsupported MIPS ABI and/or environment" # endif -# define _LIBUNWIND_MAX_REGISTER 66 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_MIPS +# elif defined(__sparc__) + #define _LIBUNWIND_TARGET_SPARC 1 + #define _LIBUNWIND_HIGHEST_DWARF_REGISTER _LIBUNWIND_HIGHEST_DWARF_REGISTER_SPARC + #define _LIBUNWIND_CONTEXT_SIZE 16 + #define _LIBUNWIND_CURSOR_SIZE 23 # else # error "Unsupported architecture." # endif #else // !_LIBUNWIND_IS_NATIVE_ONLY -# define _LIBUNWIND_TARGET_I386 1 +# define _LIBUNWIND_TARGET_I386 # define _LIBUNWIND_TARGET_X86_64 1 # define _LIBUNWIND_TARGET_PPC 1 +# define _LIBUNWIND_TARGET_PPC64 1 # define _LIBUNWIND_TARGET_AARCH64 1 # define _LIBUNWIND_TARGET_ARM 1 # define _LIBUNWIND_TARGET_OR1K 1 # define _LIBUNWIND_TARGET_MIPS_O32 1 # define _LIBUNWIND_TARGET_MIPS_NEWABI 1 -# define _LIBUNWIND_CONTEXT_SIZE 128 -# define _LIBUNWIND_CURSOR_SIZE 140 -# define _LIBUNWIND_MAX_REGISTER 120 +# define _LIBUNWIND_TARGET_SPARC 1 +# define _LIBUNWIND_CONTEXT_SIZE 167 +# define _LIBUNWIND_CURSOR_SIZE 179 +# define _LIBUNWIND_HIGHEST_DWARF_REGISTER 287 #endif // _LIBUNWIND_IS_NATIVE_ONLY #endif // ____LIBUNWIND_CONFIG_H__ Modified: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/libunwind.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/libunwind.h Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/libunwind.h Mon Mar 11 21:00:58 2019 (r345026) @@ -20,12 +20,26 @@ #include #ifdef __APPLE__ - #include - #ifdef __arm__ - #define LIBUNWIND_AVAIL __attribute__((unavailable)) + #if __clang__ + #if __has_include() + #include + #endif + #elif __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 + #include + #endif + + #ifdef __arm__ + #define LIBUNWIND_AVAIL __attribute__((unavailable)) + #elif defined(__OSX_AVAILABLE_STARTING) + #define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0) + #else + #include + #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER + #define LIBUNWIND_AVAIL AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER #else - #define LIBUNWIND_AVAIL __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_5_0) + #define LIBUNWIND_AVAIL __attribute__((unavailable)) #endif + #endif #else #define LIBUNWIND_AVAIL #endif @@ -43,6 +57,9 @@ enum { UNW_EINVAL = -6547, /* unsupported operation or bad value */ UNW_EBADVERSION = -6548, /* unwind info has unsupported version */ UNW_ENOINFO = -6549 /* no unwind info found */ +#if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY) + , UNW_ECROSSRASIGNING = -6550 /* cross unwind with return address signing */ +#endif }; struct unw_context_t { @@ -58,11 +75,10 @@ typedef struct unw_cursor_t unw_cursor_t; typedef struct unw_addr_space *unw_addr_space_t; typedef int unw_regnum_t; -#if _LIBUNWIND_ARM_EHABI -typedef uint32_t unw_word_t; +typedef uintptr_t unw_word_t; +#if defined(__arm__) typedef uint64_t unw_fpreg_t; #else -typedef uint64_t unw_word_t; typedef double unw_fpreg_t; #endif @@ -75,8 +91,8 @@ struct unw_proc_info_t { unw_word_t gp; /* not used */ unw_word_t flags; /* not used */ uint32_t format; /* compact unwind encoding, or zero if none */ - uint32_t unwind_info_size; /* size of dwarf unwind info, or zero if none */ - unw_word_t unwind_info; /* address of dwarf unwind info, or zero */ + uint32_t unwind_info_size; /* size of DWARF unwind info, or zero if none */ + unw_word_t unwind_info; /* address of DWARF unwind info, or zero */ unw_word_t extra; /* mach_header of mach-o image containing func */ }; typedef struct unw_proc_info_t unw_proc_info_t; @@ -151,8 +167,8 @@ enum { UNW_X86_ECX = 1, UNW_X86_EDX = 2, UNW_X86_EBX = 3, - UNW_X86_ESP = 4, - UNW_X86_EBP = 5, + UNW_X86_EBP = 4, + UNW_X86_ESP = 5, UNW_X86_ESI = 6, UNW_X86_EDI = 7 }; @@ -174,7 +190,24 @@ enum { UNW_X86_64_R12 = 12, UNW_X86_64_R13 = 13, UNW_X86_64_R14 = 14, - UNW_X86_64_R15 = 15 + UNW_X86_64_R15 = 15, + UNW_X86_64_RIP = 16, + UNW_X86_64_XMM0 = 17, + UNW_X86_64_XMM1 = 18, + UNW_X86_64_XMM2 = 19, + UNW_X86_64_XMM3 = 20, + UNW_X86_64_XMM4 = 21, + UNW_X86_64_XMM5 = 22, + UNW_X86_64_XMM6 = 23, + UNW_X86_64_XMM7 = 24, + UNW_X86_64_XMM8 = 25, + UNW_X86_64_XMM9 = 26, + UNW_X86_64_XMM10 = 27, + UNW_X86_64_XMM11 = 28, + UNW_X86_64_XMM12 = 29, + UNW_X86_64_XMM13 = 30, + UNW_X86_64_XMM14 = 31, + UNW_X86_64_XMM15 = 32, }; @@ -295,6 +328,190 @@ enum { UNW_PPC_SPEFSCR = 112 }; +// 64-bit ppc register numbers +enum { + UNW_PPC64_R0 = 0, + UNW_PPC64_R1 = 1, + UNW_PPC64_R2 = 2, + UNW_PPC64_R3 = 3, + UNW_PPC64_R4 = 4, + UNW_PPC64_R5 = 5, + UNW_PPC64_R6 = 6, + UNW_PPC64_R7 = 7, + UNW_PPC64_R8 = 8, + UNW_PPC64_R9 = 9, + UNW_PPC64_R10 = 10, + UNW_PPC64_R11 = 11, + UNW_PPC64_R12 = 12, + UNW_PPC64_R13 = 13, + UNW_PPC64_R14 = 14, + UNW_PPC64_R15 = 15, + UNW_PPC64_R16 = 16, + UNW_PPC64_R17 = 17, + UNW_PPC64_R18 = 18, + UNW_PPC64_R19 = 19, + UNW_PPC64_R20 = 20, + UNW_PPC64_R21 = 21, + UNW_PPC64_R22 = 22, + UNW_PPC64_R23 = 23, + UNW_PPC64_R24 = 24, + UNW_PPC64_R25 = 25, + UNW_PPC64_R26 = 26, + UNW_PPC64_R27 = 27, + UNW_PPC64_R28 = 28, + UNW_PPC64_R29 = 29, + UNW_PPC64_R30 = 30, + UNW_PPC64_R31 = 31, + UNW_PPC64_F0 = 32, + UNW_PPC64_F1 = 33, + UNW_PPC64_F2 = 34, + UNW_PPC64_F3 = 35, + UNW_PPC64_F4 = 36, + UNW_PPC64_F5 = 37, + UNW_PPC64_F6 = 38, + UNW_PPC64_F7 = 39, + UNW_PPC64_F8 = 40, + UNW_PPC64_F9 = 41, + UNW_PPC64_F10 = 42, + UNW_PPC64_F11 = 43, + UNW_PPC64_F12 = 44, + UNW_PPC64_F13 = 45, + UNW_PPC64_F14 = 46, + UNW_PPC64_F15 = 47, + UNW_PPC64_F16 = 48, + UNW_PPC64_F17 = 49, + UNW_PPC64_F18 = 50, + UNW_PPC64_F19 = 51, + UNW_PPC64_F20 = 52, + UNW_PPC64_F21 = 53, + UNW_PPC64_F22 = 54, + UNW_PPC64_F23 = 55, + UNW_PPC64_F24 = 56, + UNW_PPC64_F25 = 57, + UNW_PPC64_F26 = 58, + UNW_PPC64_F27 = 59, + UNW_PPC64_F28 = 60, + UNW_PPC64_F29 = 61, + UNW_PPC64_F30 = 62, + UNW_PPC64_F31 = 63, + // 64: reserved + UNW_PPC64_LR = 65, + UNW_PPC64_CTR = 66, + // 67: reserved + UNW_PPC64_CR0 = 68, + UNW_PPC64_CR1 = 69, + UNW_PPC64_CR2 = 70, + UNW_PPC64_CR3 = 71, + UNW_PPC64_CR4 = 72, + UNW_PPC64_CR5 = 73, + UNW_PPC64_CR6 = 74, + UNW_PPC64_CR7 = 75, + UNW_PPC64_XER = 76, + UNW_PPC64_V0 = 77, + UNW_PPC64_V1 = 78, + UNW_PPC64_V2 = 79, + UNW_PPC64_V3 = 80, + UNW_PPC64_V4 = 81, + UNW_PPC64_V5 = 82, + UNW_PPC64_V6 = 83, + UNW_PPC64_V7 = 84, + UNW_PPC64_V8 = 85, + UNW_PPC64_V9 = 86, + UNW_PPC64_V10 = 87, + UNW_PPC64_V11 = 88, + UNW_PPC64_V12 = 89, + UNW_PPC64_V13 = 90, + UNW_PPC64_V14 = 91, + UNW_PPC64_V15 = 92, + UNW_PPC64_V16 = 93, + UNW_PPC64_V17 = 94, + UNW_PPC64_V18 = 95, + UNW_PPC64_V19 = 96, + UNW_PPC64_V20 = 97, + UNW_PPC64_V21 = 98, + UNW_PPC64_V22 = 99, + UNW_PPC64_V23 = 100, + UNW_PPC64_V24 = 101, + UNW_PPC64_V25 = 102, + UNW_PPC64_V26 = 103, + UNW_PPC64_V27 = 104, + UNW_PPC64_V28 = 105, + UNW_PPC64_V29 = 106, + UNW_PPC64_V30 = 107, + UNW_PPC64_V31 = 108, + // 109, 111-113: OpenPOWER ELF V2 ABI: reserved + // Borrowing VRSAVE number from PPC32. + UNW_PPC64_VRSAVE = 109, + UNW_PPC64_VSCR = 110, + UNW_PPC64_TFHAR = 114, + UNW_PPC64_TFIAR = 115, + UNW_PPC64_TEXASR = 116, + UNW_PPC64_VS0 = UNW_PPC64_F0, + UNW_PPC64_VS1 = UNW_PPC64_F1, + UNW_PPC64_VS2 = UNW_PPC64_F2, + UNW_PPC64_VS3 = UNW_PPC64_F3, + UNW_PPC64_VS4 = UNW_PPC64_F4, + UNW_PPC64_VS5 = UNW_PPC64_F5, + UNW_PPC64_VS6 = UNW_PPC64_F6, + UNW_PPC64_VS7 = UNW_PPC64_F7, + UNW_PPC64_VS8 = UNW_PPC64_F8, + UNW_PPC64_VS9 = UNW_PPC64_F9, + UNW_PPC64_VS10 = UNW_PPC64_F10, + UNW_PPC64_VS11 = UNW_PPC64_F11, + UNW_PPC64_VS12 = UNW_PPC64_F12, + UNW_PPC64_VS13 = UNW_PPC64_F13, + UNW_PPC64_VS14 = UNW_PPC64_F14, + UNW_PPC64_VS15 = UNW_PPC64_F15, + UNW_PPC64_VS16 = UNW_PPC64_F16, + UNW_PPC64_VS17 = UNW_PPC64_F17, + UNW_PPC64_VS18 = UNW_PPC64_F18, + UNW_PPC64_VS19 = UNW_PPC64_F19, + UNW_PPC64_VS20 = UNW_PPC64_F20, + UNW_PPC64_VS21 = UNW_PPC64_F21, + UNW_PPC64_VS22 = UNW_PPC64_F22, + UNW_PPC64_VS23 = UNW_PPC64_F23, + UNW_PPC64_VS24 = UNW_PPC64_F24, + UNW_PPC64_VS25 = UNW_PPC64_F25, + UNW_PPC64_VS26 = UNW_PPC64_F26, + UNW_PPC64_VS27 = UNW_PPC64_F27, + UNW_PPC64_VS28 = UNW_PPC64_F28, + UNW_PPC64_VS29 = UNW_PPC64_F29, + UNW_PPC64_VS30 = UNW_PPC64_F30, + UNW_PPC64_VS31 = UNW_PPC64_F31, + UNW_PPC64_VS32 = UNW_PPC64_V0, + UNW_PPC64_VS33 = UNW_PPC64_V1, + UNW_PPC64_VS34 = UNW_PPC64_V2, + UNW_PPC64_VS35 = UNW_PPC64_V3, + UNW_PPC64_VS36 = UNW_PPC64_V4, + UNW_PPC64_VS37 = UNW_PPC64_V5, + UNW_PPC64_VS38 = UNW_PPC64_V6, + UNW_PPC64_VS39 = UNW_PPC64_V7, + UNW_PPC64_VS40 = UNW_PPC64_V8, + UNW_PPC64_VS41 = UNW_PPC64_V9, + UNW_PPC64_VS42 = UNW_PPC64_V10, + UNW_PPC64_VS43 = UNW_PPC64_V11, + UNW_PPC64_VS44 = UNW_PPC64_V12, + UNW_PPC64_VS45 = UNW_PPC64_V13, + UNW_PPC64_VS46 = UNW_PPC64_V14, + UNW_PPC64_VS47 = UNW_PPC64_V15, + UNW_PPC64_VS48 = UNW_PPC64_V16, + UNW_PPC64_VS49 = UNW_PPC64_V17, + UNW_PPC64_VS50 = UNW_PPC64_V18, + UNW_PPC64_VS51 = UNW_PPC64_V19, + UNW_PPC64_VS52 = UNW_PPC64_V20, + UNW_PPC64_VS53 = UNW_PPC64_V21, + UNW_PPC64_VS54 = UNW_PPC64_V22, + UNW_PPC64_VS55 = UNW_PPC64_V23, + UNW_PPC64_VS56 = UNW_PPC64_V24, + UNW_PPC64_VS57 = UNW_PPC64_V25, + UNW_PPC64_VS58 = UNW_PPC64_V26, + UNW_PPC64_VS59 = UNW_PPC64_V27, + UNW_PPC64_VS60 = UNW_PPC64_V28, + UNW_PPC64_VS61 = UNW_PPC64_V29, + UNW_PPC64_VS62 = UNW_PPC64_V30, + UNW_PPC64_VS63 = UNW_PPC64_V31 +}; + // 64-bit ARM64 registers enum { UNW_ARM64_X0 = 0, @@ -333,6 +550,8 @@ enum { UNW_ARM64_X31 = 31, UNW_ARM64_SP = 31, // reserved block + UNW_ARM64_RA_SIGN_STATE = 34, + // reserved block UNW_ARM64_D0 = 64, UNW_ARM64_D1 = 65, UNW_ARM64_D2 = 66, @@ -531,6 +750,7 @@ enum { UNW_OR1K_R29 = 29, UNW_OR1K_R30 = 30, UNW_OR1K_R31 = 31, + UNW_OR1K_EPCR = 32, }; // 64-bit RISC-V registers @@ -672,6 +892,42 @@ enum { UNW_MIPS_F31 = 63, UNW_MIPS_HI = 64, UNW_MIPS_LO = 65, +}; + +// SPARC registers +enum { + UNW_SPARC_G0 = 0, + UNW_SPARC_G1 = 1, + UNW_SPARC_G2 = 2, + UNW_SPARC_G3 = 3, + UNW_SPARC_G4 = 4, + UNW_SPARC_G5 = 5, + UNW_SPARC_G6 = 6, + UNW_SPARC_G7 = 7, + UNW_SPARC_O0 = 8, + UNW_SPARC_O1 = 9, + UNW_SPARC_O2 = 10, + UNW_SPARC_O3 = 11, + UNW_SPARC_O4 = 12, + UNW_SPARC_O5 = 13, + UNW_SPARC_O6 = 14, + UNW_SPARC_O7 = 15, + UNW_SPARC_L0 = 16, + UNW_SPARC_L1 = 17, + UNW_SPARC_L2 = 18, + UNW_SPARC_L3 = 19, + UNW_SPARC_L4 = 20, + UNW_SPARC_L5 = 21, + UNW_SPARC_L6 = 22, + UNW_SPARC_L7 = 23, + UNW_SPARC_I0 = 24, + UNW_SPARC_I1 = 25, + UNW_SPARC_I2 = 26, + UNW_SPARC_I3 = 27, + UNW_SPARC_I4 = 28, + UNW_SPARC_I5 = 29, + UNW_SPARC_I6 = 30, + UNW_SPARC_I7 = 31, }; #endif Modified: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/mach-o/compact_unwind_encoding.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/mach-o/compact_unwind_encoding.h Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/mach-o/compact_unwind_encoding.h Mon Mar 11 21:00:58 2019 (r345026) @@ -6,7 +6,7 @@ // Source Licenses. See LICENSE.TXT for details. // // -// Darwin's alternative to dwarf based unwind encodings. +// Darwin's alternative to DWARF based unwind encodings. // //===----------------------------------------------------------------------===// @@ -17,7 +17,7 @@ #include // -// Compilers can emit standard Dwarf FDEs in the __TEXT,__eh_frame section +// Compilers can emit standard DWARF FDEs in the __TEXT,__eh_frame section // of object files. Or compilers can emit compact unwind information in // the __LD,__compact_unwind section. // @@ -26,10 +26,10 @@ // runtime to access unwind info for any given function. If the compiler // emitted compact unwind info for the function, that compact unwind info will // be encoded in the __TEXT,__unwind_info section. If the compiler emitted -// dwarf unwind info, the __TEXT,__unwind_info section will contain the offset +// DWARF unwind info, the __TEXT,__unwind_info section will contain the offset // of the FDE in the __TEXT,__eh_frame section in the final linked image. // -// Note: Previously, the linker would transform some dwarf unwind infos into +// Note: Previously, the linker would transform some DWARF unwind infos into // compact unwind info. But that is fragile and no longer done. @@ -58,7 +58,7 @@ enum { // 1-bit: has lsda // 2-bit: personality index // -// 4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=dwarf +// 4-bits: 0=old, 1=ebp based, 2=stack-imm, 3=stack-ind, 4=DWARF // ebp based: // 15-bits (5*3-bits per reg) register permutation // 8-bits for stack offset @@ -128,9 +128,9 @@ enum { // UNWIND_X86_FRAMELESS_STACK_SIZE. // UNWIND_X86_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the -// compact encoding is the offset of the dwarf FDE in the __eh_frame section. +// compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the -// linker in final linked images which have only dwarf unwind info for a +// linker in final linked images which have only DWARF unwind info for a // function. // // The permutation encoding is a Lehmer code sequence encoded into a @@ -193,7 +193,7 @@ enum { // 1-bit: has lsda // 2-bit: personality index // -// 4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=dwarf +// 4-bits: 0=old, 1=rbp based, 2=stack-imm, 3=stack-ind, 4=DWARF // rbp based: // 15-bits (5*3-bits per reg) register permutation // 8-bits for stack offset @@ -262,9 +262,9 @@ enum { // UNWIND_X86_64_FRAMELESS_STACK_SIZE. // UNWIND_X86_64_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the -// compact encoding is the offset of the dwarf FDE in the __eh_frame section. +// compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the -// linker in final linked images which have only dwarf unwind info for a +// linker in final linked images which have only DWARF unwind info for a // function. // @@ -275,14 +275,14 @@ enum { // 1-bit: has lsda // 2-bit: personality index // -// 4-bits: 4=frame-based, 3=dwarf, 2=frameless +// 4-bits: 4=frame-based, 3=DWARF, 2=frameless // frameless: // 12-bits of stack size // frame-based: // 4-bits D reg pairs saved // 5-bits X reg pairs saved -// dwarf: -// 24-bits offset of dwarf FDE in __eh_frame section +// DWARF: +// 24-bits offset of DWARF FDE in __eh_frame section // enum { UNWIND_ARM64_MODE_MASK = 0x0F000000, @@ -320,9 +320,9 @@ enum { // UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK. // UNWIND_ARM64_MODE_DWARF: // No compact unwind encoding is available. Instead the low 24-bits of the -// compact encoding is the offset of the dwarf FDE in the __eh_frame section. +// compact encoding is the offset of the DWARF FDE in the __eh_frame section. // This mode is never used in object files. It is only generated by the -// linker in final linked images which have only dwarf unwind info for a +// linker in final linked images which have only DWARF unwind info for a // function. // @@ -385,7 +385,7 @@ enum { // saved at that range of the function. // // If a particular function is so wacky that there is no compact unwind way -// to encode it, then the compiler can emit traditional dwarf unwind info. +// to encode it, then the compiler can emit traditional DWARF unwind info. // The runtime will use which ever is available. // // Runtime support for compact unwind encodings are only available on 10.6 Modified: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/unwind.h ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/unwind.h Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/include/unwind.h Mon Mar 11 21:00:58 2019 (r345026) @@ -19,6 +19,11 @@ #include #include +#if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) && defined(_WIN32) +#include +#include +#endif + #if defined(__APPLE__) #define LIBUNWIND_UNAVAIL __attribute__ (( unavailable )) #else @@ -36,7 +41,7 @@ typedef enum { _URC_HANDLER_FOUND = 6, _URC_INSTALL_CONTEXT = 7, _URC_CONTINUE_UNWIND = 8, -#if _LIBUNWIND_ARM_EHABI +#if defined(_LIBUNWIND_ARM_EHABI) _URC_FAILURE = 9 #endif } _Unwind_Reason_Code; @@ -51,12 +56,13 @@ typedef enum { typedef struct _Unwind_Context _Unwind_Context; // opaque -#if _LIBUNWIND_ARM_EHABI +#if defined(_LIBUNWIND_ARM_EHABI) typedef uint32_t _Unwind_State; static const _Unwind_State _US_VIRTUAL_UNWIND_FRAME = 0; static const _Unwind_State _US_UNWIND_FRAME_STARTING = 1; static const _Unwind_State _US_UNWIND_FRAME_RESUME = 2; +static const _Unwind_State _US_ACTION_MASK = 3; /* Undocumented flag for force unwinding. */ static const _Unwind_State _US_FORCE_UNWIND = 8; @@ -99,7 +105,7 @@ struct _Unwind_Control_Block { } pr_cache; long long int :0; /* Enforce the 8-byte alignment */ -}; +} __attribute__((__aligned__(8))); typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) (_Unwind_State state, @@ -119,15 +125,22 @@ struct _Unwind_Exception { uint64_t exception_class; void (*exception_cleanup)(_Unwind_Reason_Code reason, _Unwind_Exception *exc); +#if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) + uintptr_t private_[6]; +#else uintptr_t private_1; // non-zero means forced unwind uintptr_t private_2; // holds sp that phase1 found for phase2 to use -#ifndef __LP64__ - // The gcc implementation of _Unwind_Exception used attribute mode on the - // above fields which had the side effect of causing this whole struct to - // round up to 32 bytes in size. To be more explicit, we add pad fields - // added for binary compatibility. +#endif +#if __SIZEOF_POINTER__ == 4 + // The implementation of _Unwind_Exception uses an attribute mode on the + // above fields which has the side effect of causing this whole struct to + // round up to 32 bytes in size (48 with SEH). To be more explicit, we add + // pad fields added for binary compatibility. uint32_t reserved[3]; #endif + // The Itanium ABI requires that _Unwind_Exception objects are "double-word + // aligned". GCC has interpreted this to mean "use the maximum useful + // alignment for the target"; so do we. } __attribute__((__aligned__)); typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) @@ -164,7 +177,7 @@ extern void _Unwind_Resume(_Unwind_Exception *exceptio #endif extern void _Unwind_DeleteException(_Unwind_Exception *exception_object); -#if _LIBUNWIND_ARM_EHABI +#if defined(_LIBUNWIND_ARM_EHABI) typedef enum { _UVRSC_CORE = 0, /* integer register */ _UVRSC_VFP = 1, /* vfp */ @@ -204,7 +217,7 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_ _Unwind_VRS_DataRepresentation representation); #endif -#if !_LIBUNWIND_ARM_EHABI +#if !defined(_LIBUNWIND_ARM_EHABI) extern uintptr_t _Unwind_GetGR(struct _Unwind_Context *context, int index); extern void _Unwind_SetGR(struct _Unwind_Context *context, int index, @@ -212,7 +225,7 @@ extern void _Unwind_SetGR(struct _Unwind_Context *cont extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *context); extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t new_value); -#else // _LIBUNWIND_ARM_EHABI +#else // defined(_LIBUNWIND_ARM_EHABI) #if defined(_LIBUNWIND_UNWIND_LEVEL1_EXTERNAL_LINKAGE) #define _LIBUNWIND_EXPORT_UNWIND_LEVEL1 extern @@ -251,7 +264,7 @@ void _Unwind_SetIP(struct _Unwind_Context *context, ui uintptr_t thumb_bit = _Unwind_GetGR(context, 15) & ((uintptr_t)0x1); _Unwind_SetGR(context, 15, value | thumb_bit); } -#endif // _LIBUNWIND_ARM_EHABI +#endif // defined(_LIBUNWIND_ARM_EHABI) extern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *context); extern uintptr_t @@ -321,7 +334,7 @@ extern void __deregister_frame(const void *fde); // _Unwind_Find_FDE() will locate the FDE if the pc is in some function that has // an associated FDE. Note, Mac OS X 10.6 and later, introduces "compact unwind -// info" which the runtime uses in preference to dwarf unwind info. This +// info" which the runtime uses in preference to DWARF unwind info. This // function will only work if the target function has an FDE but no compact // unwind info. struct dwarf_eh_bases { @@ -334,7 +347,7 @@ extern const void *_Unwind_Find_FDE(const void *pc, st // This function attempts to find the start (address of first instruction) of // a function given an address inside the function. It only works if the -// function has an FDE (dwarf unwind info). +// function has an FDE (DWARF unwind info). // This function is unimplemented on Mac OS X 10.6 and later. Instead, use // _Unwind_Find_FDE() and look at the dwarf_eh_bases.func result. extern void *_Unwind_FindEnclosingFunction(void *pc); @@ -364,6 +377,22 @@ extern void *__deregister_frame_info(const void *fde) LIBUNWIND_UNAVAIL; extern void *__deregister_frame_info_bases(const void *fde) LIBUNWIND_UNAVAIL; + +#if defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__) +#ifndef _WIN32 +typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD; +typedef struct _CONTEXT CONTEXT; +typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT; +#elif !defined(__MINGW32__) && VER_PRODUCTBUILD < 8000 +typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT; +#endif +// This is the common wrapper for GCC-style personality functions with SEH. +extern EXCEPTION_DISPOSITION _GCC_specific_handler(EXCEPTION_RECORD *exc, + void *frame, + CONTEXT *ctx, + DISPATCHER_CONTEXT *disp, + __personality_routine pers); +#endif #ifdef __cplusplus } Modified: projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/AddressSpace.hpp ============================================================================== --- projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/AddressSpace.hpp Mon Mar 11 20:57:54 2019 (r345025) +++ projects/import-googletest-1.8.1/contrib/llvm/projects/libunwind/src/AddressSpace.hpp Mon Mar 11 21:00:58 2019 (r345026) @@ -18,7 +18,15 @@ #include #include -#ifndef _LIBUNWIND_IS_BAREMETAL +#ifndef _LIBUNWIND_USE_DLADDR + #if !defined(_LIBUNWIND_IS_BAREMETAL) && !defined(_WIN32) + #define _LIBUNWIND_USE_DLADDR 1 + #else + #define _LIBUNWIND_USE_DLADDR 0 + #endif +#endif + +#if _LIBUNWIND_USE_DLADDR #include #endif @@ -32,73 +40,137 @@ namespace libunwind { #include "libunwind.h" #include "config.h" #include "dwarf2.h" +#include "EHHeaderParser.hpp" #include "Registers.hpp" -#if _LIBUNWIND_ARM_EHABI -#if defined(__FreeBSD__) || defined(__NetBSD__) +#ifdef __APPLE__ -#include -typedef void *_Unwind_Ptr; + struct dyld_unwind_sections + { + const struct mach_header* mh; + const void* dwarf_section; + uintptr_t dwarf_section_length; + const void* compact_unwind_section; + uintptr_t compact_unwind_section_length; + }; + #if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) \ + && (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1070)) \ + || defined(__IPHONE_OS_VERSION_MIN_REQUIRED) + // In 10.7.0 or later, libSystem.dylib implements this function. + extern "C" bool _dyld_find_unwind_sections(void *, dyld_unwind_sections *); + #else + // In 10.6.x and earlier, we need to implement this functionality. Note + // that this requires a newer version of libmacho (from cctools) than is + // present in libSystem on 10.6.x (for getsectiondata). + static inline bool _dyld_find_unwind_sections(void* addr, + dyld_unwind_sections* info) { + // Find mach-o image containing address. + Dl_info dlinfo; + if (!dladdr(addr, &dlinfo)) + return false; +#if __LP64__ + const struct mach_header_64 *mh = (const struct mach_header_64 *)dlinfo.dli_fbase; +#else + const struct mach_header *mh = (const struct mach_header *)dlinfo.dli_fbase; +#endif -#elif defined(__linux__) + // Initialize the return struct + info->mh = (const struct mach_header *)mh; + info->dwarf_section = getsectiondata(mh, "__TEXT", "__eh_frame", &info->dwarf_section_length); + info->compact_unwind_section = getsectiondata(mh, "__TEXT", "__unwind_info", &info->compact_unwind_section_length); -typedef long unsigned int *_Unwind_Ptr; -extern "C" _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr addr, int *len); + if (!info->dwarf_section) { + info->dwarf_section_length = 0; + } -// Emulate the BSD dl_unwind_find_exidx API when on a GNU libdl system. -#define dl_unwind_find_exidx __gnu_Unwind_Find_exidx + if (!info->compact_unwind_section) { + info->compact_unwind_section_length = 0; + } -#elif !defined(_LIBUNWIND_IS_BAREMETAL) -#include -#else // !defined(_LIBUNWIND_IS_BAREMETAL) + return true; + } + #endif + +#elif defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) && defined(_LIBUNWIND_IS_BAREMETAL) + // When statically linked on bare-metal, the symbols for the EH table are looked // up without going through the dynamic loader. -struct EHTEntry { - uint32_t functionOffset; - uint32_t unwindOpcodes; -}; -extern EHTEntry __exidx_start; -extern EHTEntry __exidx_end; -#endif // !defined(_LIBUNWIND_IS_BAREMETAL) -#endif // _LIBUNWIND_ARM_EHABI -#if defined(__CloudABI__) || defined(__FreeBSD__) || defined(__linux__) || \ - defined(__NetBSD__) -#if _LIBUNWIND_SUPPORT_DWARF_UNWIND && _LIBUNWIND_SUPPORT_DWARF_INDEX +// The following linker script may be used to produce the necessary sections and symbols. +// Unless the --eh-frame-hdr linker option is provided, the section is not generated +// and does not take space in the output file. +// +// .eh_frame : +// { +// __eh_frame_start = .; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Mon Mar 11 22:29:59 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C4EA81530FE6 for ; Mon, 11 Mar 2019 22:29:58 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 70D49873CC; Mon, 11 Mar 2019 22:29:58 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 49CAB19323; Mon, 11 Mar 2019 22:29:58 +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 x2BMTwdQ065754; Mon, 11 Mar 2019 22:29:58 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BMTusH065745; Mon, 11 Mar 2019 22:29:56 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903112229.x2BMTusH065745@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Mon, 11 Mar 2019 22:29:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345035 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345035 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 70D49873CC X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.969,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 22:29:59 -0000 Author: asomers Date: Mon Mar 11 22:29:56 2019 New Revision: 345035 URL: https://svnweb.freebsd.org/changeset/base/345035 Log: fuse(4): add tests for FUSE_OPENDIR, FUSE_FSYNC, and FUSE_FSYNCDIR And one more for FUSE_WRITE, too. PR: 236379 PR: 236473 PR: 236474 Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/fsync.cc (contents, props changed) projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc (contents, props changed) projects/fuse2/tests/sys/fs/fuse/opendir.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Mon Mar 11 22:23:56 2019 (r345034) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Mon Mar 11 22:29:56 2019 (r345035) @@ -7,12 +7,15 @@ TESTSDIR= ${TESTSBASE}/sys/fs/fuse ATF_TESTS_CXX+= access ATF_TESTS_CXX+= create ATF_TESTS_CXX+= flush +ATF_TESTS_CXX+= fsync +ATF_TESTS_CXX+= fsyncdir ATF_TESTS_CXX+= getattr ATF_TESTS_CXX+= link ATF_TESTS_CXX+= lookup ATF_TESTS_CXX+= mkdir ATF_TESTS_CXX+= mknod ATF_TESTS_CXX+= open +ATF_TESTS_CXX+= opendir ATF_TESTS_CXX+= read ATF_TESTS_CXX+= readlink ATF_TESTS_CXX+= release @@ -39,6 +42,16 @@ SRCS.flush+= getmntopts.c SRCS.flush+= mockfs.cc SRCS.flush+= utils.cc +SRCS.fsync+= fsync.cc +SRCS.fsync+= getmntopts.c +SRCS.fsync+= mockfs.cc +SRCS.fsync+= utils.cc + +SRCS.fsyncdir+= fsyncdir.cc +SRCS.fsyncdir+= getmntopts.c +SRCS.fsyncdir+= mockfs.cc +SRCS.fsyncdir+= utils.cc + SRCS.getattr+= getattr.cc SRCS.getattr+= getmntopts.c SRCS.getattr+= mockfs.cc @@ -68,6 +81,11 @@ SRCS.open+= getmntopts.c SRCS.open+= mockfs.cc SRCS.open+= open.cc SRCS.open+= utils.cc + +SRCS.opendir+= getmntopts.c +SRCS.opendir+= mockfs.cc +SRCS.opendir+= opendir.cc +SRCS.opendir+= utils.cc SRCS.read+= getmntopts.c SRCS.read+= mockfs.cc Added: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Mon Mar 11 22:29:56 2019 (r345035) @@ -0,0 +1,349 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +/* + * TODO: remove FUSE_FSYNC_FDATASYNC definition when upgrading to protocol 7.28. + * This bit was actually part of kernel protocol version 5.2, but never + * documented until after 7.28 + */ +#ifndef FUSE_FSYNC_FDATASYNC +#define FUSE_FSYNC_FDATASYNC 1 +#endif + +class Fsync: public FuseTest { +public: +const static uint64_t FH = 0xdeadbeef1a7ebabe; +void expect_fsync(uint64_t ino, uint32_t flags, int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_FSYNC && + in->header.nodeid == ino && + //(pid_t)in->header.pid == getpid() && + in->body.fsync.fh == FH && + in->body.fsync.fsync_flags == flags); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + +void expect_getattr(uint64_t ino) +{ + /* Until the attr cache is working, we may send an additional GETATTR */ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_GETATTR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + out->body.attr.attr.mode = S_IFREG | 0644; + out->body.attr.attr_valid = UINT64_MAX; + })); +} + +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFREG | 0644; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_open(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPEN && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = FH; + })); +} + +void expect_release(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_RELEASE && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(0))); +} + +void expect_write(uint64_t ino, uint64_t size, const void *contents) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + const char *buf = (const char*)in->body.bytes + + sizeof(struct fuse_write_in); + + return (in->header.opcode == FUSE_WRITE && + in->header.nodeid == ino && + 0 == bcmp(buf, contents, size)); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, write); + out->body.write.size = size; + })); +} + +}; + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236379 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(Fsync, DISABLED_aio_fsync) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + struct aiocb iocb, *piocb; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + expect_write(ino, bufsize, CONTENTS); + expect_fsync(ino, 0, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + + bzero(&iocb, sizeof(iocb)); + iocb.aio_fildes = fd; + + ASSERT_EQ(0, aio_fsync(O_SYNC, &iocb)) << strerror(errno); + ASSERT_EQ(0, aio_waitcomplete(&piocb, NULL)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * fuse(4) should NOT fsync during VOP_RELEASE or VOP_INACTIVE + * + * This test only really make sense in writeback caching mode, but it should + * still pass in any cache mode. + */ +TEST_F(Fsync, close) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + expect_write(ino, bufsize, CONTENTS); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETATTR); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + })); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_FSYNC); + }, Eq(true)), + _) + ).Times(0); + expect_release(ino); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + close(fd); +} + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(Fsync, DISABLED_eio) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + expect_write(ino, bufsize, CONTENTS); + expect_fsync(ino, FUSE_FSYNC_FDATASYNC, EIO); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + ASSERT_NE(0, fdatasync(fd)); + ASSERT_EQ(EIO, errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(Fsync, DISABLED_fdatasync) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + expect_write(ino, bufsize, CONTENTS); + expect_fsync(ino, FUSE_FSYNC_FDATASYNC, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + ASSERT_EQ(0, fdatasync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(Fsync, DISABLED_fsync) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + expect_write(ino, bufsize, CONTENTS); + expect_fsync(ino, 0, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + ASSERT_EQ(0, fsync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* Fsync should sync a file with dirty metadata but clean data */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(Fsync, DISABLED_fsync_metadata_only) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + mode_t mode = 0755; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETATTR); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + out->body.attr.attr.mode = S_IFREG | mode; + })); + + expect_fsync(ino, 0, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(0, fchmod(fd, mode)) << strerror(errno); + ASSERT_EQ(0, fsync(fd)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +// fsync()ing a file that isn't dirty should be a no-op +TEST_F(Fsync, nop) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + + fd = open(FULLPATH, O_WRONLY); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(0, fsync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + + Added: projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Mon Mar 11 22:29:56 2019 (r345035) @@ -0,0 +1,186 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +/* + * TODO: remove FUSE_FSYNC_FDATASYNC definition when upgrading to protocol 7.28. + * This bit was actually part of kernel protocol version 5.2, but never + * documented until after 7.28 + */ +#ifndef FUSE_FSYNC_FDATASYNC +#define FUSE_FSYNC_FDATASYNC 1 +#endif + +class FsyncDir: public FuseTest { +public: +const static uint64_t FH = 0xdeadbeef1a7ebabe; +void expect_fsyncdir(uint64_t ino, uint32_t flags, int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_FSYNCDIR && + in->header.nodeid == ino && + //(pid_t)in->header.pid == getpid() && + in->body.fsyncdir.fh == FH && + in->body.fsyncdir.fsync_flags == flags); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFDIR | 0755; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_opendir(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = FH; + })); +} + +}; + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236379 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(FsyncDir, DISABLED_aio_fsync) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct aiocb iocb, *piocb; + int fd; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_fsyncdir(ino, 0, 0); + + fd = open(FULLPATH, O_DIRECTORY); + ASSERT_LE(0, fd) << strerror(errno); + + bzero(&iocb, sizeof(iocb)); + iocb.aio_fildes = fd; + + ASSERT_EQ(0, aio_fsync(O_SYNC, &iocb)) << strerror(errno); + ASSERT_EQ(0, aio_waitcomplete(&piocb, NULL)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(FsyncDir, DISABLED_eio) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_fsyncdir(ino, 0, EIO); + + fd = open(FULLPATH, O_DIRECTORY); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_NE(0, fsync(fd)); + ASSERT_EQ(EIO, errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(FsyncDir, DISABLED_fsyncdata) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_fsyncdir(ino, FUSE_FSYNC_FDATASYNC, 0); + + fd = open(FULLPATH, O_DIRECTORY); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(0, fdatasync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * Unlike regular files, the kernel doesn't know whether a directory is or + * isn't dirty, so fuse(4) should always send FUSE_FSYNCDIR on fsync(2) + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236473 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +TEST_F(FsyncDir, DISABLED_fsync) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_fsyncdir(ino, 0, 0); + + fd = open(FULLPATH, O_DIRECTORY); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(0, fsync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 22:23:56 2019 (r345034) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Mon Mar 11 22:29:56 2019 (r345035) @@ -144,6 +144,12 @@ void debug_fuseop(const mockfs_buf_in *in) in->header.unique, in->header.len); } switch (in->header.opcode) { + case FUSE_FSYNC: + printf(" flags=%#x", in->body.fsync.fsync_flags); + break; + case FUSE_FSYNCDIR: + printf(" flags=%#x", in->body.fsyncdir.fsync_flags); + break; case FUSE_LOOKUP: printf(" %s", in->body.lookup); break; @@ -154,6 +160,9 @@ void debug_fuseop(const mockfs_buf_in *in) case FUSE_READ: printf(" offset=%lu size=%u", in->body.read.offset, in->body.read.size); + break; + case FUSE_SETATTR: + printf(" valid=%#x", in->body.setattr.valid); break; case FUSE_WRITE: printf(" offset=%lu size=%u flags=%u", Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 22:23:56 2019 (r345034) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Mon Mar 11 22:29:56 2019 (r345035) @@ -75,6 +75,8 @@ union fuse_payloads_in { /* value is from fuse_kern_chan.c in fusefs-libs */ uint8_t bytes[0x21000 - sizeof(struct fuse_in_header)]; fuse_flush_in flush; + fuse_fsync_in fsync; + fuse_fsync_in fsyncdir; fuse_forget_in forget; fuse_init_in init; fuse_link_in link; Added: projects/fuse2/tests/sys/fs/fuse/opendir.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/opendir.cc Mon Mar 11 22:29:56 2019 (r345035) @@ -0,0 +1,123 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +class Opendir: public FuseTest { +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFDIR | 0755; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} +}; + + +/* + * The fuse daemon fails the request with enoent. This usually indicates a + * race condition: some other FUSE client removed the file in between when the + * kernel checked for it with lookup and tried to open it + */ +TEST_F(Opendir, enoent) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + + expect_lookup(RELPATH, ino); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(ENOENT))); + EXPECT_NE(0, open(FULLPATH, O_DIRECTORY)); + EXPECT_EQ(ENOENT, errno); +} + +/* + * The daemon is responsible for checking file permissions (unless the + * default_permissions mount option was used) + */ +TEST_F(Opendir, eperm) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + + expect_lookup(RELPATH, ino); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EPERM))); + + EXPECT_NE(0, open(FULLPATH, O_DIRECTORY)); + EXPECT_EQ(EPERM, errno); +} + +TEST_F(Opendir, ok) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + + expect_lookup(RELPATH, ino); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, open); + })); + + EXPECT_LE(0, open(FULLPATH, O_DIRECTORY)) << strerror(errno); +} Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 22:23:56 2019 (r345034) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Mon Mar 11 22:29:56 2019 (r345035) @@ -580,6 +580,39 @@ TEST_F(Write, write_nothing) /* Deliberately leak fd. close(2) will be tested in release.cc */ } +/* In writeback mode, dirty data should be written on close */ +TEST_F(WriteBack, close) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETATTR); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + })); + expect_release(ino, ReturnErrno(0)); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + close(fd); +} + /* * Without direct_io, writes should be committed to cache */ From owner-svn-src-projects@freebsd.org Mon Mar 11 22:39:07 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B4220153124D for ; Mon, 11 Mar 2019 22:39:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 539CC878EE; Mon, 11 Mar 2019 22:39:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 42F25194CD; Mon, 11 Mar 2019 22:39:07 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2BMd7Jn071382; Mon, 11 Mar 2019 22:39:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BMd7jJ071381; Mon, 11 Mar 2019 22:39:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903112239.x2BMd7jJ071381@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 22:39:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345036 - projects/import-googletest-1.8.1/tools/build/mk X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/import-googletest-1.8.1/tools/build/mk X-SVN-Commit-Revision: 345036 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 539CC878EE X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.967,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 22:39:08 -0000 Author: ngie Date: Mon Mar 11 22:39:06 2019 New Revision: 345036 URL: https://svnweb.freebsd.org/changeset/base/345036 Log: Remove optional files when MK_GOOGLETEST == yes Modified: projects/import-googletest-1.8.1/tools/build/mk/OptionalObsoleteFiles.inc Modified: projects/import-googletest-1.8.1/tools/build/mk/OptionalObsoleteFiles.inc ============================================================================== --- projects/import-googletest-1.8.1/tools/build/mk/OptionalObsoleteFiles.inc Mon Mar 11 22:29:56 2019 (r345035) +++ projects/import-googletest-1.8.1/tools/build/mk/OptionalObsoleteFiles.inc Mon Mar 11 22:39:06 2019 (r345036) @@ -2776,6 +2776,135 @@ OLD_FILES+=usr/libexec/gdb OLD_FILES+=usr/libexec/kgdb .endif +.if ${MK_GOOGLETEST} == no +OLD_FILES+=usr/include/gmock/gmock-actions.h +OLD_FILES+=usr/include/gmock/gmock-cardinalities.h +OLD_FILES+=usr/include/gmock/gmock-generated-actions.h +OLD_FILES+=usr/include/gmock/gmock-generated-function-mockers.h +OLD_FILES+=usr/include/gmock/gmock-generated-matchers.h +OLD_FILES+=usr/include/gmock/gmock-generated-nice-strict.h +OLD_FILES+=usr/include/gmock/gmock-matchers.h +OLD_FILES+=usr/include/gmock/gmock-more-actions.h +OLD_FILES+=usr/include/gmock/gmock-more-matchers.h +OLD_FILES+=usr/include/gmock/gmock-spec-builders.h +OLD_FILES+=usr/include/gmock/gmock.h +OLD_FILES+=usr/include/gmock/internal/custom/gmock-generated-actions.h +OLD_FILES+=usr/include/gmock/internal/custom/gmock-matchers.h +OLD_FILES+=usr/include/gmock/internal/custom/gmock-port.h +OLD_FILES+=usr/include/gmock/internal/gmock-generated-internal-utils.h +OLD_FILES+=usr/include/gmock/internal/gmock-internal-utils.h +OLD_FILES+=usr/include/gmock/internal/gmock-port.h +OLD_DIRS+=usr/include/gmock +OLD_FILES+=usr/include/gtest/gtest_pred_impl.h +OLD_FILES+=usr/include/gtest/gtest_prod.h +OLD_FILES+=usr/include/gtest/gtest-death-test.h +OLD_FILES+=usr/include/gtest/gtest-message.h +OLD_FILES+=usr/include/gtest/gtest-param-test.h +OLD_FILES+=usr/include/gtest/gtest-printers.h +OLD_FILES+=usr/include/gtest/gtest-spi.h +OLD_FILES+=usr/include/gtest/gtest-test-part.h +OLD_FILES+=usr/include/gtest/gtest-typed-test.h +OLD_FILES+=usr/include/gtest/gtest.h +OLD_FILES+=usr/include/gtest/internal/custom/gtest-port.h +OLD_FILES+=usr/include/gtest/internal/custom/gtest-printers.h +OLD_FILES+=usr/include/gtest/internal/custom/gtest.h +OLD_FILES+=usr/include/gtest/internal/gtest-death-test-internal.h +OLD_FILES+=usr/include/gtest/internal/gtest-filepath.h +OLD_FILES+=usr/include/gtest/internal/gtest-internal.h +OLD_FILES+=usr/include/gtest/internal/gtest-linked_ptr.h +OLD_FILES+=usr/include/gtest/internal/gtest-param-util-generated.h +OLD_FILES+=usr/include/gtest/internal/gtest-param-util.h +OLD_FILES+=usr/include/gtest/internal/gtest-port-arch.h +OLD_FILES+=usr/include/gtest/internal/gtest-port.h +OLD_FILES+=usr/include/gtest/internal/gtest-string.h +OLD_FILES+=usr/include/gtest/internal/gtest-tuple.h +OLD_FILES+=usr/include/gtest/internal/gtest-type-util.h +OLD_DIRS+=usr/include/gtest +OLD_FILES+=usr/lib/libprivategmock_main.a +OLD_FILES+=usr/lib/libprivategmock_main.so +OLD_LIBS+=usr/lib/libprivategmock_main.so.0 +OLD_FILES+=usr/lib/libprivategmock_main_p.a +OLD_FILES+=usr/lib/libprivategmock.a +OLD_FILES+=usr/lib/libprivategmock.so +OLD_LIBS+=usr/lib/libprivategmock.so.0 +OLD_FILES+=usr/lib/libprivategmock_p.a +OLD_FILES+=usr/lib/libprivategtest_main.a +OLD_FILES+=usr/lib/libprivategtest_main.so +OLD_LIBS+=usr/lib/libprivategtest_main.so.0 +OLD_FILES+=usr/lib/libprivategtest_main_p.a +OLD_FILES+=usr/lib/libprivategtest.a +OLD_FILES+=usr/lib/libprivategtest.so +OLD_LIBS+=usr/lib/libprivategtest.so.0 +OLD_FILES+=usr/lib/libprivategtest_p.a +OLD_FILES+=usr/tests/lib/googletest/gmock/gmock_stress_test +OLD_FILES+=usr/tests/lib/googletest/gmock/Kyuafile +OLD_DIRS+=usr/tests/lib/googletest/gmock +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_ex_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_link_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-actions_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-cardinalities_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-ex_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-actions_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-function-mockers_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-internal-utils_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-generated-matchers_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-internal-utils_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-matchers_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-more-actions_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-nice-strict_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-port_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/gmock-spec-builders_test +OLD_FILES+=usr/tests/lib/googletest/gmock_main/Kyuafile +OLD_DIRS+=usr/tests/lib/googletest/gmock_main +OLD_FILES+=usr/tests/lib/googletest/gtest/googletest-param-test-test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_all_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_environment_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_no_test_unittest +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_premature_exit_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_repeat_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_stress_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest_throw_on_failure_ex_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-death-test_ex_catch_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-death-test_ex_nocatch_test +OLD_FILES+=usr/tests/lib/googletest/gtest/gtest-unittest-api_test +OLD_FILES+=usr/tests/lib/googletest/gtest/Kyuafile +OLD_DIRS+=usr/tests/lib/googletest/gtest +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-death-test-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-filepath-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-linked-ptr-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-listener-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-message-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-options-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-port-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-printers-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/googletest-test-part-test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_help_test_ +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_main_unittest +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_pred_impl_unittest +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_prod_test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_sole_header_test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_unittest +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_xml_outfile1_test_ +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest_xml_outfile2_test_ +OLD_FILES+=usr/tests/lib/googletest/gtest_main/gtest-typed-test_test +OLD_FILES+=usr/tests/lib/googletest/gtest_main/Kyuafile +OLD_DIRS+=usr/tests/lib/googletest/gtest_main +OLD_FILES+=usr/tests/lib/googletest/Kyuafile +OLD_DIRS+=usr/tests/lib/googletest/ +OLD_FILES+=usr/tests/share/examples/tests/googletest/Kyuafile +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample1_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample10_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample2_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample3_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample4_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample5_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample6_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample7_unittest +OLD_FILES+=usr/tests/share/examples/tests/googletest/sample8_unittest +OLD_DIRS+=usr/tests/share/examples/tests/googletest +.endif + .if ${MK_GPIO} == no OLD_FILES+=usr/include/libgpio.h OLD_FILES+=usr/lib/libgpio.a From owner-svn-src-projects@freebsd.org Mon Mar 11 22:43:25 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B18B815314DC for ; Mon, 11 Mar 2019 22:43:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5107887EFB; Mon, 11 Mar 2019 22:43:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4293C19688; Mon, 11 Mar 2019 22:43:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2BMhPNn076419; Mon, 11 Mar 2019 22:43:25 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BMhPZL076418; Mon, 11 Mar 2019 22:43:25 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903112243.x2BMhPZL076418@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 22:43:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345038 - projects/import-googletest-1.8.1/share/examples/tests/tests/googletest X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/import-googletest-1.8.1/share/examples/tests/tests/googletest X-SVN-Commit-Revision: 345038 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 5107887EFB X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.967,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 22:43:25 -0000 Author: ngie Date: Mon Mar 11 22:43:24 2019 New Revision: 345038 URL: https://svnweb.freebsd.org/changeset/base/345038 Log: Tweak the examples integration * Install the samples to the correct directory. * Annotate with comments, like the other directories. * Simplify the for loops; they were only needed for matching which tests require `libgtest` instead of `libgtest_main`. Modified: projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile Modified: projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile ============================================================================== --- projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile Mon Mar 11 22:42:33 2019 (r345037) +++ projects/import-googletest-1.8.1/share/examples/tests/tests/googletest/Makefile Mon Mar 11 22:43:24 2019 (r345038) @@ -1,5 +1,25 @@ # $FreeBSD$ +# +# This Makefile differs from the other examples, in the sense that its purpose +# is to install the upstream provided googletest sample unit tests. +# The release package to use for the tests contained within the directory +# +# This applies to components which rely on ^/projects/release-pkg support +# (see UPDATING XXXXXXXXX / svn revision r298107). +PACKAGE= tests + +# Directory into which the Kyuafile provided by this directory will be +# installed. +# +# This is always a subdirectory of ${TESTSBASE}/. The remainder of the +# path has to match the relative path within the source tree in which +# these files are found modulo the tests/ component at the end. +# +# For example: if this Makefile were in src/bin/cp/tests/, its TESTSDIR +# would point at ${TESTSBASE}/bin/cp/. +TESTSDIR= ${TESTSBASE}/share/examples/tests/googletest + .PATH: ${SRCTOP}/contrib/googletest/googletest/samples GTEST_MAIN_REQ_TESTS+= sample1_unittest @@ -16,18 +36,21 @@ GTEST_MAIN_REQ_TESTS+= sample8_unittest #GTEST_REQ_TESTS+= sample9_unittest GTEST_REQ_TESTS+= sample10_unittest -.for t in ${GTEST_MAIN_REQ_TESTS} -GTESTS+= $t -LIBADD.$t+= gtest_main -SRCS.$t+= $t.cc -.endfor +# List of test programs to build. Note that we can build more than one +# test from a single directory, and this is expected. +GTESTS+= ${GTEST_MAIN_REQ_TESTS} ${GTEST_REQ_TESTS} -.for t in ${GTEST_REQ_TESTS} -GTESTS+= $t +# +.for t in ${GTESTS} +.if ${GTEST_MAIN_REQ_TESTS:M$t} +LIBADD.$t+= gtest_main +.else LIBADD.$t+= gtest +.endif SRCS.$t+= $t.cc .endfor +# Additional sources for sample testcase 1, 2, 4, and 5. SRCS.sample1_unittest+= sample1.cc SRCS.sample2_unittest+= sample2.cc SRCS.sample4_unittest+= sample4.cc From owner-svn-src-projects@freebsd.org Mon Mar 11 23:27:51 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 551611532269 for ; Mon, 11 Mar 2019 23:27:51 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E788E89640; Mon, 11 Mar 2019 23:27:50 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CE9E219DB2; Mon, 11 Mar 2019 23:27:50 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2BNRo8C097681; Mon, 11 Mar 2019 23:27:50 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2BNRo65097680; Mon, 11 Mar 2019 23:27:50 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903112327.x2BNRo65097680@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Mon, 11 Mar 2019 23:27:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345042 - in projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd: . tests X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd: . tests X-SVN-Commit-Revision: 345042 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: E788E89640 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.97)[-0.966,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 23:27:51 -0000 Author: ngie Date: Mon Mar 11 23:27:50 2019 New Revision: 345042 URL: https://svnweb.freebsd.org/changeset/base/345042 Log: Fix integration with zfsd_unittest The previous code didn't nul out SRCS after setting the pre-bsd.progs.mk value, however, when recursing down into bsd.prog.mk, it was appending the per-prog value to the value of SRCS. The other catch is that code did not install the zfsd headers, so some of the headers, e.g., callout.h could not be found. So, add `-I${SRCTOP}/cddl/usr.sbin` to CXXFLAGS. While here, fix a typo: `LIBDADD.zfsd_unittest` should have been `LIBADD.zfsd_unittest`, and remove the superfluous `DPADD` part which was never required post-LIBADD integration. Modified: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile.common projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/tests/Makefile Modified: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile.common ============================================================================== --- projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile.common Mon Mar 11 23:18:09 2019 (r345041) +++ projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile.common Mon Mar 11 23:27:50 2019 (r345042) @@ -28,12 +28,11 @@ INCFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/li INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/zfs INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common INCFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common/fs/zfs +INCFLAGS+= -I${SRCTOP}/cddl/usr.sbin CFLAGS= -g -DNEED_SOLARIS_BOOLEAN ${INCFLAGS} -DPADD= ${LIBDEVDCTL} ${LIBZFS} ${LIBZFS_CORE} ${LIBUTIL} ${LIBGEOM} \ - ${LIBBSDXML} ${LIBSBUF} ${LIBNVPAIR} ${LIBUUTIL} -LIBADD= devdctl zfs zfs_core util geom bsdxml sbuf nvpair uutil +LIBADD+= devdctl zfs zfs_core util geom bsdxml sbuf nvpair uutil cscope: find ${.CURDIR} -type f -a \( -name "*.[ch]" -o -name "*.cc" \) \ Modified: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/tests/Makefile ============================================================================== --- projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/tests/Makefile Mon Mar 11 23:18:09 2019 (r345041) +++ projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/tests/Makefile Mon Mar 11 23:27:50 2019 (r345042) @@ -7,7 +7,8 @@ GTESTS= zfsd_unittest SRCS.zfsd_unittest:= ${SRCS:Nzfsd_main.cc} SRCS.zfsd_unittest+= libmocks.c zfsd_unittest.cc +.undef SRCS -LIBDADD.zfsd_unittest+= gmock_main +LIBADD.zfsd_unittest+= gmock_main .include From owner-svn-src-projects@freebsd.org Tue Mar 12 01:12:36 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F3B091535808 for ; Tue, 12 Mar 2019 01:12:35 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 98DCF8D993; Tue, 12 Mar 2019 01:12:35 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8A2361B195; Tue, 12 Mar 2019 01:12:35 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2C1CZuj056608; Tue, 12 Mar 2019 01:12:35 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2C1CZcv056607; Tue, 12 Mar 2019 01:12:35 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903120112.x2C1CZcv056607@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Tue, 12 Mar 2019 01:12:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345045 - in projects/import-googletest-1.8.1: share/mk tools/build/options X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/import-googletest-1.8.1: share/mk tools/build/options X-SVN-Commit-Revision: 345045 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 98DCF8D993 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.98)[-0.977,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 01:12:36 -0000 Author: ngie Date: Tue Mar 12 01:12:34 2019 New Revision: 345045 URL: https://svnweb.freebsd.org/changeset/base/345045 Log: Adjust code based on comments from @asomers in D19551 Modified: projects/import-googletest-1.8.1/share/mk/googletest.test.inc.mk projects/import-googletest-1.8.1/tools/build/options/WITHOUT_GOOGLETEST Modified: projects/import-googletest-1.8.1/share/mk/googletest.test.inc.mk ============================================================================== --- projects/import-googletest-1.8.1/share/mk/googletest.test.inc.mk Tue Mar 12 00:10:31 2019 (r345044) +++ projects/import-googletest-1.8.1/share/mk/googletest.test.inc.mk Tue Mar 12 01:12:34 2019 (r345045) @@ -1,10 +1,13 @@ # $FreeBSD$ +# XXX: this should be defined in bsd.sys.mk +CXXSTD?= c++11 + GTESTS_CXXFLAGS+= -DGTEST_HAS_POSIX_RE=1 GTESTS_CXXFLAGS+= -DGTEST_HAS_PTHREAD=1 GTESTS_CXXFLAGS+= -DGTEST_HAS_STREAM_REDIRECTION=1 GTESTS_CXXFLAGS+= -frtti -GTESTS_CXXFLAGS+= -std=c++11 +GTESTS_CXXFLAGS+= -std=${CXXSTD} # XXX: src.libnames.mk should handle adding this directory. GTESTS_CXXFLAGS+= -I${DESTDIR}${INCLUDEDIR}/private Modified: projects/import-googletest-1.8.1/tools/build/options/WITHOUT_GOOGLETEST ============================================================================== --- projects/import-googletest-1.8.1/tools/build/options/WITHOUT_GOOGLETEST Tue Mar 12 00:10:31 2019 (r345044) +++ projects/import-googletest-1.8.1/tools/build/options/WITHOUT_GOOGLETEST Tue Mar 12 01:12:34 2019 (r345045) @@ -1,5 +1,5 @@ .\" $FreeBSD$ -Set to not build nor install +Set to neither build nor install .Lb libgmock , .Lb libgtest , and dependent tests. From owner-svn-src-projects@freebsd.org Tue Mar 12 02:43:08 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7C41E153F211 for ; Tue, 12 Mar 2019 02:43:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 233256D598; Tue, 12 Mar 2019 02:43:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 099D21C4F0; Tue, 12 Mar 2019 02:43:08 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2C2h76q004349; Tue, 12 Mar 2019 02:43:07 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2C2h7pF004348; Tue, 12 Mar 2019 02:43:07 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903120243.x2C2h7pF004348@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Tue, 12 Mar 2019 02:43:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345047 - projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd X-SVN-Commit-Revision: 345047 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 233256D598 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.96)[-0.962,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 02:43:08 -0000 Author: ngie Date: Tue Mar 12 02:43:07 2019 New Revision: 345047 URL: https://svnweb.freebsd.org/changeset/base/345047 Log: The zfsd tests need to depend on MK_GOOGLETEST instead of MK_TESTS This will unbreak the build with mips*/powerpc*. Modified: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile Modified: projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile ============================================================================== --- projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile Tue Mar 12 01:43:01 2019 (r345046) +++ projects/import-googletest-1.8.1/cddl/usr.sbin/zfsd/Makefile Tue Mar 12 02:43:07 2019 (r345047) @@ -8,6 +8,6 @@ PROG_CXX= zfsd MAN= zfsd.8 HAS_TESTS= -SUBDIR.${MK_TESTS}+= tests +SUBDIR.${MK_GOOGLETEST}+= tests .include From owner-svn-src-projects@freebsd.org Tue Mar 12 02:52:23 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C9249153FD4C for ; Tue, 12 Mar 2019 02:52:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 666B36DE6C; Tue, 12 Mar 2019 02:52:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3E7A51C6E6; Tue, 12 Mar 2019 02:52:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2C2qNrn009353; Tue, 12 Mar 2019 02:52:23 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2C2qNNF009352; Tue, 12 Mar 2019 02:52:23 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903120252.x2C2qNNF009352@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Tue, 12 Mar 2019 02:52:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345048 - projects/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test X-SVN-Commit-Revision: 345048 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 666B36DE6C X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.96)[-0.961,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 02:52:24 -0000 Author: ngie Date: Tue Mar 12 02:52:22 2019 New Revision: 345048 URL: https://svnweb.freebsd.org/changeset/base/345048 Log: Copy ^/projects/import-googletest-1.8.1 to ^/projects/capsicum-test The goal of this branch is to do integration work necessary to make the capsicum-test project from https://github.com/google/capsicum-test work on FreeBSD. I might need to do some fudging, based on the fact that capsicum-test had an embedded copy of capsicum called libcaprights. Added: - copied from r345047, projects/import-googletest-1.8.1/ Directory Properties: projects/capsicum-test/ (props changed) From owner-svn-src-projects@freebsd.org Tue Mar 12 22:26:01 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 85F10154099D for ; Tue, 12 Mar 2019 22:26:01 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 23B828918B; Tue, 12 Mar 2019 22:26:01 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B007B1355; Tue, 12 Mar 2019 22:26:00 +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 x2CMQ0ao034904; Tue, 12 Mar 2019 22:26:00 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2CMPxoO034895; Tue, 12 Mar 2019 22:25:59 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903122225.x2CMPxoO034895@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Tue, 12 Mar 2019 22:25:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345082 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345082 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 23B828918B X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_SHORT(-0.98)[-0.979,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 22:26:01 -0000 Author: asomers Date: Tue Mar 12 22:25:59 2019 New Revision: 345082 URL: https://svnweb.freebsd.org/changeset/base/345082 Log: fuse(4): add tests for opendir and readdir Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/readdir.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/opendir.cc Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Tue Mar 12 21:03:56 2019 (r345081) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Tue Mar 12 22:25:59 2019 (r345082) @@ -17,6 +17,7 @@ ATF_TESTS_CXX+= mknod ATF_TESTS_CXX+= open ATF_TESTS_CXX+= opendir ATF_TESTS_CXX+= read +ATF_TESTS_CXX+= readdir ATF_TESTS_CXX+= readlink ATF_TESTS_CXX+= release ATF_TESTS_CXX+= rename @@ -91,6 +92,11 @@ SRCS.read+= getmntopts.c SRCS.read+= mockfs.cc SRCS.read+= read.cc SRCS.read+= utils.cc + +SRCS.readdir+= getmntopts.c +SRCS.readdir+= mockfs.cc +SRCS.readdir+= readdir.cc +SRCS.readdir+= utils.cc SRCS.readlink+= getmntopts.c SRCS.readlink+= mockfs.cc Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Tue Mar 12 21:03:56 2019 (r345081) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Tue Mar 12 22:25:59 2019 (r345082) @@ -157,9 +157,17 @@ void debug_fuseop(const mockfs_buf_in *in) printf(" flags=%#x mode=%#o", in->body.open.flags, in->body.open.mode); break; + case FUSE_OPENDIR: + printf(" flags=%#x mode=%#o", + in->body.opendir.flags, in->body.opendir.mode); + break; case FUSE_READ: printf(" offset=%lu size=%u", in->body.read.offset, in->body.read.size); + break; + case FUSE_READDIR: + printf(" offset=%lu size=%u", in->body.readdir.offset, + in->body.readdir.size); break; case FUSE_SETATTR: printf(" valid=%#x", in->body.setattr.valid); Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Tue Mar 12 21:03:56 2019 (r345081) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Tue Mar 12 22:25:59 2019 (r345082) @@ -84,7 +84,9 @@ union fuse_payloads_in { fuse_mkdir_in mkdir; fuse_mknod_in mknod; fuse_open_in open; + fuse_open_in opendir; fuse_read_in read; + fuse_read_in readdir; fuse_release_in release; fuse_rename_in rename; char rmdir[0]; Modified: projects/fuse2/tests/sys/fs/fuse/opendir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/opendir.cc Tue Mar 12 21:03:56 2019 (r345081) +++ projects/fuse2/tests/sys/fs/fuse/opendir.cc Tue Mar 12 22:25:59 2019 (r345082) @@ -29,6 +29,7 @@ */ extern "C" { +#include #include } @@ -100,7 +101,7 @@ TEST_F(Opendir, eperm) EXPECT_EQ(EPERM, errno); } -TEST_F(Opendir, ok) +TEST_F(Opendir, open) { const char FULLPATH[] = "mountpoint/some_dir"; const char RELPATH[] = "some_dir"; @@ -120,4 +121,36 @@ TEST_F(Opendir, ok) })); EXPECT_LE(0, open(FULLPATH, O_DIRECTORY)) << strerror(errno); +} + +TEST_F(Opendir, opendir) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + + expect_lookup(RELPATH, ino); + EXPECT_CALL(*m_mock, process( + ResultOf([](auto in) { + return (in->header.opcode == FUSE_STATFS); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, statfs); + })); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, open); + })); + + errno = 0; + EXPECT_NE(NULL, opendir(FULLPATH)) << strerror(errno); } Added: projects/fuse2/tests/sys/fs/fuse/readdir.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/readdir.cc Tue Mar 12 22:25:59 2019 (r345082) @@ -0,0 +1,334 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; +using namespace std; + +class Readdir: public FuseTest { +const static uint64_t FH = 0xdeadbeef1a7ebabe; +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFDIR | 0755; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_opendir(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([](auto in) { + return (in->header.opcode == FUSE_STATFS); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, statfs); + })); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = FH; + })); +} + +void expect_readdir(uint64_t ino, uint64_t off, vector &ents) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READDIR && + in->header.nodeid == ino && + in->body.readdir.offset == off); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + struct fuse_dirent *fde = (struct fuse_dirent*)out->body.bytes; + int i = 0; + + out->header.unique = in->header.unique; + out->header.error = 0; + out->header.len = 0; + + for (const auto& it: ents) { + size_t entlen, entsize; + + fde->ino = it.d_fileno; + fde->off = it.d_off; + fde->type = it.d_type; + fde->namelen = it.d_namlen; + strncpy(fde->name, it.d_name, it.d_namlen); + entlen = FUSE_NAME_OFFSET + fde->namelen; + entsize = FUSE_DIRENT_SIZE(fde); + /* + * The FUSE protocol does not require zeroing out the + * unused portion of the name. But it's a good + * practice to prevent information disclosure to the + * FUSE client, even though the client is usually the + * kernel + */ + memset(fde->name + fde->namelen, 0, entsize - entlen); + if (out->header.len + entsize > in->body.read.size) { + printf("Overflow in readdir expectation: i=%d\n" + , i); + break; + } + out->header.len += entsize; + fde = (struct fuse_dirent*) + ((long*)fde + entsize / sizeof(long)); + i++; + } + out->header.len += sizeof(out->header); + })); + +} +}; + +/* FUSE_READDIR returns nothing but "." and ".." */ +TEST_F(Readdir, dots) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + DIR *dir; + struct dirent *de; + vector ents(2); + vector empty_ents(0); + const char *dot = "."; + const char *dotdot = ".."; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + ents[0].d_fileno = 2; + ents[0].d_off = 2000; + ents[0].d_namlen = strlen(dotdot); + ents[0].d_type = DT_DIR; + strncpy(ents[0].d_name, dotdot, ents[0].d_namlen); + ents[1].d_fileno = 3; + ents[1].d_off = 3000; + ents[1].d_namlen = strlen(dot); + ents[1].d_type = DT_DIR; + strncpy(ents[1].d_name, dot, ents[1].d_namlen); + expect_readdir(ino, 0, ents); + expect_readdir(ino, 3000, empty_ents); + + errno = 0; + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + + errno = 0; + de = readdir(dir); + ASSERT_NE(NULL, de) << strerror(errno); + EXPECT_EQ(2ul, de->d_fileno); + /* + * fuse(4) doesn't actually set d_off, which is ok for now because + * nothing uses it. + */ + //EXPECT_EQ(2000, de->d_off); + EXPECT_EQ(DT_DIR, de->d_type); + EXPECT_EQ(2, de->d_namlen); + EXPECT_EQ(0, strcmp("..", de->d_name)); + + errno = 0; + de = readdir(dir); + ASSERT_NE(NULL, de) << strerror(errno); + EXPECT_EQ(3ul, de->d_fileno); + //EXPECT_EQ(3000, de->d_off); + EXPECT_EQ(DT_DIR, de->d_type); + EXPECT_EQ(1, de->d_namlen); + EXPECT_EQ(0, strcmp(".", de->d_name)); + + ASSERT_EQ(NULL, readdir(dir)); + ASSERT_EQ(0, errno); + + /* Deliberately leak dir. RELEASEDIR will be tested separately */ +} + +TEST_F(Readdir, eio) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + DIR *dir; + struct dirent *de; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READDIR && + in->header.nodeid == ino && + in->body.readdir.offset == 0); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EIO))); + + errno = 0; + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + + errno = 0; + de = readdir(dir); + ASSERT_EQ(NULL, de); + ASSERT_EQ(EIO, errno); + + /* Deliberately leak dir. RELEASEDIR will be tested separately */ +} + +/* + * FUSE_READDIR returns nothing, not even "." and "..". This is legal, though + * the filesystem obviously won't be fully functional. + */ +TEST_F(Readdir, nodots) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + DIR *dir; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.error = 0; + out->header.len = sizeof(out->header); + })); + + errno = 0; + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + errno = 0; + ASSERT_EQ(NULL, readdir(dir)); + ASSERT_EQ(0, errno); + + /* Deliberately leak dir. RELEASEDIR will be tested separately */ +} + +/* telldir(3) and seekdir(3) should work with fuse */ +TEST_F(Readdir, seekdir) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + DIR *dir; + struct dirent *de; + /* + * use enough entries to be > 4096 bytes, so getdirentries must be + * called + * multiple times. + */ + vector ents0(122), ents1(102), ents2(30); + long bookmark; + int i = 0; + + for (auto& it: ents0) { + snprintf(it.d_name, MAXNAMLEN, "file.%d", i); + it.d_fileno = 2 + i; + it.d_off = (2 + i) * 1000; + it.d_namlen = strlen(it.d_name); + it.d_type = DT_REG; + i++; + } + for (auto& it: ents1) { + snprintf(it.d_name, MAXNAMLEN, "file.%d", i); + it.d_fileno = 2 + i; + it.d_off = (2 + i) * 1000; + it.d_namlen = strlen(it.d_name); + it.d_type = DT_REG; + i++; + } + for (auto& it: ents2) { + snprintf(it.d_name, MAXNAMLEN, "file.%d", i); + it.d_fileno = 2 + i; + it.d_off = (2 + i) * 1000; + it.d_namlen = strlen(it.d_name); + it.d_type = DT_REG; + i++; + } + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + + expect_readdir(ino, 0, ents0); + expect_readdir(ino, 123000, ents1); + expect_readdir(ino, 225000, ents2); + + errno = 0; + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + + for (i=0; i < 128; i++) { + errno = 0; + de = readdir(dir); + ASSERT_NE(NULL, de) << strerror(errno); + EXPECT_EQ(2 + (ino_t)i, de->d_fileno); + } + bookmark = telldir(dir); + + for (; i < 232; i++) { + errno = 0; + de = readdir(dir); + ASSERT_NE(NULL, de) << strerror(errno); + EXPECT_EQ(2 + (ino_t)i, de->d_fileno); + } + + seekdir(dir, bookmark); + de = readdir(dir); + ASSERT_NE(NULL, de) << strerror(errno); + EXPECT_EQ(130ul, de->d_fileno); + + /* Deliberately leak dir. RELEASEDIR will be tested separately */ +} From owner-svn-src-projects@freebsd.org Wed Mar 13 13:41:07 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 17C541533C16 for ; Wed, 13 Mar 2019 13:41:07 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AD5EA77FA9; Wed, 13 Mar 2019 13:41:06 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A0DAAB227; Wed, 13 Mar 2019 13:41:06 +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 x2DDf6ir013944; Wed, 13 Mar 2019 13:41:06 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2DDf5aB013942; Wed, 13 Mar 2019 13:41:05 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903131341.x2DDf5aB013942@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Wed, 13 Mar 2019 13:41:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345086 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345086 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: AD5EA77FA9 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.97)[-0.974,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 13:41:07 -0000 Author: asomers Date: Wed Mar 13 13:41:05 2019 New Revision: 345086 URL: https://svnweb.freebsd.org/changeset/base/345086 Log: fues(4): add tests for FUSE_RELEASEDIR Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/releasedir.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.hh Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Wed Mar 13 09:48:33 2019 (r345085) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Wed Mar 13 13:41:05 2019 (r345086) @@ -20,6 +20,7 @@ ATF_TESTS_CXX+= read ATF_TESTS_CXX+= readdir ATF_TESTS_CXX+= readlink ATF_TESTS_CXX+= release +ATF_TESTS_CXX+= releasedir ATF_TESTS_CXX+= rename ATF_TESTS_CXX+= rmdir ATF_TESTS_CXX+= setattr @@ -107,6 +108,11 @@ SRCS.release+= getmntopts.c SRCS.release+= mockfs.cc SRCS.release+= release.cc SRCS.release+= utils.cc + +SRCS.releasedir+= getmntopts.c +SRCS.releasedir+= mockfs.cc +SRCS.releasedir+= releasedir.cc +SRCS.releasedir+= utils.cc SRCS.rename+= getmntopts.c SRCS.rename+= mockfs.cc Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Wed Mar 13 09:48:33 2019 (r345085) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Wed Mar 13 13:41:05 2019 (r345086) @@ -88,6 +88,7 @@ union fuse_payloads_in { fuse_read_in read; fuse_read_in readdir; fuse_release_in release; + fuse_release_in releasedir; fuse_rename_in rename; char rmdir[0]; fuse_setattr_in setattr; Added: projects/fuse2/tests/sys/fs/fuse/releasedir.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/releasedir.cc Wed Mar 13 13:41:05 2019 (r345086) @@ -0,0 +1,144 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +class ReleaseDir: public FuseTest { + +const static uint64_t FH = 0xdeadbeef1a7ebabe; + +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFDIR | 0755; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_opendir(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([](auto in) { + return (in->header.opcode == FUSE_STATFS); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, statfs); + })); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPENDIR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = FH; + })); +} + +void expect_releasedir(uint64_t ino, ProcessMockerT r) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_RELEASEDIR && + in->header.nodeid == ino && + in->body.release.fh == FH); + }, Eq(true)), + _) + ).WillOnce(Invoke(r)); +} +}; + +/* If a file descriptor is duplicated, only the last close causes RELEASE */ +TEST_F(ReleaseDir, dup) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + DIR *dir, *dir2; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READDIR && + in->header.nodeid == ino && + in->body.readdir.offset == 0); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.error = 0; + out->header.len = sizeof(out->header); + })); + expect_releasedir(ino, ReturnErrno(0)); + + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + + dir2 = fdopendir(dup(dirfd(dir))); + ASSERT_NE(NULL, dir2) << strerror(errno); + + ASSERT_EQ(0, closedir(dir)) << strerror(errno); + ASSERT_EQ(0, closedir(dir2)) << strerror(errno); +} + +TEST_F(ReleaseDir, ok) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + DIR *dir; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_releasedir(ino, ReturnErrno(0)); + + dir = opendir(FULLPATH); + ASSERT_NE(NULL, dir) << strerror(errno); + + ASSERT_EQ(0, closedir(dir)) << strerror(errno); +} From owner-svn-src-projects@freebsd.org Wed Mar 13 22:16:02 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 475071543556 for ; Wed, 13 Mar 2019 22:16:02 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C7AFB72BB3; Wed, 13 Mar 2019 22:16:01 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B619A18DB7; Wed, 13 Mar 2019 22:16:01 +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 x2DMG1xK097995; Wed, 13 Mar 2019 22:16:01 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2DMG0FF097989; Wed, 13 Mar 2019 22:16:00 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903132216.x2DMG0FF097989@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Wed, 13 Mar 2019 22:16:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345118 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345118 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: C7AFB72BB3 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.96)[-0.960,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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 Mar 2019 22:16:02 -0000 Author: asomers Date: Wed Mar 13 22:16:00 2019 New Revision: 345118 URL: https://svnweb.freebsd.org/changeset/base/345118 Log: fuse(4): add tests for POSIX file locking operations PR: 234581 Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/locks.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Wed Mar 13 21:53:10 2019 (r345117) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Wed Mar 13 22:16:00 2019 (r345118) @@ -11,6 +11,7 @@ ATF_TESTS_CXX+= fsync ATF_TESTS_CXX+= fsyncdir ATF_TESTS_CXX+= getattr ATF_TESTS_CXX+= link +ATF_TESTS_CXX+= locks ATF_TESTS_CXX+= lookup ATF_TESTS_CXX+= mkdir ATF_TESTS_CXX+= mknod @@ -63,6 +64,11 @@ SRCS.link+= getmntopts.c SRCS.link+= link.cc SRCS.link+= mockfs.cc SRCS.link+= utils.cc + +SRCS.locks+= locks.cc +SRCS.locks+= getmntopts.c +SRCS.locks+= mockfs.cc +SRCS.locks+= utils.cc SRCS.lookup+= getmntopts.c SRCS.lookup+= lookup.cc Added: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Wed Mar 13 22:16:00 2019 (r345118) @@ -0,0 +1,475 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +/* This flag value should probably be defined in fuse_kernel.h */ +#define OFFSET_MAX 0x7fffffffffffffffLL + +using namespace testing; + +/* For testing filesystems without posix locking support */ +class Fallback: public FuseTest { +public: +const static uint64_t FH = 0xdeadbeef1a7ebabe; + +void expect_getattr(uint64_t ino) +{ + /* Until the attr cache is working, we may send an additional GETATTR */ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_GETATTR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + out->body.attr.attr.mode = S_IFREG | 0644; + out->body.attr.attr_valid = UINT64_MAX; + })); +} + +void expect_lookup(const char *relpath, uint64_t ino) +{ + EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFREG | 0644; + out->body.entry.nodeid = ino; + out->body.entry.attr_valid = UINT64_MAX; + })); +} + +void expect_open(uint64_t ino) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_OPEN && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + out->header.len = sizeof(out->header); + SET_OUT_HEADER_LEN(out, open); + out->body.open.fh = FH; + })); +} + +}; + +/* For testing filesystems with posix locking support */ +class Locks: public Fallback { + virtual void SetUp() { + m_init_flags = FUSE_POSIX_LOCKS; + Fallback::SetUp(); + } +}; + +class GetlkFallback: public Fallback {}; +class Getlk: public Locks {}; +class SetlkFallback: public Fallback {}; +class Setlk: public Locks {}; +class SetlkwFallback: public Fallback {}; +class Setlkw: public Locks {}; + +/* + * If the fuse filesystem does not support posix file locks, then the kernel + * should fall back to local locks. + */ +TEST_F(GetlkFallback, local) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = getpid(); + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_GETLK, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * If the filesystem has no locks that fit the description, the filesystem + * should return F_UNLCK + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Getlk, DISABLED_no_locks) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_GETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == 1009 && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getlk); + out->body.getlk.lk = in->body.getlk.lk; + out->body.getlk.lk.type = F_UNLCK; + })); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_GETLK, &fl)) << strerror(errno); + ASSERT_EQ(F_UNLCK, fl.l_type); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* A different pid does have a lock */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Getlk, DISABLED_lock_exists) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + pid_t pid2 = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_GETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == 1009 && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getlk); + out->body.getlk.lk.start = 100; + out->body.getlk.lk.end = 199; + out->body.getlk.lk.type = F_WRLCK; + out->body.getlk.lk.pid = (uint32_t)pid2;; + })); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_GETLK, &fl)) << strerror(errno); + EXPECT_EQ(100, fl.l_start); + EXPECT_EQ(100, fl.l_len); + EXPECT_EQ(pid2, fl.l_pid); + EXPECT_EQ(F_WRLCK, fl.l_type); + EXPECT_EQ(SEEK_SET, fl.l_whence); + EXPECT_EQ(0, fl.l_sysid); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * If the fuse filesystem does not support posix file locks, then the kernel + * should fall back to local locks. + */ +TEST_F(SetlkFallback, local) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = getpid(); + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLK, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* Set a new lock with FUSE_SETLK */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Setlk, DISABLED_set) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == 1009 && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getlk); + out->body.getlk.lk = in->body.getlk.lk; + out->body.getlk.lk.type = F_UNLCK; + })); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLK, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* l_len = 0 is a flag value that means to lock until EOF */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Setlk, DISABLED_set_eof) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == OFFSET_MAX && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getlk); + out->body.getlk.lk = in->body.getlk.lk; + out->body.getlk.lk.type = F_UNLCK; + })); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 0; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLK, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* Fail to set a new lock with FUSE_SETLK due to a conflict */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Setlk, DISABLED_eagain) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == 1009 && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EAGAIN))); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_EQ(-1, fcntl(fd, F_SETLK, &fl)); + ASSERT_EQ(EAGAIN, errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * If the fuse filesystem does not support posix file locks, then the kernel + * should fall back to local locks. + */ +TEST_F(SetlkwFallback, local) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = getpid(); + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLKW, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * Set a new lock with FUSE_SETLK. If the lock is not available, then the + * command should block. But to the kernel, that's the same as just being + * slow, so we don't need a separate test method + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(Setlkw, DISABLED_set) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + struct flock fl; + int fd; + pid_t pid = 1234; + + expect_lookup(RELPATH, ino); + expect_open(ino); + expect_getattr(ino); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.getlk.fh == FH && + in->body.getlk.owner == (uint32_t)pid && + in->body.getlk.lk.start == 10 && + in->body.getlk.lk.end == 1009 && + in->body.getlk.lk.type == F_RDLCK && + in->body.getlk.lk.pid == 10); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getlk); + out->body.getlk.lk = in->body.getlk.lk; + out->body.getlk.lk.type = F_UNLCK; + })); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 10; + fl.l_len = 1000; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLKW, &fl)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Wed Mar 13 21:53:10 2019 (r345117) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Wed Mar 13 22:16:00 2019 (r345118) @@ -183,7 +183,7 @@ void debug_fuseop(const mockfs_buf_in *in) printf("\n"); } -MockFS::MockFS(int max_readahead) { +MockFS::MockFS(int max_readahead, uint32_t flags) { struct iovec *iov = NULL; int iovlen = 0; char fdstr[15]; @@ -225,7 +225,7 @@ MockFS::MockFS(int max_readahead) { ON_CALL(*this, process(_, _)) .WillByDefault(Invoke(this, &MockFS::process_default)); - init(); + init(flags); signal(SIGUSR1, sigint_handler); if (pthread_create(&m_daemon_id, NULL, service, (void*)this)) throw(std::system_error(errno, std::system_category(), @@ -238,7 +238,7 @@ MockFS::~MockFS() { rmdir("mountpoint"); } -void MockFS::init() { +void MockFS::init(uint32_t flags) { mockfs_buf_in *in; mockfs_buf_out *out; @@ -255,6 +255,7 @@ void MockFS::init() { out->header.error = 0; out->body.init.major = FUSE_KERNEL_VERSION; out->body.init.minor = FUSE_KERNEL_MINOR_VERSION; + out->body.init.flags = in->body.init.flags & flags; /* * The default max_write is set to this formula in libfuse, though @@ -311,6 +312,10 @@ void MockFS::loop() { } if (in->header.opcode == FUSE_FORGET) { /*Alone among the opcodes, FORGET expects no response*/ + continue; + } + if (out.header.error == FUSE_NORESPONSE) { + /* Used by tests of slow opcodes. No response ATM */ continue; } ASSERT_TRUE(write(m_fuse_fd, &out, out.header.len) > 0 || Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Wed Mar 13 21:53:10 2019 (r345117) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Wed Mar 13 22:16:00 2019 (r345118) @@ -40,6 +40,12 @@ extern "C" { #define TIME_T_MAX (std::numeric_limits::max()) +/* + * A pseudo-fuse errno used indicate that a fuse operation should have no + * response, at least not immediately + */ +#define FUSE_NORESPONSE 9999 + #define SET_OUT_HEADER_LEN(out, variant) { \ (out)->header.len = (sizeof((out)->header) + \ sizeof((out)->body.variant)); \ @@ -78,6 +84,8 @@ union fuse_payloads_in { fuse_fsync_in fsync; fuse_fsync_in fsyncdir; fuse_forget_in forget; + fuse_interrupt_in interrupt; + fuse_lk_in getlk; fuse_init_in init; fuse_link_in link; char lookup[0]; @@ -92,6 +100,7 @@ union fuse_payloads_in { fuse_rename_in rename; char rmdir[0]; fuse_setattr_in setattr; + fuse_lk_in setlk; char unlink[0]; fuse_write_in write; }; @@ -107,8 +116,10 @@ union fuse_payloads_out { /* The protocol places no limits on the size of bytes */ uint8_t bytes[0x20000]; fuse_entry_out entry; + fuse_lk_out getlk; fuse_init_out init; fuse_open_out open; + fuse_lk_out setlk; fuse_statfs_out statfs; /* * The protocol places no limits on the length of the string. This is @@ -165,7 +176,7 @@ class MockFS { pid_t m_pid; /* Initialize a session after mounting */ - void init(); + void init(uint32_t flags); /* Is pid from a process that might be involved in the test? */ bool pid_ok(pid_t pid); @@ -184,7 +195,7 @@ class MockFS { uint32_t m_max_write; /* Create a new mockfs and mount it to a tempdir */ - MockFS(int max_readahead); + MockFS(int max_readahead, uint32_t flags); virtual ~MockFS(); /* Kill the filesystem daemon without unmounting the filesystem */ Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Wed Mar 13 21:53:10 2019 (r345117) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Wed Mar 13 22:16:00 2019 (r345118) @@ -76,7 +76,7 @@ void FuseTest::SetUp() { m_maxbcachebuf = val; try { - m_mock = new MockFS(m_maxreadahead); + m_mock = new MockFS(m_maxreadahead, m_init_flags); } catch (std::system_error err) { FAIL() << err.what(); } Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.hh Wed Mar 13 21:53:10 2019 (r345117) +++ projects/fuse2/tests/sys/fs/fuse/utils.hh Wed Mar 13 22:16:00 2019 (r345118) @@ -31,6 +31,7 @@ class FuseTest : public ::testing::Test { protected: uint32_t m_maxreadahead; + uint32_t m_init_flags; MockFS *m_mock = NULL; public: @@ -40,8 +41,10 @@ class FuseTest : public ::testing::Test { * libfuse's default max_readahead is UINT_MAX, though it can be * lowered */ - FuseTest(): FuseTest(UINT_MAX) {} + FuseTest(): FuseTest(UINT_MAX, 0) {} FuseTest(uint32_t maxreadahead): m_maxreadahead(maxreadahead) {} + FuseTest(uint32_t maxreadahead, uint32_t init_flags): + m_maxreadahead(maxreadahead), m_init_flags(init_flags) {} virtual void SetUp(); From owner-svn-src-projects@freebsd.org Thu Mar 14 00:13:02 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A11AC1545744 for ; Thu, 14 Mar 2019 00:13:02 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 512A47657D; Thu, 14 Mar 2019 00:13:02 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3FC781A230; Thu, 14 Mar 2019 00:13:02 +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 x2E0D2d1060081; Thu, 14 Mar 2019 00:13:02 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2E0CxJl060058; Thu, 14 Mar 2019 00:12:59 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903140012.x2E0CxJl060058@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Thu, 14 Mar 2019 00:12:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345119 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345119 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 512A47657D X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.973,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Thu, 14 Mar 2019 00:13:03 -0000 Author: asomers Date: Thu Mar 14 00:12:59 2019 New Revision: 345119 URL: https://svnweb.freebsd.org/changeset/base/345119 Log: fuse(4): combine common code in the tests Combine a bunch of mostly similar expect_* methods into utils.cc, and only define FH in a single place. Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/access.cc projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc projects/fuse2/tests/sys/fs/fuse/getattr.cc projects/fuse2/tests/sys/fs/fuse/link.cc projects/fuse2/tests/sys/fs/fuse/locks.cc projects/fuse2/tests/sys/fs/fuse/lookup.cc projects/fuse2/tests/sys/fs/fuse/mkdir.cc projects/fuse2/tests/sys/fs/fuse/open.cc projects/fuse2/tests/sys/fs/fuse/opendir.cc projects/fuse2/tests/sys/fs/fuse/read.cc projects/fuse2/tests/sys/fs/fuse/readdir.cc projects/fuse2/tests/sys/fs/fuse/readlink.cc projects/fuse2/tests/sys/fs/fuse/release.cc projects/fuse2/tests/sys/fs/fuse/releasedir.cc projects/fuse2/tests/sys/fs/fuse/rename.cc projects/fuse2/tests/sys/fs/fuse/rmdir.cc projects/fuse2/tests/sys/fs/fuse/unlink.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/access.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/access.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/access.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -39,7 +39,13 @@ extern "C" { using namespace testing; -class Access: public FuseTest {}; +class Access: public FuseTest { +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); +} +}; /* TODO: test methods for the default_permissions mount option */ @@ -52,12 +58,7 @@ TEST_F(Access, DISABLED_eaccess) uint64_t ino = 42; mode_t access_mode = X_OK; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - })); + expect_lookup(RELPATH, ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_ACCESS && @@ -81,12 +82,7 @@ TEST_F(Access, DISABLED_ok) uint64_t ino = 42; mode_t access_mode = R_OK; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - })); + expect_lookup(RELPATH, ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_ACCESS && Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -295,14 +295,7 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) ASSERT_LE(0, fd) << strerror(errno); /* Finally, a subsequent lookup should query the daemon */ - EXPECT_LOOKUP(1, RELPATH).Times(1) - .WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.error = 0; - out->body.entry.nodeid = ino; - out->body.entry.attr.mode = S_IFREG | mode; - SET_OUT_HEADER_LEN(out, entry); - })); + expect_lookup(RELPATH, ino, S_IFREG | mode, 1); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); /* Deliberately leak fd. close(2) will be tested in release.cc */ Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -40,8 +40,6 @@ using namespace testing; class Flush: public FuseTest { -const static uint64_t FH = 0xdeadbeef1a7ebabe; - public: void expect_flush(uint64_t ino, int times, ProcessMockerT r) { @@ -49,60 +47,18 @@ void expect_flush(uint64_t ino, int times, ProcessMock ResultOf([=](auto in) { return (in->header.opcode == FUSE_FLUSH && in->header.nodeid == ino && - in->body.flush.fh == Flush::FH); + in->body.flush.fh == FH); }, Eq(true)), _) ).Times(times) .WillRepeatedly(Invoke(r)); } -void expect_getattr(uint64_t ino) -{ - /* Until the attr cache is working, we may send an additional GETATTR */ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, attr); - out->body.attr.attr.ino = ino; // Must match nodeid - out->body.attr.attr.mode = S_IFREG | 0644; - })); - -} - void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); } -void expect_open(uint64_t ino, int times) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPEN && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).Times(times) - .WillRepeatedly(Invoke([](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = Flush::FH; - })); - -} - /* * When testing FUSE_FLUSH, the FUSE_RELEASE calls are uninteresting. This * expectation will silence googlemock warnings @@ -130,8 +86,8 @@ TEST_F(Flush, DISABLED_dup) int fd, fd2; expect_lookup(RELPATH, ino); - expect_open(ino, 1); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_flush(ino, 2, ReturnErrno(0)); expect_release(); @@ -161,8 +117,8 @@ TEST_F(Flush, DISABLED_eio) int fd; expect_lookup(RELPATH, ino); - expect_open(ino, 1); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_flush(ino, 1, ReturnErrno(EIO)); expect_release(); @@ -182,8 +138,8 @@ TEST_F(Flush, DISABLED_flush) int fd; expect_lookup(RELPATH, ino); - expect_open(ino, 1); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_flush(ino, 1, ReturnErrno(0)); expect_release(); Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -50,7 +50,6 @@ using namespace testing; class Fsync: public FuseTest { public: -const static uint64_t FH = 0xdeadbeef1a7ebabe; void expect_fsync(uint64_t ino, uint32_t flags, int error) { EXPECT_CALL(*m_mock, process( @@ -65,79 +64,14 @@ void expect_fsync(uint64_t ino, uint32_t flags, int er ).WillOnce(Invoke(ReturnErrno(error))); } -void expect_getattr(uint64_t ino) -{ - /* Until the attr cache is working, we may send an additional GETATTR */ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, attr); - out->body.attr.attr.ino = ino; // Must match nodeid - out->body.attr.attr.mode = S_IFREG | 0644; - out->body.attr.attr_valid = UINT64_MAX; - })); -} - void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); } -void expect_open(uint64_t ino) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPEN && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = FH; - })); -} - -void expect_release(uint64_t ino) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_RELEASE && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke(ReturnErrno(0))); -} - void expect_write(uint64_t ino, uint64_t size, const void *contents) { - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - const char *buf = (const char*)in->body.bytes + - sizeof(struct fuse_write_in); - - return (in->header.opcode == FUSE_WRITE && - in->header.nodeid == ino && - 0 == bcmp(buf, contents, size)); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, write); - out->body.write.size = size; - })); + FuseTest::expect_write(ino, 0, size, size, 0, contents); } }; @@ -156,8 +90,8 @@ TEST_F(Fsync, DISABLED_aio_fsync) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_write(ino, bufsize, CONTENTS); expect_fsync(ino, 0, 0); @@ -190,8 +124,8 @@ TEST_F(Fsync, close) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_write(ino, bufsize, CONTENTS); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { @@ -209,7 +143,7 @@ TEST_F(Fsync, close) }, Eq(true)), _) ).Times(0); - expect_release(ino); + expect_release(ino, 1, 0); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -228,8 +162,8 @@ TEST_F(Fsync, DISABLED_eio) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_write(ino, bufsize, CONTENTS); expect_fsync(ino, FUSE_FSYNC_FDATASYNC, EIO); @@ -253,8 +187,8 @@ TEST_F(Fsync, DISABLED_fdatasync) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_write(ino, bufsize, CONTENTS); expect_fsync(ino, FUSE_FSYNC_FDATASYNC, 0); @@ -278,8 +212,8 @@ TEST_F(Fsync, DISABLED_fsync) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); expect_write(ino, bufsize, CONTENTS); expect_fsync(ino, 0, 0); @@ -303,8 +237,8 @@ TEST_F(Fsync, DISABLED_fsync_metadata_only) mode_t mode = 0755; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETATTR); @@ -335,8 +269,8 @@ TEST_F(Fsync, nop) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); fd = open(FULLPATH, O_WRONLY); ASSERT_LE(0, fd) << strerror(errno); @@ -346,4 +280,4 @@ TEST_F(Fsync, nop) /* Deliberately leak fd. close(2) will be tested in release.cc */ } - +// TODO: ENOSYS test Modified: projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -50,7 +50,6 @@ using namespace testing; class FsyncDir: public FuseTest { public: -const static uint64_t FH = 0xdeadbeef1a7ebabe; void expect_fsyncdir(uint64_t ino, uint32_t flags, int error) { EXPECT_CALL(*m_mock, process( @@ -67,29 +66,7 @@ void expect_fsyncdir(uint64_t ino, uint32_t flags, int void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFDIR | 0755; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); -} - -void expect_opendir(uint64_t ino) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPENDIR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = FH; - })); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/getattr.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/getattr.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -45,7 +45,6 @@ TEST_F(Getattr, DISABLED_attr_cache) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; const uint64_t ino = 42; - const uint64_t generation = 13; struct stat sb; EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke([=](auto in, auto out) { @@ -53,7 +52,6 @@ TEST_F(Getattr, DISABLED_attr_cache) SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; - out->body.entry.generation = generation; })); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { @@ -84,7 +82,6 @@ TEST_F(Getattr, attr_cache_timeout) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; const uint64_t ino = 42; - const uint64_t generation = 13; struct stat sb; /* * The timeout should be longer than the longest plausible time the @@ -92,14 +89,7 @@ TEST_F(Getattr, attr_cache_timeout) */ long timeout_ns = 250'000'000; - EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.entry_valid = UINT64_MAX; - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.generation = generation; - })); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 2); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && @@ -128,13 +118,7 @@ TEST_F(Getattr, enoent) struct stat sb; const uint64_t ino = 42; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = 0100644; - out->body.entry.nodeid = ino; - })); - + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && @@ -151,16 +135,9 @@ TEST_F(Getattr, ok) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; const uint64_t ino = 42; - const uint64_t generation = 13; struct stat sb; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.generation = generation; - })); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && @@ -201,9 +178,6 @@ TEST_F(Getattr, ok) EXPECT_EQ(12ul, sb.st_rdev); EXPECT_EQ(ino, sb.st_ino); EXPECT_EQ(S_IFREG | 0644, sb.st_mode); - - // fuse(4) does not _yet_ support inode generations - //EXPECT_EQ(generation, sb.st_gen); //st_birthtim and st_flags are not supported by protocol 7.8. They're //only supported as OS-specific extensions to OSX. Modified: projects/fuse2/tests/sys/fs/fuse/link.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/link.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/link.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -37,7 +37,13 @@ extern "C" { using namespace testing; -class Link: public FuseTest {}; +class Link: public FuseTest { +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); +} +}; TEST_F(Link, emlink) { @@ -48,12 +54,7 @@ TEST_F(Link, emlink) uint64_t dst_ino = 42; EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke(ReturnErrno(ENOENT))); - EXPECT_LOOKUP(1, RELDST).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = dst_ino; - SET_OUT_HEADER_LEN(out, entry); - })); + expect_lookup(RELDST, dst_ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { @@ -80,12 +81,7 @@ TEST_F(Link, ok) const uint64_t ino = 42; EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke(ReturnErrno(ENOENT))); - EXPECT_LOOKUP(1, RELDST).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = dst_ino; - SET_OUT_HEADER_LEN(out, entry); - })); + expect_lookup(RELDST, dst_ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/locks.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -43,53 +43,12 @@ using namespace testing; /* For testing filesystems without posix locking support */ class Fallback: public FuseTest { public: -const static uint64_t FH = 0xdeadbeef1a7ebabe; -void expect_getattr(uint64_t ino) -{ - /* Until the attr cache is working, we may send an additional GETATTR */ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, attr); - out->body.attr.attr.ino = ino; // Must match nodeid - out->body.attr.attr.mode = S_IFREG | 0644; - out->body.attr.attr_valid = UINT64_MAX; - })); -} - void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); } -void expect_open(uint64_t ino) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPEN && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = FH; - })); -} - }; /* For testing filesystems with posix locking support */ @@ -120,8 +79,8 @@ TEST_F(GetlkFallback, local) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -150,8 +109,8 @@ TEST_F(Getlk, DISABLED_no_locks) pid_t pid = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_GETLK && @@ -197,8 +156,8 @@ TEST_F(Getlk, DISABLED_lock_exists) pid_t pid2 = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_GETLK && @@ -251,8 +210,8 @@ TEST_F(SetlkFallback, local) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -278,8 +237,8 @@ TEST_F(Setlk, DISABLED_set) pid_t pid = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && @@ -323,8 +282,8 @@ TEST_F(Setlk, DISABLED_set_eof) pid_t pid = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && @@ -368,8 +327,8 @@ TEST_F(Setlk, DISABLED_eagain) pid_t pid = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && @@ -410,8 +369,8 @@ TEST_F(SetlkwFallback, local) int fd; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -441,8 +400,8 @@ TEST_F(Setlkw, DISABLED_set) pid_t pid = 1234; expect_lookup(RELPATH, ino); - expect_open(ino); - expect_getattr(ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && Modified: projects/fuse2/tests/sys/fs/fuse/lookup.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/lookup.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/lookup.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -49,6 +49,7 @@ TEST_F(Lookup, DISABLED_attr_cache) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; const uint64_t ino = 42; + const uint64_t generation = 13; struct stat sb; EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { @@ -70,6 +71,7 @@ TEST_F(Lookup, DISABLED_attr_cache) out->body.entry.attr.uid = 10; out->body.entry.attr.gid = 11; out->body.entry.attr.rdev = 12; + out->body.entry.generation = generation; })); /* stat(2) issues a VOP_LOOKUP followed by a VOP_GETATTR */ ASSERT_EQ(0, stat(FULLPATH, &sb)) << strerror(errno); @@ -124,18 +126,7 @@ TEST_F(Lookup, attr_cache_timeout) out->body.entry.attr.ino = ino; // Must match nodeid out->body.entry.attr.mode = S_IFREG | 0644; })); - EXPECT_CALL(*m_mock, process( - ResultOf([](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke([](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, attr); - out->body.attr.attr.ino = ino; // Must match nodeid - out->body.attr.attr.mode = S_IFREG | 0644; - })); + expect_getattr(ino, 0); /* access(2) will issue a VOP_LOOKUP but not a VOP_GETATTR */ ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); @@ -245,6 +236,12 @@ TEST_F(Lookup, DISABLED_entry_cache_timeout) /* The cache has timed out; VOP_LOOKUP should query the daemon*/ ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); } + +// TODO: export_support +// After upgrading the protocol to 7.10, check that the kernel will only +// attempt to lookup "." and ".." if the filesystem sets FUSE_EXPORT_SUPPORT in +// the init flags. If not, then all lookups for those entries will return +// ESTALE. TEST_F(Lookup, ok) { Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mkdir.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -145,14 +145,7 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative_purge) ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno); /* Finally, a subsequent lookup should query the daemon */ - EXPECT_LOOKUP(1, RELPATH).Times(1) - .WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.error = 0; - out->body.entry.nodeid = ino; - out->body.entry.attr.mode = S_IFDIR | mode; - SET_OUT_HEADER_LEN(out, entry); - })); + expect_lookup(RELPATH, ino, S_IFDIR | mode, 1); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/open.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/open.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/open.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -48,14 +48,7 @@ void test_ok(int os_flags, int fuse_flags) { uint64_t ino = 42; int fd; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); - + FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && @@ -101,13 +94,7 @@ TEST_F(Open, enoent) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - })); - + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && @@ -129,13 +116,7 @@ TEST_F(Open, eperm) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - })); - + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && Modified: projects/fuse2/tests/sys/fs/fuse/opendir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/opendir.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/opendir.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -42,13 +42,7 @@ class Opendir: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFDIR | 0755; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/read.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -48,72 +48,9 @@ using namespace testing; class Read: public FuseTest { public: -const static uint64_t FH = 0xdeadbeef1a7ebabe; -void expect_getattr(uint64_t ino, uint64_t size) -{ - /* Until the attr cache is working, we may send an additional GETATTR */ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, attr); - out->body.attr.attr.ino = ino; // Must match nodeid - out->body.attr.attr.mode = S_IFREG | 0644; - out->body.attr.attr.size = size; - })); - -} - void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFREG | 0644; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); -} - -void expect_open(uint64_t ino, uint32_t flags, int times) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPEN && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).Times(times) - .WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = Read::FH; - out->body.open.open_flags = flags; - })); -} - -void expect_read(uint64_t ino, uint64_t offset, uint64_t isize, uint64_t osize, - const void *contents) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_READ && - in->header.nodeid == ino && - in->body.read.fh == Read::FH && - in->body.read.offset == offset && - in->body.read.size == isize); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(struct fuse_out_header) + osize; - memmove(out->body.bytes, contents, osize); - })).RetiresOnSaturation(); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/readdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readdir.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/readdir.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -40,43 +40,10 @@ using namespace testing; using namespace std; class Readdir: public FuseTest { -const static uint64_t FH = 0xdeadbeef1a7ebabe; public: void expect_lookup(const char *relpath, uint64_t ino) { - EXPECT_LOOKUP(1, relpath).WillRepeatedly(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFDIR | 0755; - out->body.entry.nodeid = ino; - out->body.entry.attr_valid = UINT64_MAX; - })); -} - -void expect_opendir(uint64_t ino) -{ - EXPECT_CALL(*m_mock, process( - ResultOf([](auto in) { - return (in->header.opcode == FUSE_STATFS); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, statfs); - })); - - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_OPENDIR && - in->header.nodeid == ino); - }, Eq(true)), - _) - ).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.len = sizeof(out->header); - SET_OUT_HEADER_LEN(out, open); - out->body.open.fh = FH; - })); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); } void expect_readdir(uint64_t ino, uint64_t off, vector &ents) Modified: projects/fuse2/tests/sys/fs/fuse/readlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readlink.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/readlink.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -37,7 +37,13 @@ extern "C" { using namespace testing; -class Readlink: public FuseTest {}; +class Readlink: public FuseTest { +public: +void expect_lookup(const char *relpath, uint64_t ino) +{ + FuseTest::expect_lookup(relpath, ino, S_IFLNK | 0777, 1); +} +}; TEST_F(Readlink, eloop) { @@ -46,12 +52,7 @@ TEST_F(Readlink, eloop) const uint64_t ino = 42; char buf[80]; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFLNK | 0777; - out->body.entry.nodeid = ino; - })); + expect_lookup(RELPATH, ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { @@ -73,12 +74,7 @@ TEST_F(Readlink, ok) const uint64_t ino = 42; char buf[80]; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, entry); - out->body.entry.attr.mode = S_IFLNK | 0777; - out->body.entry.nodeid = ino; - })); + expect_lookup(RELPATH, ino); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { Modified: projects/fuse2/tests/sys/fs/fuse/release.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/release.cc Wed Mar 13 22:16:00 2019 (r345118) +++ projects/fuse2/tests/sys/fs/fuse/release.cc Thu Mar 14 00:12:59 2019 (r345119) @@ -40,68 +40,11 @@ using namespace testing; class Release: public FuseTest { -const static uint64_t FH = 0xdeadbeef1a7ebabe; - public: -void expect_getattr(uint64_t ino) +void expect_lookup(const char *relpath, uint64_t ino, int times) { - /* Until the attr cache is working, we may send an additional GETATTR */ - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_GETATTR && - in->header.nodeid == ino); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Thu Mar 14 15:00:00 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A0117154645E for ; Thu, 14 Mar 2019 15:00:00 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 42774832C8; Thu, 14 Mar 2019 15:00:00 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 35BD12408A; Thu, 14 Mar 2019 15:00:00 +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 x2EExxP7021206; Thu, 14 Mar 2019 14:59:59 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2EExxui021205; Thu, 14 Mar 2019 14:59:59 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903141459.x2EExxui021205@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Thu, 14 Mar 2019 14:59:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345133 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345133 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 42774832C8 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.96)[-0.961,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Thu, 14 Mar 2019 15:00:00 -0000 Author: asomers Date: Thu Mar 14 14:59:59 2019 New Revision: 345133 URL: https://svnweb.freebsd.org/changeset/base/345133 Log: fuse(4): skip the Write.append test unless vfs.fuse.sync_resize==0 Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Thu Mar 14 14:34:36 2019 (r345132) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Thu Mar 14 14:59:59 2019 (r345133) @@ -65,6 +65,18 @@ void expect_release(uint64_t ino, ProcessMockerT r) ).WillRepeatedly(Invoke(r)); } +void require_sync_resize_0() { + const char *sync_resize_node = "vfs.fuse.sync_resize"; + int val = 0; + size_t size = sizeof(val); + + ASSERT_EQ(0, sysctlbyname(sync_resize_node, &val, &size, NULL, 0)) + << strerror(errno); + if (val != 0) + FAIL() << "vfs.fuse.sync_resize must be set to 0 for this test." + " That sysctl will probably be removed soon."; +} + }; class AioWrite: public Write { @@ -87,7 +99,6 @@ class WriteThrough: public Write { virtual void SetUp() { const char *cache_mode_node = "vfs.fuse.data_cache_mode"; - const char *sync_resize_node = "vfs.fuse.sync_resize"; int val = 0; size_t size = sizeof(val); @@ -98,12 +109,6 @@ virtual void SetUp() { FAIL() << "vfs.fuse.data_cache_mode must be set to 1 " "(writethrough) for this test"; - ASSERT_EQ(0, sysctlbyname(sync_resize_node, &val, &size, NULL, 0)) - << strerror(errno); - if (val != 0) - FAIL() << "vfs.fuse.sync_resize must be set to 0 for this test." - " That sysctl will probably be removed soon."; - FuseTest::SetUp(); } @@ -182,6 +187,8 @@ TEST_F(Write, append) */ uint64_t initial_offset = m_maxbcachebuf; int fd; + + require_sync_resize_0(); expect_lookup(RELPATH, ino); expect_open(ino, 0, 1); From owner-svn-src-projects@freebsd.org Thu Mar 14 15:07:47 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 37435154671E for ; Thu, 14 Mar 2019 15:07:47 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B8C35837CB; Thu, 14 Mar 2019 15:07:46 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8AC7D24232; Thu, 14 Mar 2019 15:07:46 +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 x2EF7k4j026110; Thu, 14 Mar 2019 15:07:46 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2EF7kTe026109; Thu, 14 Mar 2019 15:07:46 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903141507.x2EF7kTe026109@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Thu, 14 Mar 2019 15:07:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345134 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345134 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: B8C35837CB X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.96)[-0.963,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Thu, 14 Mar 2019 15:07:47 -0000 Author: asomers Date: Thu Mar 14 15:07:46 2019 New Revision: 345134 URL: https://svnweb.freebsd.org/changeset/base/345134 Log: fuse(4) tests: minor tweaks * better debugging for FUSE_SETATTR * Move a big variable from stack to heap Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 14:59:59 2019 (r345133) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 15:07:46 2019 (r345134) @@ -170,7 +170,28 @@ void debug_fuseop(const mockfs_buf_in *in) in->body.readdir.size); break; case FUSE_SETATTR: - printf(" valid=%#x", in->body.setattr.valid); + if (verbosity <= 1) { + printf(" valid=%#x", in->body.setattr.valid); + break; + } + if (in->body.setattr.valid & FATTR_MODE) + printf(" mode=%#o", in->body.setattr.mode); + if (in->body.setattr.valid & FATTR_UID) + printf(" uid=%u", in->body.setattr.uid); + if (in->body.setattr.valid & FATTR_GID) + printf(" gid=%u", in->body.setattr.gid); + if (in->body.setattr.valid & FATTR_SIZE) + printf(" size=%zu", in->body.setattr.size); + if (in->body.setattr.valid & FATTR_ATIME) + printf(" atime=%zu.%u", + in->body.setattr.atime, + in->body.setattr.atimensec); + if (in->body.setattr.valid & FATTR_MTIME) + printf(" mtime=%zu.%u", + in->body.setattr.mtime, + in->body.setattr.mtimensec); + if (in->body.setattr.valid & FATTR_FH) + printf(" fh=%zu", in->body.setattr.fh); break; case FUSE_WRITE: printf(" offset=%lu size=%u flags=%u", @@ -288,40 +309,42 @@ void MockFS::kill_daemon() { void MockFS::loop() { mockfs_buf_in *in; - mockfs_buf_out out; + mockfs_buf_out *out; in = (mockfs_buf_in*) malloc(sizeof(*in)); + out = (mockfs_buf_out*) malloc(sizeof(*out)); ASSERT_TRUE(in != NULL); while (!quit) { bzero(in, sizeof(*in)); - bzero(&out, sizeof(out)); + bzero(out, sizeof(*out)); read_request(in); if (quit) break; if (verbosity > 0) debug_fuseop(in); if (pid_ok((pid_t)in->header.pid)) { - process(in, &out); + process(in, out); } else { /* * Reject any requests from unknown processes. Because * we actually do mount a filesystem, plenty of * unrelated system daemons may try to access it. */ - process_default(in, &out); + process_default(in, out); } if (in->header.opcode == FUSE_FORGET) { /*Alone among the opcodes, FORGET expects no response*/ continue; } - if (out.header.error == FUSE_NORESPONSE) { + if (out->header.error == FUSE_NORESPONSE) { /* Used by tests of slow opcodes. No response ATM */ continue; } - ASSERT_TRUE(write(m_fuse_fd, &out, out.header.len) > 0 || + ASSERT_TRUE(write(m_fuse_fd, out, out->header.len) > 0 || errno == EAGAIN) << strerror(errno); } + free(out); free(in); } From owner-svn-src-projects@freebsd.org Thu Mar 14 17:20:27 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 56CE615244D9 for ; Thu, 14 Mar 2019 17:20:27 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 057DE89BD3; Thu, 14 Mar 2019 17:20:27 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D06E8258CA; Thu, 14 Mar 2019 17:20:26 +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 x2EHKQVr096163; Thu, 14 Mar 2019 17:20:26 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2EHKOo2096150; Thu, 14 Mar 2019 17:20:24 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903141720.x2EHKOo2096150@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Thu, 14 Mar 2019 17:20:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345140 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345140 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 057DE89BD3 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.98)[-0.984,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Thu, 14 Mar 2019 17:20:27 -0000 Author: asomers Date: Thu Mar 14 17:20:24 2019 New Revision: 345140 URL: https://svnweb.freebsd.org/changeset/base/345140 Log: fuse(4): add tests for FUSE_INTERRUPT This required changing the way that all operations are mocked. Previously MockFS::process had one input argument and one output argument. Now, it returns a vector of zero or more responses. This allows tests to simulate conditions where the filesystem daemon has a queue depth > 1. PR: 236530 Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/interrupt.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/getattr.cc projects/fuse2/tests/sys/fs/fuse/link.cc projects/fuse2/tests/sys/fs/fuse/locks.cc projects/fuse2/tests/sys/fs/fuse/lookup.cc projects/fuse2/tests/sys/fs/fuse/mkdir.cc projects/fuse2/tests/sys/fs/fuse/mknod.cc projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/open.cc projects/fuse2/tests/sys/fs/fuse/opendir.cc projects/fuse2/tests/sys/fs/fuse/read.cc projects/fuse2/tests/sys/fs/fuse/readdir.cc projects/fuse2/tests/sys/fs/fuse/readlink.cc projects/fuse2/tests/sys/fs/fuse/releasedir.cc projects/fuse2/tests/sys/fs/fuse/rmdir.cc projects/fuse2/tests/sys/fs/fuse/setattr.cc projects/fuse2/tests/sys/fs/fuse/statfs.cc projects/fuse2/tests/sys/fs/fuse/symlink.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/write.cc Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Thu Mar 14 17:20:24 2019 (r345140) @@ -4,12 +4,16 @@ PACKAGE= tests TESTSDIR= ${TESTSBASE}/sys/fs/fuse +# We could simply link all of these files into a single executable. But since +# Kyua treats googletest programs as plain tests, it's better to separate them +# out, so we get more granular reporting. ATF_TESTS_CXX+= access ATF_TESTS_CXX+= create ATF_TESTS_CXX+= flush ATF_TESTS_CXX+= fsync ATF_TESTS_CXX+= fsyncdir ATF_TESTS_CXX+= getattr +ATF_TESTS_CXX+= interrupt ATF_TESTS_CXX+= link ATF_TESTS_CXX+= locks ATF_TESTS_CXX+= lookup @@ -59,6 +63,11 @@ SRCS.getattr+= getattr.cc SRCS.getattr+= getmntopts.c SRCS.getattr+= mockfs.cc SRCS.getattr+= utils.cc + +SRCS.interrupt+= interrupt.cc +SRCS.interrupt+= getmntopts.c +SRCS.interrupt+= mockfs.cc +SRCS.interrupt+= utils.cc SRCS.link+= getmntopts.c SRCS.link+= link.cc Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -62,14 +62,14 @@ TEST_F(Create, DISABLED_attr_cache) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { @@ -145,14 +145,14 @@ TEST_F(Create, DISABLED_Enosys) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { @@ -160,11 +160,11 @@ TEST_F(Create, DISABLED_Enosys) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke([](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { out->header.unique = in->header.unique; out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); - })); + }))); /* Until the attr cache is working, we may send an additional GETATTR */ EXPECT_CALL(*m_mock, process( @@ -173,12 +173,12 @@ TEST_F(Create, DISABLED_Enosys) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); fd = open(FULLPATH, O_CREAT | O_EXCL, mode); EXPECT_LE(0, fd) << strerror(errno); @@ -214,14 +214,14 @@ TEST_F(Create, DISABLED_entry_cache_negative) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); /* Until the attr cache is working, we may send an additional GETATTR */ EXPECT_CALL(*m_mock, process( @@ -230,12 +230,12 @@ TEST_F(Create, DISABLED_entry_cache_negative) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); fd = open(FULLPATH, O_CREAT | O_EXCL, mode); ASSERT_LE(0, fd) << strerror(errno); @@ -269,13 +269,13 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); /* Until the attr cache is working, we may send an additional GETATTR */ EXPECT_CALL(*m_mock, process( @@ -284,12 +284,12 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); fd = open(FULLPATH, O_CREAT | O_EXCL, mode); ASSERT_LE(0, fd) << strerror(errno); @@ -344,14 +344,14 @@ TEST_F(Create, ok) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); /* Until the attr cache is working, we may send an additional GETATTR */ EXPECT_CALL(*m_mock, process( @@ -360,12 +360,12 @@ TEST_F(Create, ok) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); fd = open(FULLPATH, O_CREAT | O_EXCL, mode); EXPECT_LE(0, fd) << strerror(errno); Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -132,11 +132,11 @@ TEST_F(Fsync, close) return (in->header.opcode == FUSE_SETATTR); }, Eq(true)), _) - ).WillRepeatedly(Invoke([=](auto in, auto out) { + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid - })); + }))); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_FSYNC); @@ -244,12 +244,12 @@ TEST_F(Fsync, DISABLED_fsync_metadata_only) return (in->header.opcode == FUSE_SETATTR); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | mode; - })); + }))); expect_fsync(ino, 0, 0); Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/getattr.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/getattr.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -47,25 +47,25 @@ TEST_F(Getattr, DISABLED_attr_cache) const uint64_t ino = 42; struct stat sb; - EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; - })); + }))); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke([](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr_valid = UINT64_MAX; out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); EXPECT_EQ(0, stat(FULLPATH, &sb)); /* The second stat(2) should use cached attributes */ EXPECT_EQ(0, stat(FULLPATH, &sb)); @@ -97,14 +97,14 @@ TEST_F(Getattr, attr_cache_timeout) }, Eq(true)), _) ).Times(2) - .WillRepeatedly(Invoke([=](auto in, auto out) { + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr_valid_nsec = timeout_ns; out->body.attr.attr_valid = UINT64_MAX; out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; - })); + }))); EXPECT_EQ(0, stat(FULLPATH, &sb)); usleep(2 * timeout_ns / 1000); /* Timeout has expire. stat(2) should requery the daemon */ @@ -144,7 +144,7 @@ TEST_F(Getattr, ok) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke([](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid @@ -161,7 +161,7 @@ TEST_F(Getattr, ok) out->body.attr.attr.uid = 10; out->body.attr.attr.gid = 11; out->body.attr.attr.rdev = 12; - })); + }))); ASSERT_EQ(0, stat(FULLPATH, &sb)) << strerror(errno); EXPECT_EQ(1, sb.st_size); Added: projects/fuse2/tests/sys/fs/fuse/interrupt.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/interrupt.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -0,0 +1,312 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +/* Don't do anything; all we care about is that the syscall gets interrupted */ +void sigusr2_handler(int __unused sig) { + if (verbosity > 1) + printf("Signaled!\n"); +} + +void* killer(void* target) { + /* + * Sleep for awhile so we can be mostly confident that the main thread + * is already blocked in write(2) + */ + usleep(250'000); + if (verbosity > 1) + printf("Signalling!\n"); + pthread_kill(*(pthread_t*)target, SIGUSR2); + + return(NULL); +} + +class Interrupt: public FuseTest { +public: +pthread_t m_child; + +Interrupt(): m_child(NULL) {}; + +void expect_lookup(const char *relpath, uint64_t ino) +{ + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); +} + +/* + * Expect a FUSE_WRITE but don't reply. Instead, just record the unique value + * to the provided pointer + */ +void expect_write(uint64_t ino, uint64_t *write_unique) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_WRITE && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke([=](auto in, auto &out __unused) { + *write_unique = in->header.unique; + })); +} + +void setup_interruptor(pthread_t self) +{ + ASSERT_EQ(0, signal(SIGUSR2, sigusr2_handler)) << strerror(errno); + ASSERT_EQ(0, pthread_create(&m_child, NULL, killer, (void*)self)) + << strerror(errno); +} + +void TearDown() { + if (m_child != NULL) { + pthread_join(m_child, NULL); + } + + FuseTest::TearDown(); +} +}; + +/* + * An interrupt operation that gets received after the original command is + * complete should generate an EAGAIN response. + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236530 */ +TEST_F(Interrupt, DISABLED_already_complete) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + pthread_t self; + uint64_t write_unique = 0; + + self = pthread_self(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, &write_unique); + EXPECT_CALL(*m_mock, process( + ResultOf([&](auto in) { + return (in->header.opcode == FUSE_INTERRUPT && + in->body.interrupt.unique == write_unique); + }, Eq(true)), + _) + ).WillOnce(Invoke([&](auto in, auto &out) { + // First complete the write request + auto out0 = new mockfs_buf_out; + out0->header.unique = write_unique; + SET_OUT_HEADER_LEN(out0, write); + out0->body.write.size = bufsize; + out.push_back(out0); + + // Then, respond EAGAIN to the interrupt request + auto out1 = new mockfs_buf_out; + out1->header.unique = in->header.unique; + out1->header.error = -EAGAIN; + out1->header.len = sizeof(out1->header); + out.push_back(out1); + })); + + fd = open(FULLPATH, O_WRONLY); + ASSERT_LE(0, fd) << strerror(errno); + + setup_interruptor(self); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * A FUSE filesystem is legally allowed to ignore INTERRUPT operations, and + * complete the original operation whenever it damn well pleases. + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236530 */ +TEST_F(Interrupt, DISABLED_ignore) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + pthread_t self; + uint64_t write_unique; + + self = pthread_self(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, &write_unique); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_INTERRUPT && + in->body.interrupt.unique == write_unique); + }, Eq(true)), + _) + ).WillOnce(Invoke([&](auto in __unused, auto &out) { + // Ignore FUSE_INTERRUPT; respond to the FUSE_WRITE + auto out0 = new mockfs_buf_out; + out0->header.unique = write_unique; + SET_OUT_HEADER_LEN(out0, write); + out0->body.write.size = bufsize; + out.push_back(out0); + })); + + fd = open(FULLPATH, O_WRONLY); + ASSERT_LE(0, fd) << strerror(errno); + + setup_interruptor(self); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * A syscall that gets interrupted while blocking on FUSE I/O should send a + * FUSE_INTERRUPT command to the fuse filesystem, which should then send EINTR + * in response to the _original_ operation. The kernel should ultimately + * return EINTR to userspace + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236530 */ +TEST_F(Interrupt, DISABLED_in_progress) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + pthread_t self; + uint64_t write_unique; + + self = pthread_self(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, &write_unique); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_INTERRUPT && + in->body.interrupt.unique == write_unique); + }, Eq(true)), + _) + ).WillOnce(Invoke([&](auto in __unused, auto &out) { + auto out0 = new mockfs_buf_out; + out0->header.error = -EINTR; + out0->header.unique = write_unique; + out0->header.len = sizeof(out0->header); + out.push_back(out0); + })); + + fd = open(FULLPATH, O_WRONLY); + ASSERT_LE(0, fd) << strerror(errno); + + setup_interruptor(self); + ASSERT_EQ(-1, write(fd, CONTENTS, bufsize)); + EXPECT_EQ(EINTR, errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * If the FUSE filesystem receives the FUSE_INTERRUPT operation before + * processing the original, then it should wait for "some timeout" for the + * original operation to arrive. If not, it should send EAGAIN to the + * INTERRUPT operation, and the kernel should requeue the INTERRUPT. + * + * In this test, we'll pretend that the INTERRUPT arrives too soon, gets + * EAGAINed, then the kernel requeues it, and the second time around it + * successfully interrupts the original + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236530 */ +TEST_F(Interrupt, DISABLED_too_soon) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = strlen(CONTENTS); + pthread_t self; + uint64_t write_unique; + + self = pthread_self(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, &write_unique); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_INTERRUPT && + in->body.interrupt.unique == write_unique); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(EAGAIN))) + .RetiresOnSaturation(); + + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_INTERRUPT && + in->body.interrupt.unique == write_unique); + }, Eq(true)), + _) + ).WillOnce(Invoke([&](auto in __unused, auto &out __unused) { + auto out0 = new mockfs_buf_out; + out0->header.error = -EINTR; + out0->header.unique = write_unique; + out0->header.len = sizeof(out0->header); + out.push_back(out0); + })); + + fd = open(FULLPATH, O_WRONLY); + ASSERT_LE(0, fd) << strerror(errno); + + setup_interruptor(self); + ASSERT_EQ(-1, write(fd, CONTENTS, bufsize)); + EXPECT_EQ(EINTR, errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} Modified: projects/fuse2/tests/sys/fs/fuse/link.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/link.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/link.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -92,12 +92,12 @@ TEST_F(Link, ok) (0 == strcmp(name, RELPATH))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; - })); + }))); EXPECT_EQ(0, link(FULLDST, FULLPATH)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/locks.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -123,12 +123,12 @@ TEST_F(Getlk, DISABLED_no_locks) in->body.getlk.lk.pid == 10); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk = in->body.getlk.lk; out->body.getlk.lk.type = F_UNLCK; - })); + }))); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -170,14 +170,14 @@ TEST_F(Getlk, DISABLED_lock_exists) in->body.getlk.lk.pid == 10); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk.start = 100; out->body.getlk.lk.end = 199; out->body.getlk.lk.type = F_WRLCK; out->body.getlk.lk.pid = (uint32_t)pid2;; - })); + }))); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -251,12 +251,12 @@ TEST_F(Setlk, DISABLED_set) in->body.getlk.lk.pid == 10); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk = in->body.getlk.lk; out->body.getlk.lk.type = F_UNLCK; - })); + }))); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -296,12 +296,12 @@ TEST_F(Setlk, DISABLED_set_eof) in->body.getlk.lk.pid == 10); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk = in->body.getlk.lk; out->body.getlk.lk.type = F_UNLCK; - })); + }))); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); @@ -414,12 +414,12 @@ TEST_F(Setlkw, DISABLED_set) in->body.getlk.lk.pid == 10); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk = in->body.getlk.lk; out->body.getlk.lk.type = F_UNLCK; - })); + }))); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); Modified: projects/fuse2/tests/sys/fs/fuse/lookup.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/lookup.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/lookup.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -52,7 +52,8 @@ TEST_F(Lookup, DISABLED_attr_cache) const uint64_t generation = 13; struct stat sb; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.nodeid = ino; @@ -72,7 +73,7 @@ TEST_F(Lookup, DISABLED_attr_cache) out->body.entry.attr.gid = 11; out->body.entry.attr.rdev = 12; out->body.entry.generation = generation; - })); + }))); /* stat(2) issues a VOP_LOOKUP followed by a VOP_GETATTR */ ASSERT_EQ(0, stat(FULLPATH, &sb)) << strerror(errno); EXPECT_EQ(1, sb.st_size); @@ -118,14 +119,15 @@ TEST_F(Lookup, attr_cache_timeout) */ long timeout_ns = 250'000'000; - EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.nodeid = ino; out->body.entry.attr_valid_nsec = timeout_ns; out->body.entry.attr.ino = ino; // Must match nodeid out->body.entry.attr.mode = S_IFREG | 0644; - })); + }))); expect_getattr(ino, 0); /* access(2) will issue a VOP_LOOKUP but not a VOP_GETATTR */ @@ -154,13 +156,14 @@ TEST_F(Lookup, entry_cache) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.entry_valid = UINT64_MAX; out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = 14; - })); + }))); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); /* The second access(2) should use the cache */ ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); @@ -224,13 +227,13 @@ TEST_F(Lookup, DISABLED_entry_cache_timeout) long timeout_ns = 250'000'000; EXPECT_LOOKUP(1, RELPATH).Times(2) - .WillRepeatedly(Invoke([=](auto in, auto out) { + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.entry_valid_nsec = timeout_ns; out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = 14; - })); + }))); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); usleep(2 * timeout_ns / 1000); /* The cache has timed out; VOP_LOOKUP should query the daemon*/ @@ -248,12 +251,13 @@ TEST_F(Lookup, ok) const char FULLPATH[] = "mountpoint/some_file.txt"; const char RELPATH[] = "some_file.txt"; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = 14; - })); + }))); /* * access(2) is one of the few syscalls that will not (always) follow * up a successful VOP_LOOKUP with another VOP. @@ -270,18 +274,20 @@ TEST_F(Lookup, subdir) uint64_t dir_ino = 2; uint64_t file_ino = 3; - EXPECT_LOOKUP(1, DIRPATH).WillOnce(Invoke([=](auto in, auto out) { + EXPECT_LOOKUP(1, DIRPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFDIR | 0755; out->body.entry.nodeid = dir_ino; - })); - EXPECT_LOOKUP(dir_ino, RELPATH).WillOnce(Invoke([=](auto in, auto out) { + }))); + EXPECT_LOOKUP(dir_ino, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = file_ino; - })); + }))); /* * access(2) is one of the few syscalls that will not (always) follow * up a successful VOP_LOOKUP with another VOP. Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mkdir.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -95,14 +95,14 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.create.entry.attr.mode = S_IFDIR | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno); } @@ -134,13 +134,13 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative_purge) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFDIR | mode; out->body.entry.nodeid = ino; out->body.entry.attr_valid = UINT64_MAX; - })); + }))); ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno); @@ -168,14 +168,14 @@ TEST_F(Mkdir, ok) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.create.entry.attr.mode = S_IFDIR | mode; out->body.create.entry.nodeid = ino; out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; - })); + }))); ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/mknod.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mknod.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/mknod.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -67,7 +67,7 @@ void test_ok(mode_t mode, dev_t dev) { (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke([=](auto in, auto out) { + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = mode; @@ -75,7 +75,7 @@ void test_ok(mode_t mode, dev_t dev) { out->body.create.entry.entry_valid = UINT64_MAX; out->body.create.entry.attr_valid = UINT64_MAX; out->body.create.entry.attr.rdev = dev; - })); + }))); EXPECT_EQ(0, mknod(FULLPATH, mode, dev)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 17:18:00 2019 (r345139) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 17:20:24 2019 (r345140) @@ -105,31 +105,46 @@ const char* opcode2opname(uint32_t opcode) return (table[opcode]); } -std::function +ProcessMockerT ReturnErrno(int error) { - return([=](auto in, auto out) { - out->header.unique = in->header.unique; - out->header.error = -error; - out->header.len = sizeof(out->header); + return([=](auto in, auto &out) { + auto out0 = new mockfs_buf_out; + out0->header.unique = in->header.unique; + out0->header.error = -error; + out0->header.len = sizeof(out0->header); + out.push_back(out0); }); } /* Helper function used for returning negative cache entries for LOOKUP */ -std::function +ProcessMockerT ReturnNegativeCache(const struct timespec *entry_valid) { - return([=](auto in, auto out) { + return([=](auto in, auto &out) { /* nodeid means ENOENT and cache it */ - out->body.entry.nodeid = 0; - out->header.unique = in->header.unique; - out->header.error = 0; - out->body.entry.entry_valid = entry_valid->tv_sec; - out->body.entry.entry_valid_nsec = entry_valid->tv_nsec; - SET_OUT_HEADER_LEN(out, entry); + auto out0 = new mockfs_buf_out; + out0->body.entry.nodeid = 0; + out0->header.unique = in->header.unique; + out0->header.error = 0; + out0->body.entry.entry_valid = entry_valid->tv_sec; + out0->body.entry.entry_valid_nsec = entry_valid->tv_nsec; + SET_OUT_HEADER_LEN(out0, entry); + out.push_back(out0); }); } +ProcessMockerT +ReturnImmediate(std::function f) +{ + return([=](auto in, auto &out) { + auto out0 = new mockfs_buf_out; + f(in, out0); + out.push_back(out0); + }); +} + void sigint_handler(int __unused sig) { quit = 1; } @@ -309,14 +324,12 @@ void MockFS::kill_daemon() { void MockFS::loop() { mockfs_buf_in *in; - mockfs_buf_out *out; + std::vector out; in = (mockfs_buf_in*) malloc(sizeof(*in)); - out = (mockfs_buf_out*) malloc(sizeof(*out)); ASSERT_TRUE(in != NULL); while (!quit) { bzero(in, sizeof(*in)); - bzero(out, sizeof(*out)); read_request(in); if (quit) break; @@ -332,19 +345,14 @@ void MockFS::loop() { */ process_default(in, out); } - if (in->header.opcode == FUSE_FORGET) { - /*Alone among the opcodes, FORGET expects no response*/ - continue; + for (auto &it: out) { + ASSERT_TRUE(write(m_fuse_fd, it, it->header.len) > 0 || + errno == EAGAIN) + << strerror(errno); + delete it; } - if (out->header.error == FUSE_NORESPONSE) { - /* Used by tests of slow opcodes. No response ATM */ - continue; - } - ASSERT_TRUE(write(m_fuse_fd, out, out->header.len) > 0 || - errno == EAGAIN) - << strerror(errno); + out.clear(); } - free(out); free(in); } @@ -369,10 +377,14 @@ bool MockFS::pid_ok(pid_t pid) { } } -void MockFS::process_default(const mockfs_buf_in *in, mockfs_buf_out* out) { - out->header.unique = in->header.unique; - out->header.error = -EOPNOTSUPP; - out->header.len = sizeof(out->header); +void MockFS::process_default(const mockfs_buf_in *in, + std::vector &out) +{ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Thu Mar 14 23:06:01 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3890B1532CDB for ; Thu, 14 Mar 2019 23:06:01 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8E0B7726B2; Thu, 14 Mar 2019 23:06:00 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7B3A31548; Thu, 14 Mar 2019 23:06:00 +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 x2EN60uI080992; Thu, 14 Mar 2019 23:06:00 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2EN5x9F080983; Thu, 14 Mar 2019 23:05:59 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903142305.x2EN5x9F080983@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Thu, 14 Mar 2019 23:05:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345167 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345167 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 8E0B7726B2 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.97)[-0.973,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Thu, 14 Mar 2019 23:06:01 -0000 Author: asomers Date: Thu Mar 14 23:05:59 2019 New Revision: 345167 URL: https://svnweb.freebsd.org/changeset/base/345167 Log: fuse(4): add tests for extended attributes Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/xattr.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Thu Mar 14 22:52:16 2019 (r345166) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Thu Mar 14 23:05:59 2019 (r345167) @@ -33,6 +33,7 @@ ATF_TESTS_CXX+= statfs ATF_TESTS_CXX+= symlink ATF_TESTS_CXX+= unlink ATF_TESTS_CXX+= write +ATF_TESTS_CXX+= xattr SRCS.access+= access.cc SRCS.access+= getmntopts.c @@ -163,6 +164,11 @@ SRCS.write+= getmntopts.c SRCS.write+= mockfs.cc SRCS.write+= write.cc SRCS.write+= utils.cc + +SRCS.xattr+= getmntopts.c +SRCS.xattr+= mockfs.cc +SRCS.xattr+= xattr.cc +SRCS.xattr+= utils.cc # TODO: drastically increase timeout after test development is mostly complete TEST_METADATA+= timeout=10 Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 22:52:16 2019 (r345166) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Thu Mar 14 23:05:59 2019 (r345167) @@ -208,6 +208,18 @@ void debug_fuseop(const mockfs_buf_in *in) if (in->body.setattr.valid & FATTR_FH) printf(" fh=%zu", in->body.setattr.fh); break; + case FUSE_SETXATTR: + /* + * In theory neither the xattr name and value need be + * ASCII, but in this test suite they always are. + */ + { + const char *attr = (const char*)in->body.bytes + + sizeof(fuse_setxattr_in); + const char *v = attr + strlen(attr) + 1; + printf(" %s=%s", attr, v); + } + break; case FUSE_WRITE: printf(" offset=%lu size=%u flags=%u", in->body.write.offset, in->body.write.size, Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Thu Mar 14 22:52:16 2019 (r345166) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Thu Mar 14 23:05:59 2019 (r345167) @@ -86,8 +86,10 @@ union fuse_payloads_in { fuse_forget_in forget; fuse_interrupt_in interrupt; fuse_lk_in getlk; + fuse_getxattr_in getxattr; fuse_init_in init; fuse_link_in link; + fuse_listxattr_in listxattr; char lookup[0]; fuse_mkdir_in mkdir; fuse_mknod_in mknod; @@ -100,6 +102,7 @@ union fuse_payloads_in { fuse_rename_in rename; char rmdir[0]; fuse_setattr_in setattr; + fuse_setxattr_in setxattr; fuse_lk_in setlk; char unlink[0]; fuse_write_in write; @@ -117,7 +120,9 @@ union fuse_payloads_out { uint8_t bytes[0x20000]; fuse_entry_out entry; fuse_lk_out getlk; + fuse_getxattr_out getxattr; fuse_init_out init; + fuse_listxattr_out listxattr; fuse_open_out open; fuse_lk_out setlk; fuse_statfs_out statfs; Added: projects/fuse2/tests/sys/fs/fuse/xattr.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/xattr.cc Thu Mar 14 23:05:59 2019 (r345167) @@ -0,0 +1,509 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +extern "C" { +#include +#include +#include +} + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +const char FULLPATH[] = "mountpoint/some_file.txt"; +const char RELPATH[] = "some_file.txt"; + +/* For testing filesystems without posix locking support */ +class Xattr: public FuseTest { +public: +void expect_getxattr(uint64_t ino, const char *attr, ProcessMockerT r) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + const char *a = (const char*)in->body.bytes + + sizeof(fuse_getxattr_in); + return (in->header.opcode == FUSE_GETXATTR && + in->header.nodeid == ino && + 0 == strcmp(attr, a)); + }, Eq(true)), + _) + ).WillOnce(Invoke(r)); +} + +void expect_listxattr(uint64_t ino, uint32_t size, ProcessMockerT r) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_LISTXATTR && + in->header.nodeid == ino && + in->body.listxattr.size == size); + }, Eq(true)), + _) + ).WillOnce(Invoke(r)) + .RetiresOnSaturation(); +} + +void expect_removexattr(uint64_t ino, const char *attr, int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + const char *a = (const char*)in->body.bytes; + return (in->header.opcode == FUSE_REMOVEXATTR && + in->header.nodeid == ino && + 0 == strcmp(attr, a)); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + +void expect_setxattr(uint64_t ino, const char *attr, const char *value, + ProcessMockerT r) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + const char *a = (const char*)in->body.bytes + + sizeof(fuse_setxattr_in); + const char *v = a + strlen(a) + 1; + return (in->header.opcode == FUSE_SETXATTR && + in->header.nodeid == ino && + 0 == strcmp(attr, a) && + 0 == strcmp(value, v)); + }, Eq(true)), + _) + ).WillOnce(Invoke(r)); +} + +}; + +class Getxattr: public Xattr {}; +class Listxattr: public Xattr {}; +class Removexattr: public Xattr {}; +class Setxattr: public Xattr {}; + +/* + * If the extended attribute does not exist on this file, the daemon should + * return ENOATTR (ENODATA on Linux, but it's up to the daemon to choose the + * correct errror code) + */ +TEST_F(Getxattr, enoattr) +{ + char data[80]; + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "user.foo", ReturnErrno(ENOATTR)); + + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(-1, r); + ASSERT_EQ(ENOATTR, errno); +} + +/* + * On FreeBSD, if the user passes an insufficiently large buffer then the + * filesystem is supposed to copy as much of the attribute's value as will fit. + * + * On Linux, however, the filesystem is supposed to return ERANGE. + * + * libfuse specifies the Linux behavior. However, that's probably an error. + * It would probably be correct for the filesystem to use platform-dependent + * behavior. + * + * This test case covers a filesystem that uses the Linux behavior + */ +TEST_F(Getxattr, erange) +{ + char data[10]; + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "user.foo", ReturnErrno(ERANGE)); + + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(-1, r); + ASSERT_EQ(ERANGE, errno); +} + +/* + * If the user passes a 0-length buffer, then the daemon should just return the + * size of the attribute + */ +TEST_F(Getxattr, size_only) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "user.foo", ReturnImmediate([](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, getxattr); + out->body.getxattr.size = 99; + })); + + ASSERT_EQ(99, extattr_get_file(FULLPATH, ns, "foo", NULL, 0)) + << strerror(errno);; +} + +/* + * Successfully get an attribute from the system namespace + */ +TEST_F(Getxattr, system) +{ + uint64_t ino = 42; + char data[80]; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_SYSTEM; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "system.foo", + ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + memcpy((void*)out->body.bytes, value, value_len); + out->header.len = sizeof(out->header) + value_len; + }) + ); + + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(value_len, r) << strerror(errno); + EXPECT_STREQ(value, data); +} + +/* + * Successfully get an attribute from the user namespace + */ +TEST_F(Getxattr, user) +{ + uint64_t ino = 42; + char data[80]; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "user.foo", + ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + memcpy((void*)out->body.bytes, value, value_len); + out->header.len = sizeof(out->header) + value_len; + }) + ); + + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(value_len, r) << strerror(errno); + EXPECT_STREQ(value, data); +} + +/* + * Listing extended attributes failed because they aren't configured on this + * filesystem + */ +TEST_F(Listxattr, enotsup) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnErrno(ENOTSUP)); + + ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); + ASSERT_EQ(ENOTSUP, errno); +} + +/* + * On FreeBSD, if the user passes an insufficiently large buffer then the + * filesystem is supposed to copy as much of the attribute's value as will fit. + * + * On Linux, however, the filesystem is supposed to return ERANGE. + * + * libfuse specifies the Linux behavior. However, that's probably an error. + * It would probably be correct for the filesystem to use platform-dependent + * behavior. + * + * This test case covers a filesystem that uses the Linux behavior + */ +TEST_F(Listxattr, erange) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnErrno(ERANGE)); + + ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); + ASSERT_EQ(ERANGE, errno); +} + +/* + * Get the size of the list that it would take to list no extended attributes + */ +TEST_F(Listxattr, size_only_empty) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { + out->header.unique = in->header.unique; + out->body.listxattr.size = 0; + SET_OUT_HEADER_LEN(out, listxattr); + })); + + ASSERT_EQ(0, extattr_list_file(FULLPATH, ns, NULL, 0)) + << strerror(errno); +} + +/* + * Get the size of the list that it would take to list some extended + * attributes. Due to the format differences between a FreeBSD and a + * Linux/FUSE extended attribute list, fuse(4) will actually allocate a buffer + * and get the whole list, then convert it, just to figure out its size. + */ +TEST_F(Listxattr, size_only_nonempty) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { + out->header.unique = in->header.unique; + out->body.listxattr.size = 45; + SET_OUT_HEADER_LEN(out, listxattr); + })); + + // TODO: fix the expected size after fixing the size calculation bug in + // fuse_vnop_listextattr. It should be exactly 45. + expect_listxattr(ino, 53, ReturnImmediate([](auto in, auto out) { + const char l[] = "user.foo"; + out->header.unique = in->header.unique; + strlcpy((char*)out->body.bytes, l, sizeof(out->body.bytes)); + out->header.len = sizeof(fuse_out_header) + sizeof(l); + })); + + ASSERT_EQ(4, extattr_list_file(FULLPATH, ns, NULL, 0)) + << strerror(errno); +} + +TEST_F(Listxattr, size_only_really_big) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { + out->header.unique = in->header.unique; + out->body.listxattr.size = 16000; + SET_OUT_HEADER_LEN(out, listxattr); + })); + + // TODO: fix the expected size after fixing the size calculation bug in + // fuse_vnop_listextattr. It should be exactly 16000. + expect_listxattr(ino, 16008, ReturnImmediate([](auto in, auto out) { + const char l[16] = "user.foobarbang"; + out->header.unique = in->header.unique; + for (int i=0; i < 1000; i++) { + memcpy(&out->body.bytes[16 * i], l, 16); + } + out->header.len = sizeof(fuse_out_header) + 16000; + })); + + ASSERT_EQ(11000, extattr_list_file(FULLPATH, ns, NULL, 0)) + << strerror(errno); +} + +/* + * List all of the user attributes of a file which has both user and system + * attributes + */ +TEST_F(Listxattr, user) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + char data[80]; + char expected[9] = {3, 'f', 'o', 'o', 4, 'b', 'a', 'n', 'g'}; + char attrs[28] = "user.foo\0system.x\0user.bang"; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + out->body.listxattr.size = sizeof(attrs); + SET_OUT_HEADER_LEN(out, listxattr); + })); + + // TODO: fix the expected size after fixing the size calculation bug in + // fuse_vnop_listextattr. + expect_listxattr(ino, sizeof(attrs) + 8, + ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + memcpy((void*)out->body.bytes, attrs, sizeof(attrs)); + out->header.len = sizeof(fuse_out_header) + sizeof(attrs); + })); + + ASSERT_EQ((ssize_t)sizeof(expected), + extattr_list_file(FULLPATH, ns, data, sizeof(data))) + << strerror(errno); + ASSERT_EQ(0, memcmp(expected, data, sizeof(expected))); +} + +/* + * List all of the system attributes of a file which has both user and system + * attributes + */ +TEST_F(Listxattr, system) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_SYSTEM; + char data[80]; + char expected[2] = {1, 'x'}; + char attrs[28] = "user.foo\0system.x\0user.bang"; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + out->body.listxattr.size = sizeof(attrs); + SET_OUT_HEADER_LEN(out, listxattr); + })); + + // TODO: fix the expected size after fixing the size calculation bug in + // fuse_vnop_listextattr. + expect_listxattr(ino, sizeof(attrs) + 8, + ReturnImmediate([&](auto in, auto out) { + out->header.unique = in->header.unique; + memcpy((void*)out->body.bytes, attrs, sizeof(attrs)); + out->header.len = sizeof(fuse_out_header) + sizeof(attrs); + })); + + ASSERT_EQ((ssize_t)sizeof(expected), + extattr_list_file(FULLPATH, ns, data, sizeof(data))) + << strerror(errno); + ASSERT_EQ(0, memcmp(expected, data, sizeof(expected))); +} + +/* Fail to remove a nonexistent attribute */ +TEST_F(Removexattr, enoattr) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_removexattr(ino, "user.foo", ENOATTR); + + ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo")); + ASSERT_EQ(ENOATTR, errno); +} + +/* Successfully remove a user xattr */ +TEST_F(Removexattr, user) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_removexattr(ino, "user.foo", 0); + + ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo")) + << strerror(errno); +} + +/* Successfully remove a system xattr */ +TEST_F(Removexattr, system) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_SYSTEM; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_removexattr(ino, "system.foo", 0); + + ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo")) + << strerror(errno); +} + +/* + * SETXATTR will return ENOTSUP if the namespace is invalid or the filesystem + * as currently configured doesn't support extended attributes. + */ +TEST_F(Setxattr, enotsup) +{ + uint64_t ino = 42; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOTSUP)); + + r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); + ASSERT_EQ(-1, r); + EXPECT_EQ(ENOTSUP, errno); +} + +/* + * Successfully set a user attribute. + */ +TEST_F(Setxattr, user) +{ + uint64_t ino = 42; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_setxattr(ino, "user.foo", value, ReturnErrno(0)); + + r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); + ASSERT_EQ(value_len, r) << strerror(errno); +} + +/* + * Successfully set a system attribute. + */ +TEST_F(Setxattr, system) +{ + uint64_t ino = 42; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_SYSTEM; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_setxattr(ino, "system.foo", value, ReturnErrno(0)); + + r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); + ASSERT_EQ(value_len, r) << strerror(errno); +} From owner-svn-src-projects@freebsd.org Fri Mar 15 14:49:29 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5361B154AE4C for ; Fri, 15 Mar 2019 14:49:29 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E511F6B542; Fri, 15 Mar 2019 14:49:28 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D35F4B85B; Fri, 15 Mar 2019 14:49:28 +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 x2FEnSdV075553; Fri, 15 Mar 2019 14:49:28 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FEnSxX075550; Fri, 15 Mar 2019 14:49:28 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903151449.x2FEnSxX075550@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 14:49:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345185 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345185 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: E511F6B542 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.968,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 14:49:29 -0000 Author: asomers Date: Fri Mar 15 14:49:27 2019 New Revision: 345185 URL: https://svnweb.freebsd.org/changeset/base/345185 Log: fuse(4): add tests for FUSE_DESTROY, FUSE_FORGET, and unlinking open files Sponsored by: The FreeBSD Foundation Added: projects/fuse2/tests/sys/fs/fuse/destroy.cc (contents, props changed) Modified: projects/fuse2/tests/sys/fs/fuse/Makefile projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/unlink.cc Modified: projects/fuse2/tests/sys/fs/fuse/Makefile ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/Makefile Fri Mar 15 14:42:23 2019 (r345184) +++ projects/fuse2/tests/sys/fs/fuse/Makefile Fri Mar 15 14:49:27 2019 (r345185) @@ -9,6 +9,7 @@ TESTSDIR= ${TESTSBASE}/sys/fs/fuse # out, so we get more granular reporting. ATF_TESTS_CXX+= access ATF_TESTS_CXX+= create +ATF_TESTS_CXX+= destroy ATF_TESTS_CXX+= flush ATF_TESTS_CXX+= fsync ATF_TESTS_CXX+= fsyncdir @@ -44,6 +45,11 @@ SRCS.create+= create.cc SRCS.create+= getmntopts.c SRCS.create+= mockfs.cc SRCS.create+= utils.cc + +SRCS.destroy+= destroy.cc +SRCS.destroy+= getmntopts.c +SRCS.destroy+= mockfs.cc +SRCS.destroy+= utils.cc SRCS.flush+= flush.cc SRCS.flush+= getmntopts.c Added: projects/fuse2/tests/sys/fs/fuse/destroy.cc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/fuse2/tests/sys/fs/fuse/destroy.cc Fri Mar 15 14:49:27 2019 (r345185) @@ -0,0 +1,92 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by BFF Storage Systems, LLC under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "mockfs.hh" +#include "utils.hh" + +using namespace testing; + +class Destroy: public FuseTest { +public: +void expect_destroy(int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_DESTROY); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + +void expect_forget(uint64_t ino, uint64_t nlookup) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_FORGET && + in->header.nodeid == ino && + in->body.forget.nlookup == nlookup); + }, Eq(true)), + _) + ).WillOnce(Invoke([](auto in __unused, auto &out __unused) { + /* FUSE_FORGET has no response! */ + })); +} +}; + +/* + * On unmount the kernel should send a FUSE_DESTROY operation. It should also + * send FUSE_FORGET operations for all inodes with lookup_count > 0. It's hard + * to trigger FUSE_FORGET in way except by unmounting, so this is the only + * testing that FUSE_FORGET gets. + */ +TEST_F(Destroy, ok) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 2); + expect_forget(1, 1); + expect_forget(ino, 2); + expect_destroy(0); + + /* + * access(2) the file to force a lookup. Access it twice to double its + * lookup count. + */ + ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); + ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); + + /* + * Unmount, triggering a FUSE_DESTROY and also causing a VOP_RECLAIM + * for every vnode on this mp, triggering FUSE_FORGET for each of them. + */ + m_mock->unmount(); +} Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 14:42:23 2019 (r345184) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 14:49:27 2019 (r345185) @@ -159,6 +159,9 @@ void debug_fuseop(const mockfs_buf_in *in) in->header.unique, in->header.len); } switch (in->header.opcode) { + case FUSE_FORGET: + printf(" nlookup=%lu", in->body.forget.nlookup); + break; case FUSE_FSYNC: printf(" flags=%#x", in->body.fsync.fsync_flags); break; Modified: projects/fuse2/tests/sys/fs/fuse/unlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/unlink.cc Fri Mar 15 14:42:23 2019 (r345184) +++ projects/fuse2/tests/sys/fs/fuse/unlink.cc Fri Mar 15 14:49:27 2019 (r345185) @@ -38,10 +38,23 @@ using namespace testing; class Unlink: public FuseTest { public: -void expect_lookup(const char *relpath, uint64_t ino) +void expect_lookup(const char *relpath, uint64_t ino, int times) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, times); } + +void expect_unlink(uint64_t parent, const char *path, int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_UNLINK && + 0 == strcmp(path, in->body.unlink) && + in->header.nodeid == parent); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + }; TEST_F(Unlink, eperm) @@ -50,15 +63,8 @@ TEST_F(Unlink, eperm) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - expect_lookup(RELPATH, ino); - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_UNLINK && - 0 == strcmp(RELPATH, in->body.unlink) && - in->header.nodeid == 1); - }, Eq(true)), - _) - ).WillOnce(Invoke(ReturnErrno(EPERM))); + expect_lookup(RELPATH, ino, 1); + expect_unlink(1, RELPATH, EPERM); ASSERT_NE(0, unlink(FULLPATH)); ASSERT_EQ(EPERM, errno); @@ -70,15 +76,27 @@ TEST_F(Unlink, ok) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - expect_lookup(RELPATH, ino); - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_UNLINK && - 0 == strcmp(RELPATH, in->body.unlink) && - in->header.nodeid == 1); - }, Eq(true)), - _) - ).WillOnce(Invoke(ReturnErrno(0))); + expect_lookup(RELPATH, ino, 1); + expect_unlink(1, RELPATH, 0); ASSERT_EQ(0, unlink(FULLPATH)) << strerror(errno); +} + +/* Unlink an open file */ +TEST_F(Unlink, open_but_deleted) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino, 2); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_unlink(1, RELPATH, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(0, unlink(FULLPATH)) << strerror(errno); + /* Deliberately leak fd. close(2) will be tested in release.cc */ } From owner-svn-src-projects@freebsd.org Fri Mar 15 16:16:53 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5EE961525571 for ; Fri, 15 Mar 2019 16:16:53 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 110F96ED50; Fri, 15 Mar 2019 16:16:53 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DE8CEC92E; Fri, 15 Mar 2019 16:16:52 +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 x2FGGqWj022608; Fri, 15 Mar 2019 16:16:52 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FGGp4i022599; Fri, 15 Mar 2019 16:16:51 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903151616.x2FGGp4i022599@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 16:16:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345188 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345188 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 110F96ED50 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_SHORT(-0.97)[-0.968,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 16:16:53 -0000 Author: asomers Date: Fri Mar 15 16:16:50 2019 New Revision: 345188 URL: https://svnweb.freebsd.org/changeset/base/345188 Log: fuse(4): add some miscellaneous test cases that I had overlooked * Test that FUSE_FLUSH and FUSE_RELEASE release POSIX file locks * Test that FUSE_SETATTR's attr caching feature works * Fix some minor mistakes in the posix file lock tests Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/locks.cc projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/mockfs.hh projects/fuse2/tests/sys/fs/fuse/release.cc projects/fuse2/tests/sys/fs/fuse/setattr.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -41,12 +41,13 @@ using namespace testing; class Flush: public FuseTest { public: -void expect_flush(uint64_t ino, int times, ProcessMockerT r) +void expect_flush(uint64_t ino, int times, pid_t lo, ProcessMockerT r) { EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_FLUSH && in->header.nodeid == ino && + in->body.flush.lock_owner == (uint64_t)lo && in->body.flush.fh == FH); }, Eq(true)), _) @@ -74,7 +75,12 @@ void expect_release() } }; -// TODO: lock_owner stuff +class FlushWithLocks: public Flush { + virtual void SetUp() { + m_init_flags = FUSE_POSIX_LOCKS; + Flush::SetUp(); + } +}; /* If a file descriptor is duplicated, every close causes FLUSH */ /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236405 */ @@ -88,7 +94,7 @@ TEST_F(Flush, DISABLED_dup) expect_lookup(RELPATH, ino); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_flush(ino, 2, ReturnErrno(0)); + expect_flush(ino, 2, 0, ReturnErrno(0)); expect_release(); fd = open(FULLPATH, O_WRONLY); @@ -119,7 +125,7 @@ TEST_F(Flush, DISABLED_eio) expect_lookup(RELPATH, ino); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_flush(ino, 1, ReturnErrno(EIO)); + expect_flush(ino, 1, 0, ReturnErrno(EIO)); expect_release(); fd = open(FULLPATH, O_WRONLY); @@ -140,11 +146,58 @@ TEST_F(Flush, DISABLED_flush) expect_lookup(RELPATH, ino); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_flush(ino, 1, ReturnErrno(0)); + expect_flush(ino, 1, 0, ReturnErrno(0)); expect_release(); fd = open(FULLPATH, O_WRONLY); EXPECT_LE(0, fd) << strerror(errno); ASSERT_TRUE(0 == close(fd)) << strerror(errno); +} + +/* + * When closing a file with a POSIX file lock, flush should release the lock, + * _even_if_ it's not the process's last file descriptor for this file. + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236405 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(FlushWithLocks, DISABLED_unlock_on_close) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd, fd2; + struct flock fl; + pid_t pid = getpid(); + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.setlk.fh == FH); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, setlk); + out->body.setlk.lk = in->body.setlk.lk; + }))); + expect_flush(ino, 1, pid, ReturnErrno(0)); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 0; + fl.l_len = 0; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLKW, &fl)) << strerror(errno); + + fd2 = dup(fd); + ASSERT_EQ(0, close(fd2)) << strerror(errno); + /* Deliberately leak fd */ } Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -143,7 +143,7 @@ TEST_F(Fsync, close) }, Eq(true)), _) ).Times(0); - expect_release(ino, 1, 0); + expect_release(ino, 1, 0, 0); fd = open(FULLPATH, O_RDWR); ASSERT_LE(0, fd) << strerror(errno); Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -120,7 +120,7 @@ TEST_F(Getlk, DISABLED_no_locks) in->body.getlk.lk.start == 10 && in->body.getlk.lk.end == 1009 && in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.getlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { @@ -153,7 +153,7 @@ TEST_F(Getlk, DISABLED_lock_exists) struct flock fl; int fd; pid_t pid = 1234; - pid_t pid2 = 1234; + pid_t pid2 = 1235; expect_lookup(RELPATH, ino); expect_open(ino, 0, 1); @@ -167,7 +167,7 @@ TEST_F(Getlk, DISABLED_lock_exists) in->body.getlk.lk.start == 10 && in->body.getlk.lk.end == 1009 && in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.getlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { @@ -243,19 +243,18 @@ TEST_F(Setlk, DISABLED_set) ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && in->header.nodeid == ino && - in->body.getlk.fh == FH && - in->body.getlk.owner == (uint32_t)pid && - in->body.getlk.lk.start == 10 && - in->body.getlk.lk.end == 1009 && - in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.setlk.fh == FH && + in->body.setlk.owner == (uint32_t)pid && + in->body.setlk.lk.start == 10 && + in->body.setlk.lk.end == 1009 && + in->body.setlk.lk.type == F_RDLCK && + in->body.setlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, getlk); - out->body.getlk.lk = in->body.getlk.lk; - out->body.getlk.lk.type = F_UNLCK; + SET_OUT_HEADER_LEN(out, setlk); + out->body.setlk.lk = in->body.setlk.lk; }))); fd = open(FULLPATH, O_RDWR); @@ -288,19 +287,18 @@ TEST_F(Setlk, DISABLED_set_eof) ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && in->header.nodeid == ino && - in->body.getlk.fh == FH && - in->body.getlk.owner == (uint32_t)pid && - in->body.getlk.lk.start == 10 && - in->body.getlk.lk.end == OFFSET_MAX && - in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.setlk.fh == FH && + in->body.setlk.owner == (uint32_t)pid && + in->body.setlk.lk.start == 10 && + in->body.setlk.lk.end == OFFSET_MAX && + in->body.setlk.lk.type == F_RDLCK && + in->body.setlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, getlk); - out->body.getlk.lk = in->body.getlk.lk; - out->body.getlk.lk.type = F_UNLCK; + SET_OUT_HEADER_LEN(out, setlk); + out->body.setlk.lk = in->body.setlk.lk; }))); fd = open(FULLPATH, O_RDWR); @@ -333,12 +331,12 @@ TEST_F(Setlk, DISABLED_eagain) ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && in->header.nodeid == ino && - in->body.getlk.fh == FH && - in->body.getlk.owner == (uint32_t)pid && - in->body.getlk.lk.start == 10 && - in->body.getlk.lk.end == 1009 && - in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.setlk.fh == FH && + in->body.setlk.owner == (uint32_t)pid && + in->body.setlk.lk.start == 10 && + in->body.setlk.lk.end == 1009 && + in->body.setlk.lk.type == F_RDLCK && + in->body.setlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnErrno(EAGAIN))); @@ -406,19 +404,18 @@ TEST_F(Setlkw, DISABLED_set) ResultOf([=](auto in) { return (in->header.opcode == FUSE_SETLK && in->header.nodeid == ino && - in->body.getlk.fh == FH && - in->body.getlk.owner == (uint32_t)pid && - in->body.getlk.lk.start == 10 && - in->body.getlk.lk.end == 1009 && - in->body.getlk.lk.type == F_RDLCK && - in->body.getlk.lk.pid == 10); + in->body.setlkw.fh == FH && + in->body.setlkw.owner == (uint32_t)pid && + in->body.setlkw.lk.start == 10 && + in->body.setlkw.lk.end == 1009 && + in->body.setlkw.lk.type == F_RDLCK && + in->body.setlkw.lk.pid == (uint64_t)pid); }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, getlk); - out->body.getlk.lk = in->body.getlk.lk; - out->body.getlk.lk.type = F_UNLCK; + SET_OUT_HEADER_LEN(out, setlkw); + out->body.setlkw.lk = in->body.setlkw.lk; }))); fd = open(FULLPATH, O_RDWR); Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -159,6 +159,9 @@ void debug_fuseop(const mockfs_buf_in *in) in->header.unique, in->header.len); } switch (in->header.opcode) { + case FUSE_FLUSH: + printf(" lock_owner=%lu", in->body.flush.lock_owner); + break; case FUSE_FORGET: printf(" nlookup=%lu", in->body.forget.nlookup); break; @@ -186,6 +189,11 @@ void debug_fuseop(const mockfs_buf_in *in) case FUSE_READDIR: printf(" offset=%lu size=%u", in->body.readdir.offset, in->body.readdir.size); + break; + case FUSE_RELEASE: + printf(" flags=%#x lock_owner=%lu", + in->body.release.flags, + in->body.release.lock_owner); break; case FUSE_SETATTR: if (verbosity <= 1) { Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.hh Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.hh Fri Mar 15 16:16:50 2019 (r345188) @@ -104,6 +104,7 @@ union fuse_payloads_in { fuse_setattr_in setattr; fuse_setxattr_in setxattr; fuse_lk_in setlk; + fuse_lk_in setlkw; char unlink[0]; fuse_write_in write; }; @@ -125,6 +126,7 @@ union fuse_payloads_out { fuse_listxattr_out listxattr; fuse_open_out open; fuse_lk_out setlk; + fuse_lk_out setlkw; fuse_statfs_out statfs; /* * The protocol places no limits on the length of the string. This is Modified: projects/fuse2/tests/sys/fs/fuse/release.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -47,8 +47,14 @@ void expect_lookup(const char *relpath, uint64_t ino, } }; -// TODO: lock owner stuff +class ReleaseWithLocks: public Release { + virtual void SetUp() { + m_init_flags = FUSE_POSIX_LOCKS; + Release::SetUp(); + } +}; + /* If a file descriptor is duplicated, only the last close causes RELEASE */ TEST_F(Release, dup) { @@ -60,7 +66,7 @@ TEST_F(Release, dup) expect_lookup(RELPATH, ino, 1); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_release(ino, 1, 0); + expect_release(ino, 1, 0, 0); fd = open(FULLPATH, O_RDONLY); EXPECT_LE(0, fd) << strerror(errno); @@ -89,7 +95,7 @@ TEST_F(Release, eio) expect_lookup(RELPATH, ino, 1); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_release(ino, 1, EIO); + expect_release(ino, 1, 0, EIO); fd = open(FULLPATH, O_WRONLY); EXPECT_LE(0, fd) << strerror(errno); @@ -112,7 +118,7 @@ TEST_F(Release, multiple_opens) expect_lookup(RELPATH, ino, 2); expect_open(ino, 0, 2); expect_getattr(ino, 0); - expect_release(ino, 2, 0); + expect_release(ino, 2, 0, 0); fd = open(FULLPATH, O_RDONLY); EXPECT_LE(0, fd) << strerror(errno); @@ -134,10 +140,51 @@ TEST_F(Release, ok) expect_lookup(RELPATH, ino, 1); expect_open(ino, 0, 1); expect_getattr(ino, 0); - expect_release(ino, 1, 0); + expect_release(ino, 1, 0, 0); fd = open(FULLPATH, O_RDONLY); EXPECT_LE(0, fd) << strerror(errno); + + ASSERT_EQ(0, close(fd)) << strerror(errno); +} + +/* When closing a file with a POSIX file lock, release should release the lock*/ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234581 */ +TEST_F(ReleaseWithLocks, DISABLED_unlock_on_close) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + struct flock fl; + pid_t pid = getpid(); + + expect_lookup(RELPATH, ino, 1); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_SETLK && + in->header.nodeid == ino && + in->body.setlk.fh == FH); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, setlk); + out->body.setlk.lk = in->body.setlk.lk; + }))); + expect_release(ino, 1, (uint64_t)pid, 0); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + fl.l_start = 0; + fl.l_len = 0; + fl.l_pid = pid; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_sysid = 0; + ASSERT_NE(-1, fcntl(fd, F_SETLKW, &fl)) << strerror(errno); ASSERT_EQ(0, close(fd)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/setattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/setattr.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/setattr.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -42,6 +42,55 @@ using namespace testing; class Setattr : public FuseTest {}; +/* + * If setattr returns a non-zero cache timeout, then subsequent VOP_GETATTRs + * should use the cached attributes, rather than query the daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235775 */ +TEST_F(Setattr, DISABLED_attr_cache) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const uint64_t ino = 42; + struct stat sb; + const mode_t newmode = 0644; + + EXPECT_LOOKUP(1, RELPATH) + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, entry); + out->body.entry.attr.mode = S_IFREG | 0644; + out->body.entry.nodeid = ino; + }))); + + EXPECT_CALL(*m_mock, process( + ResultOf([](auto in) { + /* In protocol 7.23, ctime will be changed too */ + return (in->header.opcode == FUSE_SETATTR && + in->header.nodeid == ino); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { + out->header.unique = in->header.unique; + SET_OUT_HEADER_LEN(out, attr); + out->body.attr.attr.ino = ino; // Must match nodeid + out->body.attr.attr.mode = S_IFREG | newmode; + }))); + EXPECT_CALL(*m_mock, process( + ResultOf([](auto in) { + return (in->header.opcode == FUSE_GETATTR); + }, Eq(true)), + _) + ).Times(0); + + /* Set an attribute with SETATTR */ + ASSERT_EQ(0, chmod(FULLPATH, newmode)) << strerror(errno); + + /* The stat(2) should use cached attributes */ + ASSERT_EQ(0, stat(FULLPATH, &sb)); + EXPECT_EQ(S_IFREG | newmode, sb.st_mode); +} + /* Change the mode of a file */ TEST_F(Setattr, chmod) { @@ -305,7 +354,8 @@ TEST_F(Setattr, truncate) { const uint64_t oldsize = 100'000'000; const uint64_t newsize = 20'000'000; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; @@ -347,7 +397,8 @@ TEST_F(Setattr, utimensat) { {.tv_sec = 7, .tv_nsec = 8}, }; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; @@ -423,7 +474,8 @@ TEST_F(Setattr, utimensat_mtime_only) { {.tv_sec = 7, .tv_nsec = 8}, }; - EXPECT_LOOKUP(1, RELPATH).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { + EXPECT_LOOKUP(1, RELPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; @@ -481,9 +533,3 @@ TEST_F(Setattr, utimensat_mtime_only) { EXPECT_EQ(0, utimensat(AT_FDCWD, FULLPATH, &newtimes[0], 0)) << strerror(errno); } - -/* - * Writethrough cache: newly changed attributes should be automatically cached, - * if the filesystem allows it - */ -//TODO TEST_F(Setattr, writethrough_cache){} Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 16:16:50 2019 (r345188) @@ -181,12 +181,14 @@ void FuseTest::expect_read(uint64_t ino, uint64_t offs }))).RetiresOnSaturation(); } -void FuseTest::expect_release(uint64_t ino, int times, int error) +void FuseTest::expect_release(uint64_t ino, int times, uint64_t lock_owner, + int error) { EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_RELEASE && in->header.nodeid == ino && + in->body.release.lock_owner == lock_owner && in->body.release.fh == FH); }, Eq(true)), _) Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.hh Fri Mar 15 15:52:36 2019 (r345187) +++ projects/fuse2/tests/sys/fs/fuse/utils.hh Fri Mar 15 16:16:50 2019 (r345188) @@ -103,7 +103,8 @@ class FuseTest : public ::testing::Test { * Create an expectation that FUSE_RELEASE will be called times times * for the given inode, returning error error */ - void expect_release(uint64_t ino, int times, int error); + void expect_release(uint64_t ino, int times, uint64_t lock_owner, + int error); /* * Create an expectation that FUSE_WRITE will be called exactly once From owner-svn-src-projects@freebsd.org Fri Mar 15 17:04:39 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 702C61526FD3 for ; Fri, 15 Mar 2019 17:04:39 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 123BB714A2; Fri, 15 Mar 2019 17:04:39 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DA49ED214; Fri, 15 Mar 2019 17:04:38 +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 x2FH4cXu049017; Fri, 15 Mar 2019 17:04:38 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FH4XBl048993; Fri, 15 Mar 2019 17:04:33 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903151704.x2FH4XBl048993@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 17:04:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345191 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345191 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 123BB714A2 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.98)[-0.978,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 17:04:39 -0000 Author: asomers Date: Fri Mar 15 17:04:33 2019 New Revision: 345191 URL: https://svnweb.freebsd.org/changeset/base/345191 Log: fuse(4): combine common code in the tests Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/getattr.cc projects/fuse2/tests/sys/fs/fuse/link.cc projects/fuse2/tests/sys/fs/fuse/locks.cc projects/fuse2/tests/sys/fs/fuse/lookup.cc projects/fuse2/tests/sys/fs/fuse/mkdir.cc projects/fuse2/tests/sys/fs/fuse/mknod.cc projects/fuse2/tests/sys/fs/fuse/mockfs.cc projects/fuse2/tests/sys/fs/fuse/open.cc projects/fuse2/tests/sys/fs/fuse/opendir.cc projects/fuse2/tests/sys/fs/fuse/read.cc projects/fuse2/tests/sys/fs/fuse/readdir.cc projects/fuse2/tests/sys/fs/fuse/readlink.cc projects/fuse2/tests/sys/fs/fuse/release.cc projects/fuse2/tests/sys/fs/fuse/releasedir.cc projects/fuse2/tests/sys/fs/fuse/rmdir.cc projects/fuse2/tests/sys/fs/fuse/setattr.cc projects/fuse2/tests/sys/fs/fuse/statfs.cc projects/fuse2/tests/sys/fs/fuse/symlink.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/write.cc projects/fuse2/tests/sys/fs/fuse/xattr.cc Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -62,8 +62,7 @@ TEST_F(Create, DISABLED_attr_cache) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; @@ -145,8 +144,7 @@ TEST_F(Create, DISABLED_Enosys) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; @@ -160,8 +158,7 @@ TEST_F(Create, DISABLED_Enosys) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); }))); @@ -173,8 +170,7 @@ TEST_F(Create, DISABLED_Enosys) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -214,8 +210,7 @@ TEST_F(Create, DISABLED_entry_cache_negative) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; @@ -230,8 +225,7 @@ TEST_F(Create, DISABLED_entry_cache_negative) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -269,8 +263,7 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; @@ -284,8 +277,7 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -344,8 +336,7 @@ TEST_F(Create, ok) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = S_IFREG | mode; out->body.create.entry.nodeid = ino; @@ -360,8 +351,7 @@ TEST_F(Create, ok) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -181,7 +181,6 @@ TEST_F(FlushWithLocks, DISABLED_unlock_on_close) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, setlk); out->body.setlk.lk = in->body.setlk.lk; }))); Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -132,8 +132,7 @@ TEST_F(Fsync, close) return (in->header.opcode == FUSE_SETATTR); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid }))); @@ -244,8 +243,7 @@ TEST_F(Fsync, DISABLED_fsync_metadata_only) return (in->header.opcode == FUSE_SETATTR); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | mode; Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/getattr.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/getattr.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -47,8 +47,8 @@ TEST_F(Getattr, DISABLED_attr_cache) const uint64_t ino = 42; struct stat sb; - EXPECT_LOOKUP(1, RELPATH).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + EXPECT_LOOKUP(1, RELPATH) + .WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -59,8 +59,7 @@ TEST_F(Getattr, DISABLED_attr_cache) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr_valid = UINT64_MAX; out->body.attr.attr.ino = ino; // Must match nodeid @@ -97,8 +96,7 @@ TEST_F(Getattr, attr_cache_timeout) }, Eq(true)), _) ).Times(2) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr_valid_nsec = timeout_ns; out->body.attr.attr_valid = UINT64_MAX; @@ -144,8 +142,7 @@ TEST_F(Getattr, ok) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; Modified: projects/fuse2/tests/sys/fs/fuse/link.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/link.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/link.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -92,8 +92,7 @@ TEST_F(Link, ok) (0 == strcmp(name, RELPATH))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -124,7 +124,6 @@ TEST_F(Getlk, DISABLED_no_locks) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk = in->body.getlk.lk; out->body.getlk.lk.type = F_UNLCK; @@ -170,8 +169,7 @@ TEST_F(Getlk, DISABLED_lock_exists) in->body.getlk.lk.pid == (uint64_t)pid); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, getlk); out->body.getlk.lk.start = 100; out->body.getlk.lk.end = 199; @@ -252,7 +250,6 @@ TEST_F(Setlk, DISABLED_set) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, setlk); out->body.setlk.lk = in->body.setlk.lk; }))); @@ -296,7 +293,6 @@ TEST_F(Setlk, DISABLED_set_eof) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, setlk); out->body.setlk.lk = in->body.setlk.lk; }))); @@ -413,7 +409,6 @@ TEST_F(Setlkw, DISABLED_set) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, setlkw); out->body.setlkw.lk = in->body.setlkw.lk; }))); Modified: projects/fuse2/tests/sys/fs/fuse/lookup.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/lookup.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/lookup.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -53,8 +53,7 @@ TEST_F(Lookup, DISABLED_attr_cache) struct stat sb; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.nodeid = ino; out->body.entry.attr_valid = UINT64_MAX; @@ -120,8 +119,7 @@ TEST_F(Lookup, attr_cache_timeout) long timeout_ns = 250'000'000; EXPECT_LOOKUP(1, RELPATH) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.nodeid = ino; out->body.entry.attr_valid_nsec = timeout_ns; @@ -157,8 +155,7 @@ TEST_F(Lookup, entry_cache) const char RELPATH[] = "some_file.txt"; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.entry_valid = UINT64_MAX; out->body.entry.attr.mode = S_IFREG | 0644; @@ -227,8 +224,7 @@ TEST_F(Lookup, DISABLED_entry_cache_timeout) long timeout_ns = 250'000'000; EXPECT_LOOKUP(1, RELPATH).Times(2) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.entry_valid_nsec = timeout_ns; out->body.entry.attr.mode = S_IFREG | 0644; @@ -252,8 +248,7 @@ TEST_F(Lookup, ok) const char RELPATH[] = "some_file.txt"; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = 14; @@ -275,15 +270,13 @@ TEST_F(Lookup, subdir) uint64_t file_ino = 3; EXPECT_LOOKUP(1, DIRPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFDIR | 0755; out->body.entry.nodeid = dir_ino; }))); EXPECT_LOOKUP(dir_ino, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = file_ino; Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mkdir.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -95,8 +95,7 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.create.entry.attr.mode = S_IFDIR | mode; out->body.create.entry.nodeid = ino; @@ -134,8 +133,7 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative_purge) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFDIR | mode; out->body.entry.nodeid = ino; @@ -168,8 +166,7 @@ TEST_F(Mkdir, ok) (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.create.entry.attr.mode = S_IFDIR | mode; out->body.create.entry.nodeid = ino; Modified: projects/fuse2/tests/sys/fs/fuse/mknod.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mknod.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/mknod.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -67,8 +67,7 @@ void test_ok(mode_t mode, dev_t dev) { (0 == strcmp(RELPATH, name))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, create); out->body.create.entry.attr.mode = mode; out->body.create.entry.nodeid = ino; Modified: projects/fuse2/tests/sys/fs/fuse/mockfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/mockfs.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -140,6 +140,7 @@ ReturnImmediate(std::functionheader.unique = in->header.unique; f(in, out0); out.push_back(out0); }); Modified: projects/fuse2/tests/sys/fs/fuse/open.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/open.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/open.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -56,8 +56,7 @@ void test_ok(int os_flags, int fuse_flags) { in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); }))); @@ -69,8 +68,7 @@ void test_ok(int os_flags, int fuse_flags) { in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; Modified: projects/fuse2/tests/sys/fs/fuse/opendir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/opendir.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/opendir.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -109,8 +109,7 @@ TEST_F(Opendir, open) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, open); }))); @@ -129,8 +128,7 @@ TEST_F(Opendir, opendir) return (in->header.opcode == FUSE_STATFS); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, statfs); }))); @@ -140,8 +138,7 @@ TEST_F(Opendir, opendir) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, open); }))); Modified: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -242,8 +242,7 @@ TEST_F(Read, mmap) in->body.read.size >= bufsize); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(struct fuse_out_header) + bufsize; memmove(out->body.bytes, CONTENTS, bufsize); }))); @@ -411,8 +410,7 @@ TEST_F(Read, sendfile) in->body.read.size >= bufsize); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(struct fuse_out_header) + bufsize; memmove(out->body.bytes, CONTENTS, bufsize); }))); Modified: projects/fuse2/tests/sys/fs/fuse/readdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readdir.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/readdir.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -59,7 +59,6 @@ void expect_readdir(uint64_t ino, uint64_t off, vector struct fuse_dirent *fde = (struct fuse_dirent*)out->body.bytes; int i = 0; - out->header.unique = in->header.unique; out->header.error = 0; out->header.len = 0; @@ -208,8 +207,7 @@ TEST_F(Readdir, nodots) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.error = 0; out->header.len = sizeof(out->header); }))); Modified: projects/fuse2/tests/sys/fs/fuse/readlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readlink.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/readlink.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -82,8 +82,7 @@ TEST_F(Readlink, ok) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { strlcpy(out->body.str, dst, sizeof(out->body.str)); out->header.len = sizeof(out->header) + strlen(dst) + 1; }))); Modified: projects/fuse2/tests/sys/fs/fuse/release.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -170,7 +170,6 @@ TEST_F(ReleaseWithLocks, DISABLED_unlock_on_close) }, Eq(true)), _) ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, setlk); out->body.setlk.lk = in->body.setlk.lk; }))); Modified: projects/fuse2/tests/sys/fs/fuse/releasedir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/releasedir.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/releasedir.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -75,8 +75,7 @@ TEST_F(ReleaseDir, dup) in->body.readdir.offset == 0); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.error = 0; out->header.len = sizeof(out->header); }))); Modified: projects/fuse2/tests/sys/fs/fuse/rmdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/rmdir.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/rmdir.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -42,8 +42,7 @@ class Rmdir: public FuseTest { (public) void expect_lookup(const char *relpath, uint64_t ino) { EXPECT_LOOKUP(1, relpath) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFDIR | 0755; out->body.entry.nodeid = ino; Modified: projects/fuse2/tests/sys/fs/fuse/setattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/setattr.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/setattr.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -56,8 +56,7 @@ TEST_F(Setattr, DISABLED_attr_cache) const mode_t newmode = 0644; EXPECT_LOOKUP(1, RELPATH) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -70,8 +69,7 @@ TEST_F(Setattr, DISABLED_attr_cache) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | newmode; @@ -101,8 +99,7 @@ TEST_F(Setattr, chmod) const mode_t newmode = 0644; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | oldmode; out->body.entry.nodeid = ino; @@ -119,8 +116,7 @@ TEST_F(Setattr, chmod) in->body.setattr.mode == newmode); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | newmode; @@ -140,8 +136,7 @@ TEST_F(Setattr, chown) const uid_t newuser = 44; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -160,8 +155,7 @@ TEST_F(Setattr, chown) in->body.setattr.gid == newgroup); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -186,7 +180,6 @@ TEST_F(Setattr, eperm) EXPECT_LOOKUP(1, RELPATH) .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0777; out->body.entry.nodeid = ino; @@ -216,8 +209,7 @@ TEST_F(Setattr, fchmod) const mode_t newmode = 0644; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | oldmode; out->body.entry.nodeid = ino; @@ -230,8 +222,7 @@ TEST_F(Setattr, fchmod) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); }))); @@ -243,8 +234,7 @@ TEST_F(Setattr, fchmod) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | oldmode; @@ -260,8 +250,7 @@ TEST_F(Setattr, fchmod) in->body.setattr.mode == newmode); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | newmode; @@ -285,8 +274,7 @@ TEST_F(Setattr, ftruncate) const off_t newsize = 12345; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0755; out->body.entry.nodeid = ino; @@ -300,8 +288,7 @@ TEST_F(Setattr, ftruncate) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); out->body.open.fh = fh; @@ -314,8 +301,7 @@ TEST_F(Setattr, ftruncate) in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0755; @@ -332,8 +318,7 @@ TEST_F(Setattr, ftruncate) in->body.setattr.fh == fh); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0755; @@ -355,8 +340,7 @@ TEST_F(Setattr, truncate) { const uint64_t newsize = 20'000'000; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -373,8 +357,7 @@ TEST_F(Setattr, truncate) { in->body.setattr.size == newsize); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -398,8 +381,7 @@ TEST_F(Setattr, utimensat) { }; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -420,8 +402,7 @@ TEST_F(Setattr, utimensat) { in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -446,8 +427,7 @@ TEST_F(Setattr, utimensat) { newtimes[1].tv_nsec); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -475,8 +455,7 @@ TEST_F(Setattr, utimensat_mtime_only) { }; EXPECT_LOOKUP(1, RELPATH) - .WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFREG | 0644; out->body.entry.nodeid = ino; @@ -497,8 +476,7 @@ TEST_F(Setattr, utimensat_mtime_only) { in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -520,8 +498,7 @@ TEST_F(Setattr, utimensat_mtime_only) { newtimes[1].tv_nsec); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; Modified: projects/fuse2/tests/sys/fs/fuse/statfs.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/statfs.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/statfs.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -86,8 +86,7 @@ TEST_F(Statfs, ok) return (in->header.opcode == FUSE_STATFS); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, statfs); out->body.statfs.st.blocks = 1000; out->body.statfs.st.bfree = 100; Modified: projects/fuse2/tests/sys/fs/fuse/symlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/symlink.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/symlink.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -80,8 +80,7 @@ TEST_F(Symlink, ok) (0 == strcmp(name, RELPATH))); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = S_IFLNK | 0777; out->body.entry.nodeid = ino; Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -93,8 +93,7 @@ void FuseTest::expect_getattr(uint64_t ino, uint64_t s in->header.nodeid == ino); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; @@ -108,8 +107,7 @@ void FuseTest::expect_lookup(const char *relpath, uint { EXPECT_LOOKUP(1, relpath) .Times(times) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, entry); out->body.entry.attr.mode = mode; out->body.entry.nodeid = ino; @@ -127,8 +125,7 @@ void FuseTest::expect_open(uint64_t ino, uint32_t flag }, Eq(true)), _) ).Times(times) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); out->body.open.fh = FH; @@ -143,8 +140,7 @@ void FuseTest::expect_opendir(uint64_t ino) return (in->header.opcode == FUSE_STATFS); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, statfs); }))); @@ -154,8 +150,7 @@ void FuseTest::expect_opendir(uint64_t ino) in->header.nodeid == ino); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(out->header); SET_OUT_HEADER_LEN(out, open); out->body.open.fh = FH; @@ -174,8 +169,7 @@ void FuseTest::expect_read(uint64_t ino, uint64_t offs in->body.read.size == isize); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { out->header.len = sizeof(struct fuse_out_header) + osize; memmove(out->body.bytes, contents, osize); }))).RetiresOnSaturation(); @@ -219,8 +213,7 @@ void FuseTest::expect_write(uint64_t ino, uint64_t off 0 == bcmp(buf, contents, isize)); }, Eq(true)), _) - ).WillOnce(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, write); out->body.write.size = osize; }))); Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -503,8 +503,7 @@ TEST_F(WriteBack, close) return (in->header.opcode == FUSE_SETATTR); }, Eq(true)), _) - ).WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + ).WillRepeatedly(Invoke(ReturnImmediate([=](auto i __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid }))); @@ -635,8 +634,7 @@ TEST_F(WriteThrough, DISABLED_update_file_size) }, Eq(true)), _) ).Times(2) - .WillRepeatedly(Invoke(ReturnImmediate([=](auto in, auto out) { - out->header.unique = in->header.unique; + .WillRepeatedly(Invoke(ReturnImmediate([=](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, attr); out->body.attr.attr.ino = ino; // Must match nodeid out->body.attr.attr.mode = S_IFREG | 0644; Modified: projects/fuse2/tests/sys/fs/fuse/xattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 16:43:28 2019 (r345190) +++ projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 17:04:33 2019 (r345191) @@ -166,11 +166,12 @@ TEST_F(Getxattr, size_only) int ns = EXTATTR_NAMESPACE_USER; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_getxattr(ino, "user.foo", ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; - SET_OUT_HEADER_LEN(out, getxattr); - out->body.getxattr.size = 99; - })); + expect_getxattr(ino, "user.foo", + ReturnImmediate([](auto in __unused, auto out) { + SET_OUT_HEADER_LEN(out, getxattr); + out->body.getxattr.size = 99; + }) + ); ASSERT_EQ(99, extattr_get_file(FULLPATH, ns, "foo", NULL, 0)) << strerror(errno);; @@ -190,8 +191,7 @@ TEST_F(Getxattr, system) expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); expect_getxattr(ino, "system.foo", - ReturnImmediate([&](auto in, auto out) { - out->header.unique = in->header.unique; + ReturnImmediate([&](auto in __unused, auto out) { memcpy((void*)out->body.bytes, value, value_len); out->header.len = sizeof(out->header) + value_len; }) @@ -216,8 +216,7 @@ TEST_F(Getxattr, user) expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); expect_getxattr(ino, "user.foo", - ReturnImmediate([&](auto in, auto out) { - out->header.unique = in->header.unique; + ReturnImmediate([&](auto in __unused, auto out) { memcpy((void*)out->body.bytes, value, value_len); out->header.len = sizeof(out->header) + value_len; }) @@ -277,8 +276,7 @@ TEST_F(Listxattr, size_only_empty) int ns = EXTATTR_NAMESPACE_USER; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 0; SET_OUT_HEADER_LEN(out, listxattr); })); @@ -299,20 +297,21 @@ TEST_F(Listxattr, size_only_nonempty) int ns = EXTATTR_NAMESPACE_USER; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 45; SET_OUT_HEADER_LEN(out, listxattr); })); // TODO: fix the expected size after fixing the size calculation bug in // fuse_vnop_listextattr. It should be exactly 45. - expect_listxattr(ino, 53, ReturnImmediate([](auto in, auto out) { - const char l[] = "user.foo"; - out->header.unique = in->header.unique; - strlcpy((char*)out->body.bytes, l, sizeof(out->body.bytes)); - out->header.len = sizeof(fuse_out_header) + sizeof(l); - })); + expect_listxattr(ino, 53, + ReturnImmediate([](auto in __unused, auto out) { + const char l[] = "user.foo"; + strlcpy((char*)out->body.bytes, l, + sizeof(out->body.bytes)); + out->header.len = sizeof(fuse_out_header) + sizeof(l); + }) + ); ASSERT_EQ(4, extattr_list_file(FULLPATH, ns, NULL, 0)) << strerror(errno); @@ -324,22 +323,22 @@ TEST_F(Listxattr, size_only_really_big) int ns = EXTATTR_NAMESPACE_USER; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_listxattr(ino, 0, ReturnImmediate([](auto in, auto out) { - out->header.unique = in->header.unique; + expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 16000; SET_OUT_HEADER_LEN(out, listxattr); })); // TODO: fix the expected size after fixing the size calculation bug in // fuse_vnop_listextattr. It should be exactly 16000. - expect_listxattr(ino, 16008, ReturnImmediate([](auto in, auto out) { - const char l[16] = "user.foobarbang"; - out->header.unique = in->header.unique; - for (int i=0; i < 1000; i++) { - memcpy(&out->body.bytes[16 * i], l, 16); - } - out->header.len = sizeof(fuse_out_header) + 16000; - })); + expect_listxattr(ino, 16008, + ReturnImmediate([](auto in __unused, auto out) { + const char l[16] = "user.foobarbang"; + for (int i=0; i < 1000; i++) { + memcpy(&out->body.bytes[16 * i], l, 16); + } + out->header.len = sizeof(fuse_out_header) + 16000; + }) + ); ASSERT_EQ(11000, extattr_list_file(FULLPATH, ns, NULL, 0)) << strerror(errno); @@ -358,17 +357,17 @@ TEST_F(Listxattr, user) char attrs[28] = "user.foo\0system.x\0user.bang"; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_listxattr(ino, 0, ReturnImmediate([&](auto in, auto out) { - out->header.unique = in->header.unique; - out->body.listxattr.size = sizeof(attrs); - SET_OUT_HEADER_LEN(out, listxattr); - })); + expect_listxattr(ino, 0, + ReturnImmediate([&](auto in __unused, auto out) { + out->body.listxattr.size = sizeof(attrs); + SET_OUT_HEADER_LEN(out, listxattr); + }) + ); // TODO: fix the expected size after fixing the size calculation bug in // fuse_vnop_listextattr. expect_listxattr(ino, sizeof(attrs) + 8, - ReturnImmediate([&](auto in, auto out) { - out->header.unique = in->header.unique; + ReturnImmediate([&](auto in __unused, auto out) { memcpy((void*)out->body.bytes, attrs, sizeof(attrs)); out->header.len = sizeof(fuse_out_header) + sizeof(attrs); })); @@ -392,17 +391,17 @@ TEST_F(Listxattr, system) char attrs[28] = "user.foo\0system.x\0user.bang"; expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); - expect_listxattr(ino, 0, ReturnImmediate([&](auto in, auto out) { - out->header.unique = in->header.unique; - out->body.listxattr.size = sizeof(attrs); - SET_OUT_HEADER_LEN(out, listxattr); - })); + expect_listxattr(ino, 0, + ReturnImmediate([&](auto in __unused, auto out) { + out->body.listxattr.size = sizeof(attrs); + SET_OUT_HEADER_LEN(out, listxattr); + }) + ); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Fri Mar 15 18:06:53 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CEB421528DF5 for ; Fri, 15 Mar 2019 18:06:53 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 70A2B747A9; Fri, 15 Mar 2019 18:06:53 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 640DDDD25; Fri, 15 Mar 2019 18:06:53 +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 x2FI6rxw080256; Fri, 15 Mar 2019 18:06:53 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FI6qin080250; Fri, 15 Mar 2019 18:06:52 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903151806.x2FI6qin080250@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 18:06:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345195 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345195 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 70A2B747A9 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.968,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 18:06:54 -0000 Author: asomers Date: Fri Mar 15 18:06:51 2019 New Revision: 345195 URL: https://svnweb.freebsd.org/changeset/base/345195 Log: fuse(4): add tests for ENOSYS special cases PR: 236557 Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/access.cc projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc projects/fuse2/tests/sys/fs/fuse/xattr.cc Modified: projects/fuse2/tests/sys/fs/fuse/access.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/access.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/access.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -41,6 +41,18 @@ using namespace testing; class Access: public FuseTest { public: +void expect_access(uint64_t ino, mode_t access_mode, int error) +{ + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_ACCESS && + in->header.nodeid == ino && + in->body.access.mask == access_mode); + }, Eq(true)), + _) + ).WillOnce(Invoke(ReturnErrno(error))); +} + void expect_lookup(const char *relpath, uint64_t ino) { FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); @@ -59,20 +71,33 @@ TEST_F(Access, DISABLED_eaccess) mode_t access_mode = X_OK; expect_lookup(RELPATH, ino); - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_ACCESS && - in->header.nodeid == ino && - in->body.access.mask == access_mode); - }, Eq(true)), - _) - ).WillOnce(Invoke(ReturnErrno(EACCES))); + expect_access(ino, access_mode, EACCES); - ASSERT_NE(0, access(FULLPATH, access_mode)); ASSERT_EQ(EACCES, errno); } +/* + * If the filesystem returns ENOSYS, then it is treated as a permanent success, + * and subsequent VOP_ACCESS calls will succeed automatically without querying + * the daemon. + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236291 */ +TEST_F(Access, DISABLED_enosys) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + mode_t access_mode = R_OK; + + expect_lookup(RELPATH, ino); + expect_access(ino, access_mode, ENOSYS); + + ASSERT_EQ(0, access(FULLPATH, access_mode)) << strerror(errno); + ASSERT_EQ(0, access(FULLPATH, access_mode)) << strerror(errno); +} + /* The successful case of FUSE_ACCESS. */ /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236291 */ TEST_F(Access, DISABLED_ok) @@ -83,14 +108,7 @@ TEST_F(Access, DISABLED_ok) mode_t access_mode = R_OK; expect_lookup(RELPATH, ino); - EXPECT_CALL(*m_mock, process( - ResultOf([=](auto in) { - return (in->header.opcode == FUSE_ACCESS && - in->header.nodeid == ino && - in->body.access.mask == access_mode); - }, Eq(true)), - _) - ).WillOnce(Invoke(ReturnErrno(0))); + expect_access(ino, access_mode, 0); ASSERT_EQ(0, access(FULLPATH, access_mode)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -114,6 +114,7 @@ TEST_F(Create, eexist) * to FUSE_MKNOD/FUSE_OPEN */ /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236236 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ TEST_F(Create, DISABLED_Enosys) { const char FULLPATH[] = "mountpoint/some_file.txt"; Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -134,6 +134,35 @@ TEST_F(Flush, DISABLED_eio) ASSERT_TRUE(0 == close(fd) || errno == EIO) << strerror(errno); } +/* + * If the filesystem returns ENOSYS, it will be treated as success and + * no more FUSE_FLUSH operations will be sent to the daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236405 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Flush, DISABLED_enosys) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd, fd2; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + /* On the 2nd close, FUSE_FLUSH won't be sent at all */ + expect_flush(ino, 1, 0, ReturnErrno(ENOSYS)); + expect_release(); + + fd = open(FULLPATH, O_WRONLY); + EXPECT_LE(0, fd) << strerror(errno); + + fd2 = dup(fd); + + EXPECT_EQ(0, close(fd2)) << strerror(errno); + EXPECT_EQ(0, close(fd)) << strerror(errno); +} + /* A FUSE_FLUSH should be sent on close(2) */ /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236405 */ TEST_F(Flush, DISABLED_flush) Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -56,7 +56,6 @@ void expect_fsync(uint64_t ino, uint32_t flags, int er ResultOf([=](auto in) { return (in->header.opcode == FUSE_FSYNC && in->header.nodeid == ino && - //(pid_t)in->header.pid == getpid() && in->body.fsync.fh == FH && in->body.fsync.fsync_flags == flags); }, Eq(true)), @@ -174,6 +173,39 @@ TEST_F(Fsync, DISABLED_eio) /* Deliberately leak fd. close(2) will be tested in release.cc */ } + +/* + * If the filesystem returns ENOSYS, it will be treated as success and + * subsequent calls to VOP_FSYNC will succeed automatically without being sent + * to the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Fsync, DISABLED_enosys) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + ssize_t bufsize = strlen(CONTENTS); + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, 0); + expect_write(ino, bufsize, CONTENTS); + expect_fsync(ino, FUSE_FSYNC_FDATASYNC, ENOSYS); + + fd = open(FULLPATH, O_RDWR); + ASSERT_LE(0, fd) << strerror(errno); + ASSERT_EQ(bufsize, write(fd, CONTENTS, bufsize)) << strerror(errno); + EXPECT_EQ(0, fdatasync(fd)); + + /* Subsequent calls shouldn't query the daemon*/ + EXPECT_EQ(0, fdatasync(fd)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ TEST_F(Fsync, DISABLED_fdatasync) Modified: projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -119,6 +119,34 @@ TEST_F(FsyncDir, DISABLED_eio) /* Deliberately leak fd. close(2) will be tested in release.cc */ } +/* + * If the filesystem returns ENOSYS, it will be treated as success and + * subsequent calls to VOP_FSYNC will succeed automatically without being sent + * to the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(FsyncDir, DISABLED_enosys) +{ + const char FULLPATH[] = "mountpoint/some_dir"; + const char RELPATH[] = "some_dir"; + uint64_t ino = 42; + int fd; + + expect_lookup(RELPATH, ino); + expect_opendir(ino); + expect_fsyncdir(ino, FUSE_FSYNC_FDATASYNC, ENOSYS); + + fd = open(FULLPATH, O_DIRECTORY); + ASSERT_LE(0, fd) << strerror(errno); + EXPECT_EQ(0, fsync(fd)) << strerror(errno); + + /* Subsequent calls shouldn't query the daemon*/ + EXPECT_EQ(0, fsync(fd)) << strerror(errno); + + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + /* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236474 */ TEST_F(FsyncDir, DISABLED_fsyncdata) { Modified: projects/fuse2/tests/sys/fs/fuse/xattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 17:19:36 2019 (r345194) +++ projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 18:06:51 2019 (r345195) @@ -130,6 +130,32 @@ TEST_F(Getxattr, enoattr) } /* + * If the filesystem returns ENOSYS, then it will be treated as a permanent + * failure and all future VOP_GETEXTATTR calls will fail with EOPNOTSUPP + * without querying the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Getxattr, DISABLED_enosys) +{ + char data[80]; + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_getxattr(ino, "user.foo", ReturnErrno(ENOSYS)); + + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(-1, r); + EXPECT_EQ(EOPNOTSUPP, errno); + + /* Subsequent attempts should not query the filesystem at all */ + r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); + ASSERT_EQ(-1, r); + EXPECT_EQ(EOPNOTSUPP, errno); +} + +/* * On FreeBSD, if the user passes an insufficiently large buffer then the * filesystem is supposed to copy as much of the attribute's value as will fit. * @@ -228,6 +254,28 @@ TEST_F(Getxattr, user) } /* + * If the filesystem returns ENOSYS, then it will be treated as a permanent + * failure and all future VOP_LISTEXTATTR calls will fail with EOPNOTSUPP + * without querying the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Listxattr, DISABLED_enosys) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_listxattr(ino, 0, ReturnErrno(ENOSYS)); + + ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); + EXPECT_EQ(EOPNOTSUPP, errno); + + /* Subsequent attempts should not query the filesystem at all */ + ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); + EXPECT_EQ(EOPNOTSUPP, errno); +} + +/* * Listing extended attributes failed because they aren't configured on this * filesystem */ @@ -425,6 +473,28 @@ TEST_F(Removexattr, enoattr) ASSERT_EQ(ENOATTR, errno); } +/* + * If the filesystem returns ENOSYS, then it will be treated as a permanent + * failure and all future VOP_DELETEEXTATTR calls will fail with EOPNOTSUPP + * without querying the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Removexattr, DISABLED_enosys) +{ + uint64_t ino = 42; + int ns = EXTATTR_NAMESPACE_USER; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_removexattr(ino, "user.foo", ENOSYS); + + ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo")); + EXPECT_EQ(EOPNOTSUPP, errno); + + /* Subsequent attempts should not query the filesystem at all */ + ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo")); + EXPECT_EQ(EOPNOTSUPP, errno); +} + /* Successfully remove a user xattr */ TEST_F(Removexattr, user) { @@ -449,6 +519,33 @@ TEST_F(Removexattr, system) ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo")) << strerror(errno); +} + +/* + * If the filesystem returns ENOSYS, then it will be treated as a permanent + * failure and all future VOP_SETEXTATTR calls will fail with EOPNOTSUPP + * without querying the filesystem daemon + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236557 */ +TEST_F(Setxattr, DISABLED_enosys) +{ + uint64_t ino = 42; + const char value[] = "whatever"; + ssize_t value_len = strlen(value) + 1; + int ns = EXTATTR_NAMESPACE_USER; + ssize_t r; + + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOSYS)); + + r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); + ASSERT_EQ(-1, r); + EXPECT_EQ(EOPNOTSUPP, errno); + + /* Subsequent attempts should not query the filesystem at all */ + r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); + ASSERT_EQ(-1, r); + EXPECT_EQ(EOPNOTSUPP, errno); } /* From owner-svn-src-projects@freebsd.org Fri Mar 15 18:50:37 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 720F7152A2BA for ; Fri, 15 Mar 2019 18:50:37 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0E6217639C; Fri, 15 Mar 2019 18:50:37 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E53DEE467; Fri, 15 Mar 2019 18:50:36 +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 x2FIoaXR001667; Fri, 15 Mar 2019 18:50:36 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FIoas1001666; Fri, 15 Mar 2019 18:50:36 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903151850.x2FIoas1001666@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 18:50:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345198 - projects/fuse2/share/man/man9 X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/share/man/man9 X-SVN-Commit-Revision: 345198 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0E6217639C X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.98)[-0.981,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 18:50:37 -0000 Author: asomers Date: Fri Mar 15 18:50:36 2019 New Revision: 345198 URL: https://svnweb.freebsd.org/changeset/base/345198 Log: VOP_INACTIVE(9): clarify wording Reviewed by: kib, 0mp MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19596 Modified: projects/fuse2/share/man/man9/VOP_INACTIVE.9 Modified: projects/fuse2/share/man/man9/VOP_INACTIVE.9 ============================================================================== --- projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:00 2019 (r345197) +++ projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:36 2019 (r345198) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 27, 2014 +.Dd March 15, 2019 .Dt VOP_INACTIVE 9 .Os .Sh NAME @@ -50,13 +50,16 @@ The vnode being reclaimed. .El .Pp .Fn VOP_INACTIVE -is called when the kernel is no longer using the vnode. +is usually called when the kernel is no longer using the vnode. +However, there is no guarantee that it will be called at all, for example if +the last reference was dropped while the vnode lock could not be upgraded +to exclusive without sleeping. This may be because the reference count reaches zero or it may be that the file system is being forcibly unmounted while there are open files. -It can be used to reclaim space for +It can be used to reclaim space on the last close of an .Sq open but deleted -files. +file. .Pp .Fn VOP_RECLAIM is called when a vnode is being reused for a different file system. From owner-svn-src-projects@freebsd.org Fri Mar 15 19:22:53 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ED35D152C53A for ; Fri, 15 Mar 2019 19:22:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (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 E7C0E77901; Fri, 15 Mar 2019 19:22:51 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id x2FJMjQp088802 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 15 Mar 2019 21:22:48 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua x2FJMjQp088802 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id x2FJMjNQ088801; Fri, 15 Mar 2019 21:22:45 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 15 Mar 2019 21:22:45 +0200 From: Konstantin Belousov To: Alan Somers Cc: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: Re: svn commit: r345198 - projects/fuse2/share/man/man9 Message-ID: <20190315192245.GD96870@kib.kiev.ua> References: <201903151850.x2FIoas1001666@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201903151850.x2FIoas1001666@repo.freebsd.org> User-Agent: Mutt/1.11.3 (2019-02-01) X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on tom.home X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 19:22:53 -0000 On Fri, Mar 15, 2019 at 06:50:36PM +0000, Alan Somers wrote: > Author: asomers > Date: Fri Mar 15 18:50:36 2019 > New Revision: 345198 > URL: https://svnweb.freebsd.org/changeset/base/345198 > > Log: > VOP_INACTIVE(9): clarify wording > > Reviewed by: kib, 0mp > MFC after: 2 weeks > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D19596 > > Modified: > projects/fuse2/share/man/man9/VOP_INACTIVE.9 > > Modified: projects/fuse2/share/man/man9/VOP_INACTIVE.9 > ============================================================================== > --- projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:00 2019 (r345197) > +++ projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:36 2019 (r345198) > @@ -28,7 +28,7 @@ > .\" > .\" $FreeBSD$ > .\" > -.Dd July 27, 2014 > +.Dd March 15, 2019 > .Dt VOP_INACTIVE 9 > .Os > .Sh NAME > @@ -50,13 +50,16 @@ The vnode being reclaimed. > .El > .Pp > .Fn VOP_INACTIVE > -is called when the kernel is no longer using the vnode. > +is usually called when the kernel is no longer using the vnode. > +However, there is no guarantee that it will be called at all, for example if > +the last reference was dropped while the vnode lock could not be upgraded > +to exclusive without sleeping. > This may be > because the reference count reaches zero or it may be that the > file system is being forcibly unmounted while there are open files. > -It can be used to reclaim space for > +It can be used to reclaim space on the last close of an > .Sq open but deleted > -files. > +file. > .Pp > .Fn VOP_RECLAIM > is called when a vnode is being reused for a different file system. Why did you committed to the branch ? I do not think it is on-topic there, and would like to see the wording fixes propagated back to stable branches. I.e. even if you merge this to HEAD in some future, I do not think it is easy to merge to stable-XX from there as part of the large commit. From owner-svn-src-projects@freebsd.org Fri Mar 15 19:56:24 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8AA2D152D259 for ; Fri, 15 Mar 2019 19:56:24 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DAF5280D5B; Fri, 15 Mar 2019 19:56:23 +0000 (UTC) (envelope-from asomers@gmail.com) Received: by mail-lj1-f180.google.com with SMTP id n18so7041048ljg.11; Fri, 15 Mar 2019 12:56:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=71eaHvyw1d63bZaKJaYf71N0bfgDtIW8bKXnQoQk4YQ=; b=XPbpDWOCXYAgLeuyee+hrCgVtRNrTjoX1aRxIY15Lxe/O48gpa7iSc9+r5d99VChpy PzDaCAbNbkQ53VcX7yMrmUt+pYYLaRmxy8lPiBxJLMO2VCY5jGSZRJve12okHAkuPrWH /+4oibxlPnA3mG7i1EbhKPy97VVXi1thjLI6cQU5qKJ8p6ZRAZGuDLhL4a1A0Jm+JA20 yEcn1zZy+ndhai5u/OFDQ5a3MY5kn81hOaa6lK9fg6im8gJRe7vSk38FLED7xZNUhW3M ndQmAUcIbl0zn8PQeZHehkTwKSgvfGLqkJjeEUL1V/8lLQAm7NJobWlkXHp7KTKjyQuG dtMQ== X-Gm-Message-State: APjAAAUBBamWVTRmDxk0edW2BGCmtlHBhYbJSoFSprJsB9RKsmvQTdda 2oqvKSN2AsyRIGs1+epvjlU2v/XqxyJmzRn5Tuk1tA== X-Google-Smtp-Source: APXvYqxlAwKgBgzoUkudslac1pl7BzYvRsu5rLuSm+pnBOTpS6e+6hrc+RQbdw7YlI7+OmIfYq+QV6zdsvNE/T9JeZU= X-Received: by 2002:a2e:9c10:: with SMTP id s16mr3215796lji.20.1552677854396; Fri, 15 Mar 2019 12:24:14 -0700 (PDT) MIME-Version: 1.0 References: <201903151850.x2FIoas1001666@repo.freebsd.org> <20190315192245.GD96870@kib.kiev.ua> In-Reply-To: <20190315192245.GD96870@kib.kiev.ua> From: Alan Somers Date: Fri, 15 Mar 2019 13:24:02 -0600 Message-ID: Subject: Re: svn commit: r345198 - projects/fuse2/share/man/man9 To: Konstantin Belousov Cc: src-committers , svn-src-projects@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: DAF5280D5B X-Spamd-Bar: ------ Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-6.97 / 15.00]; REPLY(-4.00)[]; NEURAL_HAM_SHORT(-0.97)[-0.969,0]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 19:56:24 -0000 On Fri, Mar 15, 2019 at 1:22 PM Konstantin Belousov wrote: > > On Fri, Mar 15, 2019 at 06:50:36PM +0000, Alan Somers wrote: > > Author: asomers > > Date: Fri Mar 15 18:50:36 2019 > > New Revision: 345198 > > URL: https://svnweb.freebsd.org/changeset/base/345198 > > > > Log: > > VOP_INACTIVE(9): clarify wording > > > > Reviewed by: kib, 0mp > > MFC after: 2 weeks > > Sponsored by: The FreeBSD Foundation > > Differential Revision: https://reviews.freebsd.org/D19596 > > > > Modified: > > projects/fuse2/share/man/man9/VOP_INACTIVE.9 > > > > Modified: projects/fuse2/share/man/man9/VOP_INACTIVE.9 > > ============================================================================== > > --- projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:00 2019 (r345197) > > +++ projects/fuse2/share/man/man9/VOP_INACTIVE.9 Fri Mar 15 18:50:36 2019 (r345198) > > @@ -28,7 +28,7 @@ > > .\" > > .\" $FreeBSD$ > > .\" > > -.Dd July 27, 2014 > > +.Dd March 15, 2019 > > .Dt VOP_INACTIVE 9 > > .Os > > .Sh NAME > > @@ -50,13 +50,16 @@ The vnode being reclaimed. > > .El > > .Pp > > .Fn VOP_INACTIVE > > -is called when the kernel is no longer using the vnode. > > +is usually called when the kernel is no longer using the vnode. > > +However, there is no guarantee that it will be called at all, for example if > > +the last reference was dropped while the vnode lock could not be upgraded > > +to exclusive without sleeping. > > This may be > > because the reference count reaches zero or it may be that the > > file system is being forcibly unmounted while there are open files. > > -It can be used to reclaim space for > > +It can be used to reclaim space on the last close of an > > .Sq open but deleted > > -files. > > +file. > > .Pp > > .Fn VOP_RECLAIM > > is called when a vnode is being reused for a different file system. > Why did you committed to the branch ? I do not think it is on-topic there, > and would like to see the wording fixes propagated back to stable branches. > I.e. even if you merge this to HEAD in some future, I do not think it is > easy to merge to stable-XX from there as part of the large commit. Because I forgot that I had the branch checked out instead of head. I'll merge it to head soon, and then it will be treated like any other head commit. -Alan From owner-svn-src-projects@freebsd.org Fri Mar 15 20:16:36 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C45DB152D92E for ; Fri, 15 Mar 2019 20:16:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 686CD8180D; Fri, 15 Mar 2019 20:16:36 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B977F43F; Fri, 15 Mar 2019 20:16:36 +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 x2FKGa1L048686; Fri, 15 Mar 2019 20:16:36 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FKGaqb048685; Fri, 15 Mar 2019 20:16:36 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903152016.x2FKGaqb048685@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 20:16:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345201 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345201 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 686CD8180D X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.96)[-0.965,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 20:16:37 -0000 Author: asomers Date: Fri Mar 15 20:16:35 2019 New Revision: 345201 URL: https://svnweb.freebsd.org/changeset/base/345201 Log: fuse(4): add tests for the FUSE_ASYNC_READ option Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/read.cc Modified: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 18:59:04 2019 (r345200) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 20:16:35 2019 (r345201) @@ -55,6 +55,7 @@ void expect_lookup(const char *relpath, uint64_t ino) }; class AioRead: public Read { +public: virtual void SetUp() { const char *node = "vfs.aio.enable_unsafe"; int val = 0; @@ -69,6 +70,13 @@ virtual void SetUp() { } }; +class AsyncRead: public AioRead { + virtual void SetUp() { + m_init_flags = FUSE_ASYNC_READ; + AioRead::SetUp(); + } +}; + class ReadAhead: public Read, public WithParamInterface { virtual void SetUp() { m_maxreadahead = GetParam(); @@ -105,6 +113,159 @@ TEST_F(AioRead, aio_read) ASSERT_EQ(0, aio_read(&iocb)) << strerror(errno); ASSERT_EQ(bufsize, aio_waitcomplete(&piocb, NULL)) << strerror(errno); ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * Without the FUSE_ASYNC_READ mount option, fuse(4) should ensure that there + * is at most one outstanding read operation per file handle + */ +TEST_F(AioRead, async_read_disabled) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = 50; + char buf0[bufsize], buf1[bufsize]; + off_t off0 = 0; + off_t off1 = 4096; + struct aiocb iocb0, iocb1; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == FH && + in->body.read.offset == (uint64_t)off0 && + in->body.read.size == bufsize); + }, Eq(true)), + _) + ).WillOnce(Invoke([](auto in __unused, auto &out __unused) { + /* Filesystem is slow to respond */ + })); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == FH && + in->body.read.offset == (uint64_t)off1 && + in->body.read.size == bufsize); + }, Eq(true)), + _) + ).Times(0); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + /* + * Submit two AIO read requests, and respond to neither. If the + * filesystem ever gets the second read request, then we failed to + * limit outstanding reads. + */ + iocb0.aio_nbytes = bufsize; + iocb0.aio_fildes = fd; + iocb0.aio_buf = buf0; + iocb0.aio_offset = off0; + iocb0.aio_sigevent.sigev_notify = SIGEV_NONE; + ASSERT_EQ(0, aio_read(&iocb0)) << strerror(errno); + + iocb1.aio_nbytes = bufsize; + iocb1.aio_fildes = fd; + iocb1.aio_buf = buf1; + iocb1.aio_offset = off1; + iocb1.aio_sigevent.sigev_notify = SIGEV_NONE; + ASSERT_EQ(0, aio_read(&iocb1)) << strerror(errno); + + /* + * Sleep for awhile to make sure the kernel has had a chance to issue + * the second read, even though the first has not yet returned + */ + usleep(250'000); + + /* Deliberately leak iocbs */ + /* Deliberately leak fd. close(2) will be tested in release.cc */ +} + +/* + * With the FUSE_ASYNC_READ mount option, fuse(4) may issue multiple + * simultaneous read requests on the same file handle. + */ +/* + * Disabled because we don't yet implement FUSE_ASYNC_READ. No bugzilla + * entry, because that's a feature request, not a bug. + */ +TEST_F(AsyncRead, DISABLED_async_read) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + uint64_t ino = 42; + int fd; + ssize_t bufsize = 50; + char buf0[bufsize], buf1[bufsize]; + off_t off0 = 0; + off_t off1 = 4096; + struct aiocb iocb0, iocb1; + + expect_lookup(RELPATH, ino); + expect_open(ino, 0, 1); + expect_getattr(ino, bufsize); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == FH && + in->body.read.offset == (uint64_t)off0 && + in->body.read.size == bufsize); + }, Eq(true)), + _) + ).WillOnce(Invoke([](auto in __unused, auto &out __unused) { + /* Filesystem is slow to respond */ + })); + EXPECT_CALL(*m_mock, process( + ResultOf([=](auto in) { + return (in->header.opcode == FUSE_READ && + in->header.nodeid == ino && + in->body.read.fh == FH && + in->body.read.offset == (uint64_t)off1 && + in->body.read.size == bufsize); + }, Eq(true)), + _) + ).WillOnce(Invoke([](auto in __unused, auto &out __unused) { + /* Filesystem is slow to respond */ + })); + + fd = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd) << strerror(errno); + + /* + * Submit two AIO read requests, but respond to neither. Ensure that + * we received both. + */ + iocb0.aio_nbytes = bufsize; + iocb0.aio_fildes = fd; + iocb0.aio_buf = buf0; + iocb0.aio_offset = off0; + iocb0.aio_sigevent.sigev_notify = SIGEV_NONE; + ASSERT_EQ(0, aio_read(&iocb0)) << strerror(errno); + + iocb1.aio_nbytes = bufsize; + iocb1.aio_fildes = fd; + iocb1.aio_buf = buf1; + iocb1.aio_offset = off1; + iocb1.aio_sigevent.sigev_notify = SIGEV_NONE; + ASSERT_EQ(0, aio_read(&iocb1)) << strerror(errno); + + /* + * Sleep for awhile to make sure the kernel has had a chance to issue + * both reads. + */ + usleep(250'000); + + /* Deliberately leak iocbs */ /* Deliberately leak fd. close(2) will be tested in release.cc */ } From owner-svn-src-projects@freebsd.org Fri Mar 15 22:47:27 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1016015325DB for ; Fri, 15 Mar 2019 22:47:27 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A70E2878DD; Fri, 15 Mar 2019 22:47:26 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9539418DAD; Fri, 15 Mar 2019 22:47:26 +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 x2FMlQ26030913; Fri, 15 Mar 2019 22:47:26 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FMlLKM030885; Fri, 15 Mar 2019 22:47:21 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201903152247.x2FMlLKM030885@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 15 Mar 2019 22:47:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345207 - projects/fuse2/tests/sys/fs/fuse X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/fuse2/tests/sys/fs/fuse X-SVN-Commit-Revision: 345207 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: A70E2878DD X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.98)[-0.979,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 22:47:27 -0000 Author: asomers Date: Fri Mar 15 22:47:20 2019 New Revision: 345207 URL: https://svnweb.freebsd.org/changeset/base/345207 Log: fuse(4): add tests for the FOPEN_KEEP_CACHE option PR: 236560 Sponsored by: The FreeBSD Foundation Modified: projects/fuse2/tests/sys/fs/fuse/access.cc projects/fuse2/tests/sys/fs/fuse/create.cc projects/fuse2/tests/sys/fs/fuse/destroy.cc projects/fuse2/tests/sys/fs/fuse/flush.cc projects/fuse2/tests/sys/fs/fuse/fsync.cc projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc projects/fuse2/tests/sys/fs/fuse/getattr.cc projects/fuse2/tests/sys/fs/fuse/interrupt.cc projects/fuse2/tests/sys/fs/fuse/link.cc projects/fuse2/tests/sys/fs/fuse/locks.cc projects/fuse2/tests/sys/fs/fuse/mkdir.cc projects/fuse2/tests/sys/fs/fuse/open.cc projects/fuse2/tests/sys/fs/fuse/opendir.cc projects/fuse2/tests/sys/fs/fuse/read.cc projects/fuse2/tests/sys/fs/fuse/readdir.cc projects/fuse2/tests/sys/fs/fuse/readlink.cc projects/fuse2/tests/sys/fs/fuse/release.cc projects/fuse2/tests/sys/fs/fuse/releasedir.cc projects/fuse2/tests/sys/fs/fuse/rename.cc projects/fuse2/tests/sys/fs/fuse/unlink.cc projects/fuse2/tests/sys/fs/fuse/utils.cc projects/fuse2/tests/sys/fs/fuse/utils.hh projects/fuse2/tests/sys/fs/fuse/write.cc projects/fuse2/tests/sys/fs/fuse/xattr.cc Modified: projects/fuse2/tests/sys/fs/fuse/access.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/access.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/access.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -55,7 +55,7 @@ void expect_access(uint64_t ino, mode_t access_mode, i void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/create.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/create.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -288,7 +288,7 @@ TEST_F(Create, DISABLED_entry_cache_negative_purge) ASSERT_LE(0, fd) << strerror(errno); /* Finally, a subsequent lookup should query the daemon */ - expect_lookup(RELPATH, ino, S_IFREG | mode, 1); + expect_lookup(RELPATH, ino, S_IFREG | mode, 0, 1); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); /* Deliberately leak fd. close(2) will be tested in release.cc */ Modified: projects/fuse2/tests/sys/fs/fuse/destroy.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/destroy.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/destroy.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -72,7 +72,7 @@ TEST_F(Destroy, ok) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 2); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 2); expect_forget(1, 1); expect_forget(ino, 2); expect_destroy(0); Modified: projects/fuse2/tests/sys/fs/fuse/flush.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/flush.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -57,7 +57,7 @@ void expect_flush(uint64_t ino, int times, pid_t lo, P void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } /* Modified: projects/fuse2/tests/sys/fs/fuse/fsync.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/fsync.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -65,7 +65,7 @@ void expect_fsync(uint64_t ino, uint32_t flags, int er void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } void expect_write(uint64_t ino, uint64_t size, const void *contents) Modified: projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/fsyncdir.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -66,7 +66,7 @@ void expect_fsyncdir(uint64_t ino, uint32_t flags, int void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/getattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/getattr.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/getattr.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -88,7 +88,7 @@ TEST_F(Getattr, attr_cache_timeout) */ long timeout_ns = 250'000'000; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 2); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 2); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && @@ -116,7 +116,7 @@ TEST_F(Getattr, enoent) struct stat sb; const uint64_t ino = 42; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && @@ -135,7 +135,7 @@ TEST_F(Getattr, ok) const uint64_t ino = 42; struct stat sb; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 1, 1); EXPECT_CALL(*m_mock, process( ResultOf([](auto in) { return (in->header.opcode == FUSE_GETATTR && Modified: projects/fuse2/tests/sys/fs/fuse/interrupt.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/interrupt.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/interrupt.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -66,7 +66,7 @@ Interrupt(): m_child(NULL) {}; void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } /* Modified: projects/fuse2/tests/sys/fs/fuse/link.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/link.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/link.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -41,7 +41,7 @@ class Link: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/locks.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/locks.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -46,7 +46,7 @@ class Fallback: public FuseTest { (public) void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/mkdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/mkdir.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/mkdir.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -143,7 +143,7 @@ TEST_F(Mkdir, DISABLED_entry_cache_negative_purge) ASSERT_EQ(0, mkdir(FULLPATH, mode)) << strerror(errno); /* Finally, a subsequent lookup should query the daemon */ - expect_lookup(RELPATH, ino, S_IFDIR | mode, 1); + expect_lookup(RELPATH, ino, S_IFDIR | mode, 0, 1); ASSERT_EQ(0, access(FULLPATH, F_OK)) << strerror(errno); } Modified: projects/fuse2/tests/sys/fs/fuse/open.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/open.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/open.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -48,7 +48,7 @@ void test_ok(int os_flags, int fuse_flags) { uint64_t ino = 42; int fd; - FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && @@ -92,7 +92,7 @@ TEST_F(Open, enoent) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && @@ -114,7 +114,7 @@ TEST_F(Open, eperm) const char RELPATH[] = "some_file.txt"; uint64_t ino = 42; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { return (in->header.opcode == FUSE_OPEN && Modified: projects/fuse2/tests/sys/fs/fuse/opendir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/opendir.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/opendir.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -42,7 +42,7 @@ class Opendir: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/read.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/read.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -48,9 +48,9 @@ using namespace testing; class Read: public FuseTest { public: -void expect_lookup(const char *relpath, uint64_t ino) +void expect_lookup(const char *relpath, uint64_t ino, uint64_t size) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, size, 1); } }; @@ -97,7 +97,7 @@ TEST_F(AioRead, aio_read) char buf[bufsize]; struct aiocb iocb, *piocb; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); expect_read(ino, 0, bufsize, bufsize, CONTENTS); @@ -132,7 +132,7 @@ TEST_F(AioRead, async_read_disabled) off_t off1 = 4096; struct aiocb iocb0, iocb1; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); EXPECT_CALL(*m_mock, process( @@ -210,7 +210,7 @@ TEST_F(AsyncRead, DISABLED_async_read) off_t off1 = 4096; struct aiocb iocb0, iocb1; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); EXPECT_CALL(*m_mock, process( @@ -279,7 +279,7 @@ TEST_F(Read, direct_io_read_nothing) uint64_t offset = 100; char buf[80]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, offset + 1000); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, offset + 1000); @@ -305,7 +305,7 @@ TEST_F(Read, direct_io_pread) ssize_t bufsize = strlen(CONTENTS); char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, offset + bufsize); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, offset + bufsize); expect_read(ino, offset, bufsize, bufsize, CONTENTS); @@ -334,7 +334,7 @@ TEST_F(Read, direct_io_short_read) ssize_t halfbufsize = bufsize / 2; char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, offset + bufsize); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, offset + bufsize); expect_read(ino, offset, bufsize, halfbufsize, CONTENTS); @@ -358,7 +358,7 @@ TEST_F(Read, eio) ssize_t bufsize = strlen(CONTENTS); char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); EXPECT_CALL(*m_mock, process( @@ -376,6 +376,79 @@ TEST_F(Read, eio) /* Deliberately leak fd. close(2) will be tested in release.cc */ } +/* + * With the keep_cache option, the kernel may keep its read cache across + * multiple open(2)s. + */ +/* https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236560 */ +TEST_F(Read, DISABLED_keep_cache) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd0, fd1; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, bufsize, 2); + expect_open(ino, FOPEN_KEEP_CACHE, 1); + expect_getattr(ino, bufsize); + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + + fd0 = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd0) << strerror(errno); + ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); + + fd1 = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd1) << strerror(errno); + + /* + * This read should be serviced by cache, even though it's on the other + * file descriptor + */ + ASSERT_EQ(bufsize, read(fd1, buf, bufsize)) << strerror(errno); + + /* Deliberately leak fd0 and fd1. */ +} + +/* + * Without the keep_cache option, the kernel should drop its read caches on + * every open + */ +TEST_F(Read, keep_cache_disabled) +{ + const char FULLPATH[] = "mountpoint/some_file.txt"; + const char RELPATH[] = "some_file.txt"; + const char *CONTENTS = "abcdefgh"; + uint64_t ino = 42; + int fd0, fd1; + ssize_t bufsize = strlen(CONTENTS); + char buf[bufsize]; + + FuseTest::expect_lookup(RELPATH, ino, S_IFREG | 0644, bufsize, 2); + expect_open(ino, FOPEN_KEEP_CACHE, 1); + expect_getattr(ino, bufsize); + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + + fd0 = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd0) << strerror(errno); + ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); + + fd1 = open(FULLPATH, O_RDONLY); + ASSERT_LE(0, fd1) << strerror(errno); + + /* + * This read should not be serviced by cache, even though it's on the + * original file descriptor + */ + expect_read(ino, 0, bufsize, bufsize, CONTENTS); + ASSERT_EQ(0, lseek(fd0, 0, SEEK_SET)) << strerror(errno); + ASSERT_EQ(bufsize, read(fd0, buf, bufsize)) << strerror(errno); + + /* Deliberately leak fd0 and fd1. */ +} + TEST_F(Read, mmap) { const char FULLPATH[] = "mountpoint/some_file.txt"; @@ -390,7 +463,7 @@ TEST_F(Read, mmap) len = getpagesize(); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); /* mmap may legitimately try to read more data than is available */ @@ -434,7 +507,7 @@ TEST_F(Read, o_direct) ssize_t bufsize = strlen(CONTENTS); char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); expect_read(ino, 0, bufsize, bufsize, CONTENTS); @@ -471,7 +544,7 @@ TEST_F(Read, pread) ssize_t bufsize = strlen(CONTENTS); char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, offset + bufsize); expect_open(ino, 0, 1); expect_getattr(ino, offset + bufsize); expect_read(ino, offset, bufsize, bufsize, CONTENTS); @@ -494,7 +567,7 @@ TEST_F(Read, read) ssize_t bufsize = strlen(CONTENTS); char buf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); expect_read(ino, 0, bufsize, bufsize, CONTENTS); @@ -504,6 +577,7 @@ TEST_F(Read, read) ASSERT_EQ(bufsize, read(fd, buf, bufsize)) << strerror(errno); ASSERT_EQ(0, memcmp(buf, CONTENTS, bufsize)); + /* Deliberately leak fd. close(2) will be tested in release.cc */ } @@ -527,7 +601,7 @@ TEST_F(Read, default_readahead) ASSERT_NE(NULL, contents); memmove(contents, CONTENTS0, strlen(CONTENTS0)); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, filesize); expect_open(ino, 0, 1); expect_getattr(ino, filesize); expect_read(ino, 0, default_maxreadahead, default_maxreadahead, @@ -558,7 +632,7 @@ TEST_F(Read, sendfile) int sp[2]; off_t sbytes; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); /* Like mmap, sendfile may request more data than is available */ @@ -604,7 +678,7 @@ TEST_F(Read, DISABLED_sendfile_eio) int sp[2]; off_t sbytes; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); EXPECT_CALL(*m_mock, process( @@ -646,7 +720,7 @@ TEST_P(ReadAhead, DISABLED_readahead) { ASSERT_NE(NULL, contents); memmove(contents, CONTENTS0, strlen(CONTENTS0)); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, filesize); expect_open(ino, 0, 1); expect_getattr(ino, filesize); /* fuse(4) should only read ahead the allowed amount */ Modified: projects/fuse2/tests/sys/fs/fuse/readdir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readdir.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/readdir.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -43,7 +43,7 @@ class Readdir: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1); } void expect_readdir(uint64_t ino, uint64_t off, vector &ents) Modified: projects/fuse2/tests/sys/fs/fuse/readlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/readlink.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/readlink.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -41,7 +41,7 @@ class Readlink: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFLNK | 0777, 1); + FuseTest::expect_lookup(relpath, ino, S_IFLNK | 0777, 0, 1); } }; Modified: projects/fuse2/tests/sys/fs/fuse/release.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/release.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -43,7 +43,7 @@ class Release: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino, int times) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, times); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, times); } }; Modified: projects/fuse2/tests/sys/fs/fuse/releasedir.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/releasedir.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/releasedir.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -42,7 +42,7 @@ class ReleaseDir: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino) { - FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 1); + FuseTest::expect_lookup(relpath, ino, S_IFDIR | 0755, 0, 1); } void expect_releasedir(uint64_t ino, ProcessMockerT r) Modified: projects/fuse2/tests/sys/fs/fuse/rename.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/rename.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/rename.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -62,7 +62,7 @@ TEST_F(Rename, einval) const char RELSRC[] = "src"; uint64_t src_ino = 42; - expect_lookup(RELSRC, src_ino, S_IFDIR | 0755, 2); + expect_lookup(RELSRC, src_ino, S_IFDIR | 0755, 0, 2); EXPECT_LOOKUP(src_ino, RELDST).WillOnce(Invoke(ReturnErrno(ENOENT))); ASSERT_NE(0, rename(FULLSRC, FULLDST)); @@ -103,7 +103,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative) */ struct timespec entry_valid = {.tv_sec = 0, .tv_nsec = 0}; - expect_lookup(RELSRC, ino, S_IFREG | 0644, 1); + expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1); /* LOOKUP returns a negative cache entry for dst */ EXPECT_LOOKUP(1, RELDST).WillOnce(ReturnNegativeCache(&entry_valid)); @@ -143,7 +143,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative_purge) */ struct timespec entry_valid = {.tv_sec = 0, .tv_nsec = 0}; - expect_lookup(RELSRC, ino, S_IFREG | 0644, 1); + expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1); /* LOOKUP returns a negative cache entry for dst */ EXPECT_LOOKUP(1, RELDST).WillOnce(ReturnNegativeCache(&entry_valid)) .RetiresOnSaturation(); @@ -164,7 +164,7 @@ TEST_F(Rename, DISABLED_entry_cache_negative_purge) ASSERT_EQ(0, rename(FULLSRC, FULLDST)) << strerror(errno); /* Finally, a subsequent lookup should query the daemon */ - expect_lookup(RELSRC, ino, S_IFREG | 0644, 1); + expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1); ASSERT_EQ(0, access(FULLDST, F_OK)) << strerror(errno); } @@ -179,7 +179,7 @@ TEST_F(Rename, exdev) tmpfd = mkstemp(tmpfile); ASSERT_LE(0, tmpfd) << strerror(errno); - expect_lookup(RELB, b_ino, S_IFREG | 0644, 2); + expect_lookup(RELB, b_ino, S_IFREG | 0644, 0, 2); ASSERT_NE(0, rename(tmpfile, FULLB)); ASSERT_EQ(EXDEV, errno); @@ -198,7 +198,7 @@ TEST_F(Rename, ok) uint64_t dst_dir_ino = 1; uint64_t ino = 42; - expect_lookup(RELSRC, ino, S_IFREG | 0644, 1); + expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1); EXPECT_LOOKUP(1, RELDST).WillOnce(Invoke(ReturnErrno(ENOENT))); EXPECT_CALL(*m_mock, process( @@ -230,8 +230,8 @@ TEST_F(Rename, overwrite) uint64_t dst_dir_ino = 1; uint64_t ino = 42; - expect_lookup(RELSRC, ino, S_IFREG | 0644, 1); - expect_lookup(RELDST, dst_ino, S_IFREG | 0644, 1); + expect_lookup(RELSRC, ino, S_IFREG | 0644, 0, 1); + expect_lookup(RELDST, dst_ino, S_IFREG | 0644, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { const char *src = (const char*)in->body.bytes + Modified: projects/fuse2/tests/sys/fs/fuse/unlink.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/unlink.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/unlink.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -40,7 +40,7 @@ class Unlink: public FuseTest { public: void expect_lookup(const char *relpath, uint64_t ino, int times) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, times); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 0, times); } void expect_unlink(uint64_t parent, const char *path, int error) Modified: projects/fuse2/tests/sys/fs/fuse/utils.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/utils.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -103,7 +103,7 @@ void FuseTest::expect_getattr(uint64_t ino, uint64_t s } void FuseTest::expect_lookup(const char *relpath, uint64_t ino, mode_t mode, - int times) + uint64_t size, int times) { EXPECT_LOOKUP(1, relpath) .Times(times) @@ -113,6 +113,7 @@ void FuseTest::expect_lookup(const char *relpath, uint out->body.entry.nodeid = ino; out->body.entry.attr.nlink = 1; out->body.entry.attr_valid = UINT64_MAX; + out->body.entry.attr.size = size; }))); } Modified: projects/fuse2/tests/sys/fs/fuse/utils.hh ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/utils.hh Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/utils.hh Fri Mar 15 22:47:20 2019 (r345207) @@ -73,10 +73,10 @@ class FuseTest : public ::testing::Test { /* * Create an expectation that FUSE_LOOKUP will be called for the given * path exactly times times. It will respond with inode ino, mode - * mode, and cache validity forever. + * mode, filesize size, and cache validity forever. */ void expect_lookup(const char *relpath, uint64_t ino, mode_t mode, - int times); + uint64_t size, int times); /* * Create an expectation that FUSE_GETATTR will be called for the given Modified: projects/fuse2/tests/sys/fs/fuse/write.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/write.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/write.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -49,9 +49,9 @@ class Write: public FuseTest { public: -void expect_lookup(const char *relpath, uint64_t ino) +void expect_lookup(const char *relpath, uint64_t ino, uint64_t size) { - FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, 1); + FuseTest::expect_lookup(relpath, ino, S_IFREG | 0644, size, 1); } void expect_release(uint64_t ino, ProcessMockerT r) @@ -146,7 +146,7 @@ TEST_F(AioWrite, DISABLED_aio_write) ssize_t bufsize = strlen(CONTENTS); struct aiocb iocb, *piocb; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, offset, bufsize, bufsize, 0, CONTENTS); @@ -190,7 +190,7 @@ TEST_F(Write, append) require_sync_resize_0(); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, initial_offset); expect_open(ino, 0, 1); expect_getattr(ino, initial_offset); expect_write(ino, initial_offset, BUFSIZE, BUFSIZE, 0, CONTENTS); @@ -213,7 +213,7 @@ TEST_F(Write, append_direct_io) uint64_t initial_offset = 4096; int fd; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, initial_offset); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, initial_offset); expect_write(ino, initial_offset, BUFSIZE, BUFSIZE, 0, CONTENTS); @@ -238,7 +238,7 @@ TEST_F(Write, DISABLED_direct_io_evicts_cache) ssize_t bufsize = strlen(CONTENTS0) + 1; char readbuf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, bufsize); expect_open(ino, 0, 1); expect_getattr(ino, bufsize); expect_read(ino, 0, bufsize, bufsize, CONTENTS0); @@ -281,7 +281,7 @@ TEST_F(Write, DISABLED_direct_io_short_write) ssize_t halfbufsize = bufsize / 2; const char *halfcontents = CONTENTS + halfbufsize; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, halfbufsize, 0, CONTENTS); @@ -316,7 +316,7 @@ TEST_F(Write, DISABLED_direct_io_short_write_iov) ssize_t totalsize = size0 + size1; struct iovec iov[2]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, FOPEN_DIRECT_IO, 1); expect_getattr(ino, 0); expect_write(ino, 0, totalsize, size0, 0, EXPECTED0); @@ -360,7 +360,7 @@ TEST_F(Write, DISABLED_mmap) ASSERT_NE(NULL, expected); memmove((uint8_t*)expected + offset, CONTENTS, bufsize); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, len); expect_open(ino, 0, 1); expect_getattr(ino, len); expect_read(ino, 0, len, len, zeros); @@ -396,7 +396,7 @@ TEST_F(Write, pwrite) int fd; ssize_t bufsize = strlen(CONTENTS); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, offset, bufsize, bufsize, 0, CONTENTS); @@ -418,7 +418,7 @@ TEST_F(Write, write) int fd; ssize_t bufsize = strlen(CONTENTS); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); @@ -448,7 +448,7 @@ TEST_F(Write, write_large) contents[i] = i; } - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, halfbufsize, halfbufsize, 0, contents); @@ -473,7 +473,7 @@ TEST_F(Write, write_nothing) int fd; ssize_t bufsize = 0; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); @@ -494,7 +494,7 @@ TEST_F(WriteBack, close) int fd; ssize_t bufsize = strlen(CONTENTS); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); @@ -529,7 +529,7 @@ TEST_F(WriteBack, writeback) ssize_t bufsize = strlen(CONTENTS); char readbuf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); @@ -562,7 +562,7 @@ TEST_F(WriteBack, o_direct) ssize_t bufsize = strlen(CONTENTS); char readbuf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); @@ -596,7 +596,7 @@ TEST_F(WriteThrough, DISABLED_writethrough) ssize_t bufsize = strlen(CONTENTS); char readbuf[bufsize]; - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); expect_getattr(ino, 0); expect_write(ino, 0, bufsize, bufsize, 0, CONTENTS); @@ -625,7 +625,7 @@ TEST_F(WriteThrough, DISABLED_update_file_size) int fd; ssize_t bufsize = strlen(CONTENTS); - expect_lookup(RELPATH, ino); + expect_lookup(RELPATH, ino, 0); expect_open(ino, 0, 1); EXPECT_CALL(*m_mock, process( ResultOf([=](auto in) { Modified: projects/fuse2/tests/sys/fs/fuse/xattr.cc ============================================================================== --- projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 22:39:55 2019 (r345206) +++ projects/fuse2/tests/sys/fs/fuse/xattr.cc Fri Mar 15 22:47:20 2019 (r345207) @@ -121,7 +121,7 @@ TEST_F(Getxattr, enoattr) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "user.foo", ReturnErrno(ENOATTR)); r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); @@ -142,7 +142,7 @@ TEST_F(Getxattr, DISABLED_enosys) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "user.foo", ReturnErrno(ENOSYS)); r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); @@ -174,7 +174,7 @@ TEST_F(Getxattr, erange) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "user.foo", ReturnErrno(ERANGE)); r = extattr_get_file(FULLPATH, ns, "foo", data, sizeof(data)); @@ -191,7 +191,7 @@ TEST_F(Getxattr, size_only) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "user.foo", ReturnImmediate([](auto in __unused, auto out) { SET_OUT_HEADER_LEN(out, getxattr); @@ -215,7 +215,7 @@ TEST_F(Getxattr, system) int ns = EXTATTR_NAMESPACE_SYSTEM; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "system.foo", ReturnImmediate([&](auto in __unused, auto out) { memcpy((void*)out->body.bytes, value, value_len); @@ -240,7 +240,7 @@ TEST_F(Getxattr, user) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_getxattr(ino, "user.foo", ReturnImmediate([&](auto in __unused, auto out) { memcpy((void*)out->body.bytes, value, value_len); @@ -264,7 +264,7 @@ TEST_F(Listxattr, DISABLED_enosys) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnErrno(ENOSYS)); ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); @@ -284,7 +284,7 @@ TEST_F(Listxattr, enotsup) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnErrno(ENOTSUP)); ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); @@ -308,7 +308,7 @@ TEST_F(Listxattr, erange) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnErrno(ERANGE)); ASSERT_EQ(-1, extattr_list_file(FULLPATH, ns, NULL, 0)); @@ -323,7 +323,7 @@ TEST_F(Listxattr, size_only_empty) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 0; SET_OUT_HEADER_LEN(out, listxattr); @@ -344,7 +344,7 @@ TEST_F(Listxattr, size_only_nonempty) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 45; SET_OUT_HEADER_LEN(out, listxattr); @@ -370,7 +370,7 @@ TEST_F(Listxattr, size_only_really_big) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto out) { out->body.listxattr.size = 16000; SET_OUT_HEADER_LEN(out, listxattr); @@ -404,7 +404,7 @@ TEST_F(Listxattr, user) char expected[9] = {3, 'f', 'o', 'o', 4, 'b', 'a', 'n', 'g'}; char attrs[28] = "user.foo\0system.x\0user.bang"; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnImmediate([&](auto in __unused, auto out) { out->body.listxattr.size = sizeof(attrs); @@ -438,7 +438,7 @@ TEST_F(Listxattr, system) char expected[2] = {1, 'x'}; char attrs[28] = "user.foo\0system.x\0user.bang"; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_listxattr(ino, 0, ReturnImmediate([&](auto in __unused, auto out) { out->body.listxattr.size = sizeof(attrs); @@ -466,7 +466,7 @@ TEST_F(Removexattr, enoattr) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_removexattr(ino, "user.foo", ENOATTR); ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo")); @@ -484,7 +484,7 @@ TEST_F(Removexattr, DISABLED_enosys) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_removexattr(ino, "user.foo", ENOSYS); ASSERT_EQ(-1, extattr_delete_file(FULLPATH, ns, "foo")); @@ -501,7 +501,7 @@ TEST_F(Removexattr, user) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_USER; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_removexattr(ino, "user.foo", 0); ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo")) @@ -514,7 +514,7 @@ TEST_F(Removexattr, system) uint64_t ino = 42; int ns = EXTATTR_NAMESPACE_SYSTEM; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_removexattr(ino, "system.foo", 0); ASSERT_EQ(0, extattr_delete_file(FULLPATH, ns, "foo")) @@ -535,7 +535,7 @@ TEST_F(Setxattr, DISABLED_enosys) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOSYS)); r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); @@ -560,7 +560,7 @@ TEST_F(Setxattr, enotsup) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_setxattr(ino, "user.foo", value, ReturnErrno(ENOTSUP)); r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); @@ -579,7 +579,7 @@ TEST_F(Setxattr, user) int ns = EXTATTR_NAMESPACE_USER; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_setxattr(ino, "user.foo", value, ReturnErrno(0)); r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); @@ -597,7 +597,7 @@ TEST_F(Setxattr, system) int ns = EXTATTR_NAMESPACE_SYSTEM; ssize_t r; - expect_lookup(RELPATH, ino, S_IFREG | 0644, 1); + expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); expect_setxattr(ino, "system.foo", value, ReturnErrno(0)); r = extattr_set_file(FULLPATH, ns, "foo", (void*)value, value_len); From owner-svn-src-projects@freebsd.org Fri Mar 15 22:56:19 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 973A01532CBA for ; Fri, 15 Mar 2019 22:56:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3961588031; Fri, 15 Mar 2019 22:56:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0E14418F67; Fri, 15 Mar 2019 22:56:19 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FMuI95035847; Fri, 15 Mar 2019 22:56:18 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FMuIHN035846; Fri, 15 Mar 2019 22:56:18 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152256.x2FMuIHN035846@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 22:56:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345208 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345208 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 3961588031 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.973,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 22:56:19 -0000 Author: ngie Date: Fri Mar 15 22:56:18 2019 New Revision: 345208 URL: https://svnweb.freebsd.org/changeset/base/345208 Log: Copy ^/vendor/head/google/capsicum-test to contrib/capsicum-test Added: projects/capsicum-test/contrib/capsicum-test/ - copied from r345048, vendor/google/capsicum-test/dist/ From owner-svn-src-projects@freebsd.org Fri Mar 15 23:43:02 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B8C6B1533BA5 for ; Fri, 15 Mar 2019 23:43:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3EB26897C3; Fri, 15 Mar 2019 23:43:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 322ED197DD; Fri, 15 Mar 2019 23:43:02 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FNh29B061822; Fri, 15 Mar 2019 23:43:02 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FNh2nC061821; Fri, 15 Mar 2019 23:43:02 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152343.x2FNh2nC061821@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 23:43:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345209 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345209 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 3EB26897C3 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.975,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 23:43:02 -0000 Author: ngie Date: Fri Mar 15 23:43:01 2019 New Revision: 345209 URL: https://svnweb.freebsd.org/changeset/base/345209 Log: Fix a -Wunused issue by omitting `p` Modified: projects/capsicum-test/contrib/capsicum-test/capsicum-test.h Modified: projects/capsicum-test/contrib/capsicum-test/capsicum-test.h ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/capsicum-test.h Fri Mar 15 22:56:18 2019 (r345208) +++ projects/capsicum-test/contrib/capsicum-test/capsicum-test.h Fri Mar 15 23:43:01 2019 (r345209) @@ -20,7 +20,7 @@ extern bool force_mt; extern bool force_nofork; extern uid_t other_uid; -static inline void *WaitingThreadFn(void *p) { +static inline void *WaitingThreadFn(void *) { // Loop until cancelled while (true) { usleep(10000); From owner-svn-src-projects@freebsd.org Fri Mar 15 23:44:23 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CFB631533C3A for ; Fri, 15 Mar 2019 23:44:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 70A9E898B3; Fri, 15 Mar 2019 23:44:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5D318197DF; Fri, 15 Mar 2019 23:44:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FNiNLv061936; Fri, 15 Mar 2019 23:44:23 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FNiNi1061935; Fri, 15 Mar 2019 23:44:23 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152344.x2FNiNi1061935@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 23:44:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345210 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345210 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 70A9E898B3 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.97)[-0.975,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 23:44:24 -0000 Author: ngie Date: Fri Mar 15 23:44:22 2019 New Revision: 345210 URL: https://svnweb.freebsd.org/changeset/base/345210 Log: Fix a -Wunused issue by omitting `flags` from the function declaration Modified: projects/capsicum-test/contrib/capsicum-test/syscalls.h Modified: projects/capsicum-test/contrib/capsicum-test/syscalls.h ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/syscalls.h Fri Mar 15 23:43:01 2019 (r345209) +++ projects/capsicum-test/contrib/capsicum-test/syscalls.h Fri Mar 15 23:44:22 2019 (r345210) @@ -53,7 +53,7 @@ inline ssize_t flistxattr_(int fd, char *list, size_t inline ssize_t fgetxattr_(int fd, const char *name, void *value, size_t size) { return extattr_get_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size); } -inline int fsetxattr_(int fd, const char *name, const void *value, size_t size, int flags) { +inline int fsetxattr_(int fd, const char *name, const void *value, size_t size, int) { return extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, name, value, size); } inline int fremovexattr_(int fd, const char *name) { From owner-svn-src-projects@freebsd.org Fri Mar 15 23:51:53 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2D9191533EDF for ; Fri, 15 Mar 2019 23:51:53 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BB1FD89C2A; Fri, 15 Mar 2019 23:51:52 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A900619847; Fri, 15 Mar 2019 23:51:52 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FNpqjO064640; Fri, 15 Mar 2019 23:51:52 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FNpqAR064639; Fri, 15 Mar 2019 23:51:52 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152351.x2FNpqAR064639@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 23:51:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345211 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345211 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: BB1FD89C2A X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.97)[-0.975,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 23:51:53 -0000 Author: ngie Date: Fri Mar 15 23:51:52 2019 New Revision: 345211 URL: https://svnweb.freebsd.org/changeset/base/345211 Log: Fix -Wmissing-variable-declarations issue reported by clang Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Fri Mar 15 23:44:22 2019 (r345210) +++ projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Fri Mar 15 23:51:52 2019 (r345211) @@ -25,7 +25,7 @@ typedef struct { uint64_t right; const char* name; } right_info; -right_info known_rights[] = { +static right_info known_rights[] = { /* Rights that are common to all versions of Capsicum */ RIGHTS_INFO(CAP_READ), RIGHTS_INFO(CAP_WRITE), From owner-svn-src-projects@freebsd.org Fri Mar 15 23:52:38 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 64FA61533EFC for ; Fri, 15 Mar 2019 23:52:38 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0ABCB89D8B; Fri, 15 Mar 2019 23:52:38 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F026019999; Fri, 15 Mar 2019 23:52:37 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FNqbG9067164; Fri, 15 Mar 2019 23:52:37 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FNqbDH067163; Fri, 15 Mar 2019 23:52:37 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152352.x2FNqbDH067163@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 23:52:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345212 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345212 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0ABCB89D8B X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; NEURAL_HAM_SHORT(-0.97)[-0.975,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 23:52:38 -0000 Author: ngie Date: Fri Mar 15 23:52:37 2019 New Revision: 345212 URL: https://svnweb.freebsd.org/changeset/base/345212 Log: Fix -Wunused variable by removing `v` from function definition Modified: projects/capsicum-test/contrib/capsicum-test/mqueue.cc Modified: projects/capsicum-test/contrib/capsicum-test/mqueue.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/mqueue.cc Fri Mar 15 23:51:52 2019 (r345211) +++ projects/capsicum-test/contrib/capsicum-test/mqueue.cc Fri Mar 15 23:52:37 2019 (r345212) @@ -24,7 +24,7 @@ static void test_case_name##_##test_name##_ForkTest() static bool invoked; -void seen_it_done_it(int v) { +void seen_it_done_it(int) { invoked = true; } From owner-svn-src-projects@freebsd.org Fri Mar 15 23:55:42 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EBDCC1533F85 for ; Fri, 15 Mar 2019 23:55:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 84C2D89ECB; Fri, 15 Mar 2019 23:55:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 71879199A9; Fri, 15 Mar 2019 23:55:41 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2FNtfHd067348; Fri, 15 Mar 2019 23:55:41 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2FNtfgQ067347; Fri, 15 Mar 2019 23:55:41 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903152355.x2FNtfgQ067347@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Fri, 15 Mar 2019 23:55:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345213 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345213 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 84C2D89ECB X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.97)[-0.975,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Fri, 15 Mar 2019 23:55:42 -0000 Author: ngie Date: Fri Mar 15 23:55:41 2019 New Revision: 345213 URL: https://svnweb.freebsd.org/changeset/base/345213 Log: Fix -Wshadow issues with `EXPECT_OPEN_OK(..)` macro * Wrap in do-while(0) block to avoid variable shadowing issue with multiple calls in the same function. * Prefix block local variables with `_` to try and avoid variable name clashes with values local to test methods. Modified: projects/capsicum-test/contrib/capsicum-test/openat.cc Modified: projects/capsicum-test/contrib/capsicum-test/openat.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/openat.cc Fri Mar 15 23:52:37 2019 (r345212) +++ projects/capsicum-test/contrib/capsicum-test/openat.cc Fri Mar 15 23:55:41 2019 (r345213) @@ -11,9 +11,9 @@ // Check an open call works and close the resulting fd. #define EXPECT_OPEN_OK(f) do { \ - int fd = f; \ - EXPECT_OK(fd); \ - close(fd); \ + int _fd = f; \ + EXPECT_OK(_fd); \ + close(_fd); \ } while (0) static void CreateFile(const char *filename, const char *contents) { From owner-svn-src-projects@freebsd.org Sat Mar 16 03:03:26 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 32B1B153CF77 for ; Sat, 16 Mar 2019 03:03:26 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C5F946A2EA; Sat, 16 Mar 2019 03:03:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B48911BE88; Sat, 16 Mar 2019 03:03:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2G33PXu067206; Sat, 16 Mar 2019 03:03:25 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2G33PRT067205; Sat, 16 Mar 2019 03:03:25 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903160303.x2G33PRT067205@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Sat, 16 Mar 2019 03:03:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345214 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345214 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: C5F946A2EA X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.94 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.95)[-0.945,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Sat, 16 Mar 2019 03:03:26 -0000 Author: ngie Date: Sat Mar 16 03:03:25 2019 New Revision: 345214 URL: https://svnweb.freebsd.org/changeset/base/345214 Log: Fix a -Wcast-align issue by using memcpy to save/restore the value from `CMSG_DATA(..)` Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Fri Mar 15 23:55:41 2019 (r345213) +++ projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Sat Mar 16 03:03:25 2019 (r345214) @@ -982,12 +982,14 @@ FORK_TEST_ON(Capability, SocketTransfer, TmpFile("cap_ // Child: enter cap mode EXPECT_OK(cap_enter()); + int cap_fd; + // Child: wait to receive FD over socket int rc = recvmsg(sock_fds[0], &mh, 0); EXPECT_OK(rc); EXPECT_LE(CMSG_LEN(sizeof(int)), mh.msg_controllen); cmptr = CMSG_FIRSTHDR(&mh); - int cap_fd = *(int*)CMSG_DATA(cmptr); + memcpy(&cap_fd, CMSG_DATA(cmptr), sizeof(int)); EXPECT_EQ(CMSG_LEN(sizeof(int)), cmptr->cmsg_len); cmptr = CMSG_NXTHDR(&mh, cmptr); EXPECT_TRUE(cmptr == NULL); @@ -1022,7 +1024,7 @@ FORK_TEST_ON(Capability, SocketTransfer, TmpFile("cap_ cmptr->cmsg_level = SOL_SOCKET; cmptr->cmsg_type = SCM_RIGHTS; cmptr->cmsg_len = CMSG_LEN(sizeof(int)); - *(int *)CMSG_DATA(cmptr) = cap_fd; + memcpy(CMSG_DATA(cmptr), &cap_fd, sizeof(int)); buffer1[0] = 0; iov[0].iov_len = 1; sleep(3); From owner-svn-src-projects@freebsd.org Sat Mar 16 03:58:25 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A2651540185 for ; Sat, 16 Mar 2019 03:58:25 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DEA686C8B3; Sat, 16 Mar 2019 03:58:24 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B42301C797; Sat, 16 Mar 2019 03:58:24 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2G3wOV1092990; Sat, 16 Mar 2019 03:58:24 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2G3wOZk092987; Sat, 16 Mar 2019 03:58:24 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903160358.x2G3wOZk092987@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Sat, 16 Mar 2019 03:58:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345218 - in projects/capsicum-test: etc/mtree tests/sys tests/sys/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/capsicum-test: etc/mtree tests/sys tests/sys/capsicum-test X-SVN-Commit-Revision: 345218 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: DEA686C8B3 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.95 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.95)[-0.948,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Sat, 16 Mar 2019 03:58:25 -0000 Author: ngie Date: Sat Mar 16 03:58:23 2019 New Revision: 345218 URL: https://svnweb.freebsd.org/changeset/base/345218 Log: Integrate capsicum-test into the build/FreeBSD test suite TODO: * test this on my -CURRENT system. * test this with C++11 capable gcc versions. Added: projects/capsicum-test/tests/sys/capsicum-test/ projects/capsicum-test/tests/sys/capsicum-test/Makefile (contents, props changed) Modified: projects/capsicum-test/etc/mtree/BSD.tests.dist projects/capsicum-test/tests/sys/Makefile Modified: projects/capsicum-test/etc/mtree/BSD.tests.dist ============================================================================== --- projects/capsicum-test/etc/mtree/BSD.tests.dist Sat Mar 16 03:47:15 2019 (r345217) +++ projects/capsicum-test/etc/mtree/BSD.tests.dist Sat Mar 16 03:58:23 2019 (r345218) @@ -462,6 +462,8 @@ .. capsicum .. + capsicum-test + .. cddl zfs bin Modified: projects/capsicum-test/tests/sys/Makefile ============================================================================== --- projects/capsicum-test/tests/sys/Makefile Sat Mar 16 03:47:15 2019 (r345217) +++ projects/capsicum-test/tests/sys/Makefile Sat Mar 16 03:58:23 2019 (r345218) @@ -9,6 +9,7 @@ TESTS_SUBDIRS+= aio TESTS_SUBDIRS+= ${_audit} TESTS_SUBDIRS+= auditpipe TESTS_SUBDIRS+= capsicum +TESTS_SUBDIRS+= ${_capsicum_test} TESTS_SUBDIRS+= ${_cddl} TESTS_SUBDIRS+= fifo TESTS_SUBDIRS+= file @@ -34,6 +35,10 @@ _audit= audit .if ${MK_CDDL} != "no" _cddl= cddl +.endif + +.if ${MK_GOOGLETEST} != "no" +_capsicum_test= capsicum-test .endif # Items not integrated into kyua runs by default Added: projects/capsicum-test/tests/sys/capsicum-test/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/capsicum-test/tests/sys/capsicum-test/Makefile Sat Mar 16 03:58:23 2019 (r345218) @@ -0,0 +1,45 @@ +# $FreeBSD$ + +.PATH: ${SRCTOP}/contrib/capsicum-test + +TESTSDIR= ${TESTSBASE}/sys/capsicum-test + +GTESTS+= capsicum-test + +SRCS.capsicum-test+= \ + capsicum-test-main.cc \ + capsicum-test.cc \ + capability-fd.cc \ + fexecve.cc \ + procdesc.cc \ + capmode.cc \ + fcntl.cc \ + ioctl.cc \ + openat.cc \ + sysctl.cc \ + select.cc \ + mqueue.cc \ + socket.cc \ + sctp.cc \ + capability-fd-pair.cc \ + overhead.cc \ + rename.cc + +SRCS.smoketest+= \ + smoketest.c + +LIBADD.capsicum-test+= gtest pthread + +PROG_OVERRIDE_VARS+= NO_SHARED +.for p in mini-me mini-me.noexec mini-me-setuid +PROGS+= $p +NO_SHARED.$p= +SRCS.$p= mini-me.c +.endfor + +BINMODE.mini-me.noexec= ${NOBINMODE} +BINMODE.mini-me.setuid= 01444 + +WARNS?= 3 + +.include From owner-svn-src-projects@freebsd.org Sat Mar 16 03:16:45 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6EC08153E6C8 for ; Sat, 16 Mar 2019 03:16:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 111B86AB48; Sat, 16 Mar 2019 03:16:45 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F288F1C055; Sat, 16 Mar 2019 03:16:44 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2G3GiWq072318; Sat, 16 Mar 2019 03:16:44 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2G3Gi2r072317; Sat, 16 Mar 2019 03:16:44 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903160316.x2G3Gi2r072317@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Sat, 16 Mar 2019 03:16:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345215 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345215 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 111B86AB48 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.94 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.95)[-0.945,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Sat, 16 Mar 2019 03:16:45 -0000 Author: ngie Date: Sat Mar 16 03:16:44 2019 New Revision: 345215 URL: https://svnweb.freebsd.org/changeset/base/345215 Log: Revert r345214 It's best to not repeat the mistake I made in r300167; I should use `NO_WCAST_ALIGN` instead. Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Modified: projects/capsicum-test/contrib/capsicum-test/capability-fd.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Sat Mar 16 03:03:25 2019 (r345214) +++ projects/capsicum-test/contrib/capsicum-test/capability-fd.cc Sat Mar 16 03:16:44 2019 (r345215) @@ -982,14 +982,12 @@ FORK_TEST_ON(Capability, SocketTransfer, TmpFile("cap_ // Child: enter cap mode EXPECT_OK(cap_enter()); - int cap_fd; - // Child: wait to receive FD over socket int rc = recvmsg(sock_fds[0], &mh, 0); EXPECT_OK(rc); EXPECT_LE(CMSG_LEN(sizeof(int)), mh.msg_controllen); cmptr = CMSG_FIRSTHDR(&mh); - memcpy(&cap_fd, CMSG_DATA(cmptr), sizeof(int)); + int cap_fd = *(int*)CMSG_DATA(cmptr); EXPECT_EQ(CMSG_LEN(sizeof(int)), cmptr->cmsg_len); cmptr = CMSG_NXTHDR(&mh, cmptr); EXPECT_TRUE(cmptr == NULL); @@ -1024,7 +1022,7 @@ FORK_TEST_ON(Capability, SocketTransfer, TmpFile("cap_ cmptr->cmsg_level = SOL_SOCKET; cmptr->cmsg_type = SCM_RIGHTS; cmptr->cmsg_len = CMSG_LEN(sizeof(int)); - memcpy(CMSG_DATA(cmptr), &cap_fd, sizeof(int)); + *(int *)CMSG_DATA(cmptr) = cap_fd; buffer1[0] = 0; iov[0].iov_len = 1; sleep(3); From owner-svn-src-projects@freebsd.org Sat Mar 16 04:02:27 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8F898154044F for ; Sat, 16 Mar 2019 04:02:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3AC466CCCB; Sat, 16 Mar 2019 04:02:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2F5191C93B; Sat, 16 Mar 2019 04:02:27 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2G42RXf097214; Sat, 16 Mar 2019 04:02:27 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2G42JNr097180; Sat, 16 Mar 2019 04:02:19 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903160402.x2G42JNr097180@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Sat, 16 Mar 2019 04:02:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345219 - in projects/capsicum-test: . bin/date contrib/googletest contrib/llvm/lib/Target/X86 contrib/llvm/projects contrib/llvm/tools/clang/lib/AST lib/clang/include/clang/Basic lib/c... X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: in projects/capsicum-test: . bin/date contrib/googletest contrib/llvm/lib/Target/X86 contrib/llvm/projects contrib/llvm/tools/clang/lib/AST lib/clang/include/clang/Basic lib/clang/include/lld/Common l... X-SVN-Commit-Revision: 345219 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 3AC466CCCB X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.95 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.95)[-0.954,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Sat, 16 Mar 2019 04:02:28 -0000 Author: ngie Date: Sat Mar 16 04:02:19 2019 New Revision: 345219 URL: https://svnweb.freebsd.org/changeset/base/345219 Log: MFhead@r345218 Added: - copied from r345218, head/contrib/libunwind/ projects/capsicum-test/sys/dev/cxgbe/firmware/t4fw-1.23.0.0.bin.uu - copied unchanged from r345218, head/sys/dev/cxgbe/firmware/t4fw-1.23.0.0.bin.uu projects/capsicum-test/sys/dev/cxgbe/firmware/t5fw-1.23.0.0.bin.uu - copied unchanged from r345218, head/sys/dev/cxgbe/firmware/t5fw-1.23.0.0.bin.uu projects/capsicum-test/sys/dev/cxgbe/firmware/t6fw-1.23.0.0.bin.uu - copied unchanged from r345218, head/sys/dev/cxgbe/firmware/t6fw-1.23.0.0.bin.uu Directory Properties: projects/capsicum-test/contrib/libunwind/ (props changed) Replaced: projects/capsicum-test/contrib/googletest/ - copied from r345218, head/contrib/googletest/ projects/capsicum-test/lib/googletest/ - copied from r345218, head/lib/googletest/ projects/capsicum-test/share/examples/tests/tests/googletest/ - copied from r345218, head/share/examples/tests/tests/googletest/ projects/capsicum-test/share/mk/googletest.test.inc.mk - copied unchanged from r345218, head/share/mk/googletest.test.inc.mk projects/capsicum-test/share/mk/googletest.test.mk - copied unchanged from r345218, head/share/mk/googletest.test.mk projects/capsicum-test/tools/build/options/WITHOUT_GOOGLETEST - copied unchanged from r345218, head/tools/build/options/WITHOUT_GOOGLETEST Deleted: projects/capsicum-test/contrib/llvm/projects/ projects/capsicum-test/sys/contrib/dev/drm2/ projects/capsicum-test/sys/contrib/dev/npe/ projects/capsicum-test/sys/dev/cxgbe/firmware/t4fw-1.22.0.3.bin.uu projects/capsicum-test/sys/dev/cxgbe/firmware/t5fw-1.22.0.3.bin.uu projects/capsicum-test/sys/dev/cxgbe/firmware/t6fw-1.22.0.3.bin.uu Modified: projects/capsicum-test/Makefile.inc1 projects/capsicum-test/UPDATING projects/capsicum-test/bin/date/date.1 projects/capsicum-test/bin/date/date.c projects/capsicum-test/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp projects/capsicum-test/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp projects/capsicum-test/lib/clang/include/clang/Basic/Version.inc projects/capsicum-test/lib/clang/include/lld/Common/Version.inc projects/capsicum-test/lib/clang/include/llvm/Support/VCSRevision.h projects/capsicum-test/lib/libc/sys/stat.2 projects/capsicum-test/lib/libgcc_eh/Makefile.inc projects/capsicum-test/libexec/rc/network.subr projects/capsicum-test/libexec/rc/rc.conf projects/capsicum-test/libexec/rc/rc.d/Makefile projects/capsicum-test/libexec/tftpd/tests/functional.c projects/capsicum-test/sbin/camcontrol/camcontrol.8 projects/capsicum-test/sbin/camcontrol/camcontrol.c projects/capsicum-test/share/man/man4/ccr.4 projects/capsicum-test/share/man/man4/mfi.4 projects/capsicum-test/share/man/man4/mrsas.4 projects/capsicum-test/share/man/man5/pf.conf.5 projects/capsicum-test/share/man/man5/src.conf.5 projects/capsicum-test/share/man/man7/ports.7 projects/capsicum-test/share/man/man9/VOP_INACTIVE.9 projects/capsicum-test/share/man/man9/firmware.9 projects/capsicum-test/share/misc/committers-doc.dot projects/capsicum-test/stand/common/bcache.c projects/capsicum-test/stand/common/disk.c projects/capsicum-test/stand/common/interp_forth.c projects/capsicum-test/stand/common/part.c projects/capsicum-test/stand/userboot/userboot/elf64_freebsd.c projects/capsicum-test/sys/amd64/amd64/initcpu.c projects/capsicum-test/sys/amd64/linux32/linux32_machdep.c projects/capsicum-test/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/capsicum-test/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zthr.h projects/capsicum-test/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zthr.c projects/capsicum-test/sys/compat/freebsd32/freebsd32_misc.c projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/bitops.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/device.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/dma-attrs.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/dma-mapping.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/idr.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/list.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/mm.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/pci.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/printk.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/rcupdate.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/scatterlist.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/sched.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/slab.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/srcu.h projects/capsicum-test/sys/compat/linuxkpi/common/include/linux/sysfs.h projects/capsicum-test/sys/compat/linuxkpi/common/src/linux_current.c projects/capsicum-test/sys/compat/linuxkpi/common/src/linux_page.c projects/capsicum-test/sys/conf/files projects/capsicum-test/sys/dev/cxgbe/firmware/t4fw_interface.h projects/capsicum-test/sys/dev/cxgbe/firmware/t5fw_cfg_uwire.txt projects/capsicum-test/sys/dev/cxgbe/firmware/t6fw_cfg_uwire.txt projects/capsicum-test/sys/dev/hwpmc/hwpmc_core.c projects/capsicum-test/sys/dev/isci/isci.c projects/capsicum-test/sys/dev/isci/isci.h projects/capsicum-test/sys/dev/isci/isci_controller.c projects/capsicum-test/sys/dev/mrsas/mrsas.c projects/capsicum-test/sys/dev/mrsas/mrsas.h projects/capsicum-test/sys/dev/mrsas/mrsas_cam.c projects/capsicum-test/sys/fs/ext2fs/ext2_alloc.c projects/capsicum-test/sys/fs/nfs/nfs_commonacl.c projects/capsicum-test/sys/fs/nfs/nfs_commonsubs.c projects/capsicum-test/sys/fs/nfs/nfs_var.h projects/capsicum-test/sys/fs/nfsclient/nfs_clrpcops.c projects/capsicum-test/sys/fs/nfsserver/nfs_nfsdport.c projects/capsicum-test/sys/geom/geom_io.c projects/capsicum-test/sys/i386/i386/initcpu.c projects/capsicum-test/sys/kern/kern_time.c projects/capsicum-test/sys/kern/subr_clock.c projects/capsicum-test/sys/kern/subr_disk.c projects/capsicum-test/sys/kern/subr_stack.c projects/capsicum-test/sys/kern/vfs_bio.c projects/capsicum-test/sys/kern/vfs_subr.c projects/capsicum-test/sys/mips/mips/vm_machdep.c projects/capsicum-test/sys/modules/cxgbe/t4_firmware/Makefile projects/capsicum-test/sys/modules/cxgbe/t5_firmware/Makefile projects/capsicum-test/sys/modules/cxgbe/t6_firmware/Makefile projects/capsicum-test/sys/net/bridgestp.c projects/capsicum-test/sys/net/ethernet.h projects/capsicum-test/sys/net/if_bridge.c projects/capsicum-test/sys/net/if_ethersubr.c projects/capsicum-test/sys/net/if_vxlan.c projects/capsicum-test/sys/net/pfvar.h projects/capsicum-test/sys/netgraph/ng_ipfw.c projects/capsicum-test/sys/netinet/ip_divert.c projects/capsicum-test/sys/netinet/ip_var.h projects/capsicum-test/sys/netinet/raw_ip.c projects/capsicum-test/sys/netpfil/ipfw/ip_dn_io.c projects/capsicum-test/sys/netpfil/ipfw/ip_dn_private.h projects/capsicum-test/sys/netpfil/ipfw/ip_fw2.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_bpf.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_dynamic.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_log.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_nat.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_pfil.c projects/capsicum-test/sys/netpfil/ipfw/ip_fw_private.h projects/capsicum-test/sys/netpfil/pf/pf.c projects/capsicum-test/sys/netpfil/pf/pf_table.c projects/capsicum-test/sys/sys/_stack.h projects/capsicum-test/sys/sys/clock.h projects/capsicum-test/sys/sys/param.h projects/capsicum-test/sys/sys/proc.h projects/capsicum-test/sys/sys/stack.h projects/capsicum-test/sys/ufs/ffs/ffs_inode.c projects/capsicum-test/sys/ufs/ffs/ffs_softdep.c projects/capsicum-test/sys/ufs/ufs/inode.h projects/capsicum-test/sys/ufs/ufs/ufs_vnops.c projects/capsicum-test/sys/x86/include/specialreg.h projects/capsicum-test/sys/x86/x86/identcpu.c projects/capsicum-test/tests/sys/cddl/zfs/tests/delegate/Makefile projects/capsicum-test/tests/sys/geom/class/eli/misc_test.sh projects/capsicum-test/tests/sys/geom/class/nop/nop_test.sh projects/capsicum-test/tests/sys/geom/class/part/misc.sh projects/capsicum-test/tests/sys/kern/unix_socketpair_test.c projects/capsicum-test/tools/build/mk/OptionalObsoleteFiles.inc projects/capsicum-test/usr.bin/cmp/tests/cmp_test2.sh projects/capsicum-test/usr.bin/dc/tests/bcode.sh projects/capsicum-test/usr.bin/dc/tests/inout.sh projects/capsicum-test/usr.bin/pr/tests/basic2_test.sh projects/capsicum-test/usr.bin/proccontrol/proccontrol.1 projects/capsicum-test/usr.bin/tail/tests/tail_test.sh projects/capsicum-test/usr.sbin/bhyve/pci_emul.c projects/capsicum-test/usr.sbin/bhyve/pci_nvme.c projects/capsicum-test/usr.sbin/bhyve/uart_emul.c projects/capsicum-test/usr.sbin/chroot/chroot.8 projects/capsicum-test/usr.sbin/freebsd-update/freebsd-update.sh projects/capsicum-test/usr.sbin/fstyp/tests/fstyp_test.sh projects/capsicum-test/usr.sbin/trim/trim.c Directory Properties: projects/capsicum-test/ (props changed) projects/capsicum-test/contrib/compiler-rt/ (props changed) projects/capsicum-test/contrib/libc++/ (props changed) projects/capsicum-test/contrib/llvm/ (props changed) projects/capsicum-test/contrib/llvm/tools/clang/ (props changed) projects/capsicum-test/contrib/llvm/tools/lld/ (props changed) projects/capsicum-test/contrib/llvm/tools/lldb/ (props changed) projects/capsicum-test/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/capsicum-test/Makefile.inc1 ============================================================================== --- projects/capsicum-test/Makefile.inc1 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/Makefile.inc1 Sat Mar 16 04:02:19 2019 (r345219) @@ -1143,6 +1143,12 @@ WMAKE_TGTS+= everything WMAKE_TGTS+= build${libcompat} .endif +# record buildworld time in seconds +.if make(buildworld) +_BUILDWORLD_START!= date '+%s' +.export _BUILDWORLD_START +.endif + buildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue .PHONY .ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue @@ -1155,6 +1161,9 @@ buildworld_epilogue: .PHONY @echo @echo "--------------------------------------------------------------" @echo ">>> World build completed on `LC_ALL=C date`" + @seconds=$$(($$(date '+%s') - ${_BUILDWORLD_START})); \ + echo -n ">>> World build in $$seconds seconds, "; \ + echo "ncpu: $$(sysctl -n hw.ncpu)${.MAKE.JOBS:S/^/, make -j/}" @echo "--------------------------------------------------------------" # @@ -1855,11 +1864,11 @@ create-world-package-${pkgname}: .PHONY @if [ "${pkgname}" == "runtime" ]; then \ sed -i '' -e "s/%VCS_REVISION%/${VCS_REVISION}/" ${WSTAGEDIR}/${pkgname}.ucl ; \ fi - ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh -o ALLOW_BASE_SHLIBS=yes \ + ${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/usr/bin/uname -o ALLOW_BASE_SHLIBS=yes \ create -M ${WSTAGEDIR}/${pkgname}.ucl \ -p ${WSTAGEDIR}/${pkgname}.plist \ -r ${WSTAGEDIR} \ - -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/${PKG_VERSION} + -o ${REPODIR}/$$(${PKG_CMD} -o ABI_FILE=${WSTAGEDIR}/usr/bin/uname config ABI)/${PKG_VERSION} .endfor _default_flavor= -default Modified: projects/capsicum-test/UPDATING ============================================================================== --- projects/capsicum-test/UPDATING Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/UPDATING Sat Mar 16 04:02:19 2019 (r345219) @@ -1931,13 +1931,14 @@ COMMON ITEMS: can be deleted by "make delete-old-libs", but you have to make sure that no program is using those libraries anymore. - [8] The new kernel must be able to run existing binaries used by - an installworld. When upgrading across major versions, the new - kernel's configuration must include the correct COMPAT_FREEBSD - option for existing binaries (e.g. COMPAT_FREEBSD11 to run 11.x - binaries). Failure to do so may leave you with a system that is - hard to boot to recover. A GENERIC kernel will include suitable - compatibility options to run binaries from supported older branches. + [8] The new kernel must be able to run existing binaries used by an + installworld. When upgrading across major versions, the new kernel's + configuration must include the correct COMPAT_FREEBSD option for + existing binaries (e.g. COMPAT_FREEBSD11 to run 11.x binaries). Failure + to do so may leave you with a system that is hard to boot to recover. A + GENERIC kernel will include suitable compatibility options to run + binaries from older branches. Note that the ability to run binaries + from unsupported branches is not guaranteed. Make sure that you merge any new devices from GENERIC since the last time you updated your kernel config file. Options also Modified: projects/capsicum-test/bin/date/date.1 ============================================================================== --- projects/capsicum-test/bin/date/date.1 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/bin/date/date.1 Sat Mar 16 04:02:19 2019 (r345219) @@ -32,7 +32,7 @@ .\" @(#)date.1 8.3 (Berkeley) 4/28/95 .\" $FreeBSD$ .\" -.Dd August 4, 2018 +.Dd March 12, 2019 .Dt DATE 1 .Os .Sh NAME @@ -62,9 +62,6 @@ .Fl f Ar input_fmt new_date .Op Cm + Ns Ar output_fmt .Nm -.Op Fl d Ar dst -.Op Fl t Ar minutes_west -.Nm .Op Fl jnu .Op Fl I Ns Op Ar FMT .Op Fl f Ar input_fmt @@ -93,15 +90,6 @@ the time may not be changed by more than 1 second. .Pp The options are as follows: .Bl -tag -width Ds -.It Fl d Ar dst -Set the kernel's value for daylight saving time. -If -.Ar dst -is non-zero, future calls -to -.Xr gettimeofday 2 -will return a non-zero for -.Fa tz_dsttime . .It Fl f Use .Ar input_fmt @@ -188,14 +176,6 @@ and can be specified in decimal, octal, or hex. .It Fl r Ar filename Print the date and time of the last modification of .Ar filename . -.It Fl t Ar minutes_west -Set the system's value for minutes west of -.Tn GMT . -.Ar minutes_west -specifies the number of minutes returned in -.Fa tz_minuteswest -by future calls to -.Xr gettimeofday 2 . .It Fl u Display or set the date in .Tn UTC Modified: projects/capsicum-test/bin/date/date.c ============================================================================== --- projects/capsicum-test/bin/date/date.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/bin/date/date.c Sat Mar 16 04:02:19 2019 (r345219) @@ -91,14 +91,12 @@ static const char *rfc2822_format = "%a, %d %b %Y %T % int main(int argc, char *argv[]) { - struct timezone tz; int ch, rflag; bool Iflag, jflag, nflag, Rflag; const char *format; char buf[1024]; - char *endptr, *fmt; + char *fmt; char *tmp; - int set_timezone; struct vary *v; const struct vary *badv; struct tm *lt; @@ -108,18 +106,10 @@ main(int argc, char *argv[]) v = NULL; fmt = NULL; (void) setlocale(LC_TIME, ""); - tz.tz_dsttime = tz.tz_minuteswest = 0; rflag = 0; Iflag = jflag = nflag = Rflag = 0; - set_timezone = 0; - while ((ch = getopt(argc, argv, "d:f:I::jnRr:t:uv:")) != -1) + while ((ch = getopt(argc, argv, "f:I::jnRr:uv:")) != -1) switch((char)ch) { - case 'd': /* daylight savings time */ - tz.tz_dsttime = strtol(optarg, &endptr, 10) ? 1 : 0; - if (endptr == optarg || *endptr != '\0') - usage(); - set_timezone = 1; - break; case 'f': fmt = optarg; break; @@ -160,13 +150,6 @@ main(int argc, char *argv[]) usage(); } break; - case 't': /* minutes west of UTC */ - /* error check; don't allow "PST" */ - tz.tz_minuteswest = strtol(optarg, &endptr, 10); - if (endptr == optarg || *endptr != '\0') - usage(); - set_timezone = 1; - break; case 'u': /* do everything in UTC */ (void)setenv("TZ", "UTC0", 1); break; @@ -179,13 +162,6 @@ main(int argc, char *argv[]) argc -= optind; argv += optind; - /* - * If -d or -t, set the timezone or daylight savings time; this - * doesn't belong here; the kernel should not know about either. - */ - if (set_timezone && settimeofday(NULL, &tz) != 0) - err(1, "settimeofday (timezone)"); - if (!rflag && time(&tval) == -1) err(1, "time"); @@ -411,8 +387,7 @@ static void usage(void) { (void)fprintf(stderr, "%s\n%s\n%s\n", - "usage: date [-jnRu] [-d dst] [-r seconds|file] [-t west] " - "[-v[+|-]val[ymwdHMS]]", + "usage: date [-jnRu] [-r seconds|file] [-v[+|-]val[ymwdHMS]]", " " "[-I[date | hours | minutes | seconds]]", " " Modified: projects/capsicum-test/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp ============================================================================== --- projects/capsicum-test/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp Sat Mar 16 04:02:19 2019 (r345219) @@ -139,11 +139,6 @@ bool X86CallFrameOptimization::isLegal(MachineFunction if (NoX86CFOpt.getValue()) return false; - // Work around LLVM PR30879 (bad interaction between CFO and libunwind) - if (STI->isTargetFreeBSD() && STI->is32Bit() && - STI->getTargetTriple().getOSMajorVersion() >= 12) - return false; - // We can't encode multiple DW_CFA_GNU_args_size or DW_CFA_def_cfa_offset // in the compact unwind encoding that Darwin uses. So, bail if there // is a danger of that being generated. Modified: projects/capsicum-test/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp ============================================================================== --- projects/capsicum-test/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp Sat Mar 16 04:02:19 2019 (r345219) @@ -10985,6 +10985,7 @@ bool Expr::EvaluateAsConstantExpr(EvalResult &Result, const ASTContext &Ctx) const { EvalInfo::EvaluationMode EM = EvalInfo::EM_ConstantExpression; EvalInfo Info(Ctx, Result, EM); + Info.InConstantContext = true; if (!::Evaluate(Result.Val, Info, this)) return false; @@ -11625,6 +11626,7 @@ bool Expr::EvaluateWithSubstitution(APValue &Value, AS const Expr *This) const { Expr::EvalStatus Status; EvalInfo Info(Ctx, Status, EvalInfo::EM_ConstantExpressionUnevaluated); + Info.InConstantContext = true; LValue ThisVal; const LValue *ThisPtr = nullptr; @@ -11708,6 +11710,7 @@ bool Expr::isPotentialConstantExprUnevaluated(Expr *E, EvalInfo Info(FD->getASTContext(), Status, EvalInfo::EM_PotentialConstantExpressionUnevaluated); + Info.InConstantContext = true; // Fabricate a call stack frame to give the arguments a plausible cover story. ArrayRef Args; Modified: projects/capsicum-test/lib/clang/include/clang/Basic/Version.inc ============================================================================== --- projects/capsicum-test/lib/clang/include/clang/Basic/Version.inc Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/lib/clang/include/clang/Basic/Version.inc Sat Mar 16 04:02:19 2019 (r345219) @@ -8,4 +8,4 @@ #define CLANG_VENDOR "FreeBSD " -#define SVN_REVISION "355677" +#define SVN_REVISION "356034" Modified: projects/capsicum-test/lib/clang/include/lld/Common/Version.inc ============================================================================== --- projects/capsicum-test/lib/clang/include/lld/Common/Version.inc Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/lib/clang/include/lld/Common/Version.inc Sat Mar 16 04:02:19 2019 (r345219) @@ -7,4 +7,4 @@ #define LLD_REPOSITORY_STRING "FreeBSD" // - -#define LLD_REVISION_STRING "355677-1300002" +#define LLD_REVISION_STRING "356034-1300002" Modified: projects/capsicum-test/lib/clang/include/llvm/Support/VCSRevision.h ============================================================================== --- projects/capsicum-test/lib/clang/include/llvm/Support/VCSRevision.h Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/lib/clang/include/llvm/Support/VCSRevision.h Sat Mar 16 04:02:19 2019 (r345219) @@ -1,2 +1,2 @@ /* $FreeBSD$ */ -#define LLVM_REVISION "svn-r355677" +#define LLVM_REVISION "svn-r356034" Modified: projects/capsicum-test/lib/libc/sys/stat.2 ============================================================================== --- projects/capsicum-test/lib/libc/sys/stat.2 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/lib/libc/sys/stat.2 Sat Mar 16 04:02:19 2019 (r345219) @@ -48,7 +48,7 @@ .Ft int .Fn fstat "int fd" "struct stat *sb" .Ft int -.Fn fstatat "int fd" "const char *path" "struct stat *buf" "int flag" +.Fn fstatat "int fd" "const char *path" "struct stat *sb" "int flag" .Sh DESCRIPTION The .Fn stat Modified: projects/capsicum-test/lib/libgcc_eh/Makefile.inc ============================================================================== --- projects/capsicum-test/lib/libgcc_eh/Makefile.inc Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/lib/libgcc_eh/Makefile.inc Sat Mar 16 04:02:19 2019 (r345219) @@ -1,8 +1,8 @@ # $FreeBSD$ COMPILERRTDIR= ${SRCTOP}/contrib/compiler-rt -UNWINDINCDIR= ${SRCTOP}/contrib/llvm/projects/libunwind/include -UNWINDSRCDIR= ${SRCTOP}/contrib/llvm/projects/libunwind/src +UNWINDINCDIR= ${SRCTOP}/contrib/libunwind/include +UNWINDSRCDIR= ${SRCTOP}/contrib/libunwind/src STATIC_CFLAGS+=${PICFLAG} -fvisibility=hidden -DVISIBILITY_HIDDEN Modified: projects/capsicum-test/libexec/rc/network.subr ============================================================================== --- projects/capsicum-test/libexec/rc/network.subr Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/libexec/rc/network.subr Sat Mar 16 04:02:19 2019 (r345219) @@ -229,6 +229,11 @@ ifconfig_up() ${IFCONFIG_CMD} $1 up fi + if ! noafif $1 && afexists inet6; then + ipv6_accept_rtadv_up $1 + _cfg=0 + fi + if dhcpif $1; then if [ $_cfg -ne 0 ] ; then ${IFCONFIG_CMD} $1 up @@ -686,7 +691,6 @@ ipv6_up() ifalias ${_if} inet6 alias && _ret=0 ipv6_prefix_hostid_addr_common ${_if} alias && _ret=0 - ipv6_accept_rtadv_up ${_if} && _ret=0 return $_ret } @@ -1198,8 +1202,8 @@ ipv6_accept_rtadv_up() { if ipv6_autoconfif $1; then ${IFCONFIG_CMD} $1 inet6 accept_rtadv up - if ! checkyesno rtsold_enable; then - rtsol ${rtsol_flags} $1 + if [ -x /sbin/rtsol ]; then + /sbin/rtsol ${rtsol_flags} $1 fi fi } Modified: projects/capsicum-test/libexec/rc/rc.conf ============================================================================== --- projects/capsicum-test/libexec/rc/rc.conf Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/libexec/rc/rc.conf Sat Mar 16 04:02:19 2019 (r345219) @@ -208,7 +208,8 @@ ipfs_enable="NO" # Set to YES to enable saving and re ipfs_program="/sbin/ipfs" # where the ipfs program lives ipfs_flags="" # additional flags for ipfs pf_enable="NO" # Set to YES to enable packet filter (pf) -pf_rules="/etc/pf.conf" # rules definition file for pf +pf_rules="/etc/pf.conf" # rules definition file for pf (nonexistent + # by default) pf_program="/sbin/pfctl" # where the pfctl program lives pf_flags="" # additional flags for pfctl pflog_enable="NO" # Set to YES to enable packet filter logging Modified: projects/capsicum-test/libexec/rc/rc.d/Makefile ============================================================================== --- projects/capsicum-test/libexec/rc/rc.d/Makefile Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/libexec/rc/rc.d/Makefile Sat Mar 16 04:02:19 2019 (r345219) @@ -46,10 +46,6 @@ CONFS= DAEMON \ hostname \ iovctl \ ip6addrctl \ - ipfilter \ - ipfs \ - ipmon \ - ipnat \ ipsec \ ${_kadmind} \ ${_kdc} \ @@ -213,6 +209,13 @@ HASTPACKAGE= hast .if ${MK_INETD} != "no" CONFS+= inetd +.endif + +.if ${MK_IPFILTER} != "no" +CONFS+= ipfilter \ + ipfs \ + ipmon \ + ipnat .endif .if ${MK_IPFW} != "no" Modified: projects/capsicum-test/libexec/tftpd/tests/functional.c ============================================================================== --- projects/capsicum-test/libexec/tftpd/tests/functional.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/libexec/tftpd/tests/functional.c Sat Mar 16 04:02:19 2019 (r345219) @@ -1,7 +1,8 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2018 Alan Somers. All rights reserved. + * Copyright (c) 2018 Alan Somers. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: Modified: projects/capsicum-test/sbin/camcontrol/camcontrol.8 ============================================================================== --- projects/capsicum-test/sbin/camcontrol/camcontrol.8 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/sbin/camcontrol/camcontrol.8 Sat Mar 16 04:02:19 2019 (r345219) @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 3, 2017 +.Dd March 12, 2019 .Dt CAMCONTROL 8 .Os .Sh NAME @@ -78,6 +78,7 @@ .Op Fl b .Op Fl h .Op Fl H +.Op Fl l .Op Fl N .Op Fl q .Op Fl s @@ -544,6 +545,11 @@ or .Fl b . .It Fl H Print out the device size in human readable (base 10, 1K == 1000) format. +.It Fl l +Skip sending the SCSI READ CAPACITY (10) command. +Send only the SCSI READ CAPACITY (16) service action and report +its results. +When the two do not match, a quirk is needed to resolve the ambiguity. .It Fl N Print out the number of blocks in the device instead of the last logical block. Modified: projects/capsicum-test/sbin/camcontrol/camcontrol.c ============================================================================== --- projects/capsicum-test/sbin/camcontrol/camcontrol.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/sbin/camcontrol/camcontrol.c Sat Mar 16 04:02:19 2019 (r345219) @@ -203,7 +203,7 @@ static struct camcontrol_opts option_table[] = { {"load", CAM_CMD_STARTSTOP, CAM_ARG_START_UNIT | CAM_ARG_EJECT, NULL}, {"eject", CAM_CMD_STARTSTOP, CAM_ARG_EJECT, NULL}, {"reportluns", CAM_CMD_REPORTLUNS, CAM_ARG_NONE, "clr:"}, - {"readcapacity", CAM_CMD_READCAP, CAM_ARG_NONE, "bhHNqs"}, + {"readcapacity", CAM_CMD_READCAP, CAM_ARG_NONE, "bhHlNqs"}, {"reprobe", CAM_CMD_REPROBE, CAM_ARG_NONE, NULL}, #endif /* MINIMALISTIC */ {"rescan", CAM_CMD_RESCAN, CAM_ARG_NONE, NULL}, @@ -7162,7 +7162,7 @@ scsireadcapacity(struct cam_device *device, int argc, char *combinedopt, int task_attr, int retry_count, int timeout) { union ccb *ccb; - int blocksizeonly, humanize, numblocks, quiet, sizeonly, baseten; + int blocksizeonly, humanize, numblocks, quiet, sizeonly, baseten, longonly; struct scsi_read_capacity_data rcap; struct scsi_read_capacity_data_long rcaplong; uint64_t maxsector; @@ -7172,6 +7172,7 @@ scsireadcapacity(struct cam_device *device, int argc, blocksizeonly = 0; humanize = 0; + longonly = 0; numblocks = 0; quiet = 0; sizeonly = 0; @@ -7200,6 +7201,9 @@ scsireadcapacity(struct cam_device *device, int argc, humanize++; baseten++; break; + case 'l': + longonly++; + break; case 'N': numblocks++; break; @@ -7242,6 +7246,9 @@ scsireadcapacity(struct cam_device *device, int argc, goto bailout; } + if (longonly != 0) + goto long_only; + scsi_read_capacity(&ccb->csio, /*retries*/ retry_count, /*cbfcnp*/ NULL, @@ -7284,6 +7291,7 @@ scsireadcapacity(struct cam_device *device, int argc, if (maxsector != 0xffffffff) goto do_print; +long_only: scsi_read_capacity_16(&ccb->csio, /*retries*/ retry_count, /*cbfcnp*/ NULL, @@ -9515,7 +9523,7 @@ usage(int printlong) " camcontrol identify [dev_id][generic args] [-v]\n" " camcontrol reportluns [dev_id][generic args] [-c] [-l] [-r report]\n" " camcontrol readcap [dev_id][generic args] [-b] [-h] [-H] [-N]\n" -" [-q] [-s]\n" +" [-q] [-s] [-l]\n" " camcontrol start [dev_id][generic args]\n" " camcontrol stop [dev_id][generic args]\n" " camcontrol load [dev_id][generic args]\n" Modified: projects/capsicum-test/share/man/man4/ccr.4 ============================================================================== --- projects/capsicum-test/share/man/man4/ccr.4 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man4/ccr.4 Sat Mar 16 04:02:19 2019 (r345219) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 16, 2017 +.Dd March 11, 2019 .Dt CCR 4 .Os .Sh NAME @@ -49,13 +49,14 @@ The .Nm driver provides support for the crypto accelerator engine included on PCI Express Ethernet adapters based on the Chelsio Terminator 6 ASIC (T6). -The driver accelerates AES-CBC, AES-CTR, AES-GCM, AES-XTS, SHA1-HMAC, +The driver accelerates AES-CBC, AES-CTR, AES-GCM, AES-XTS, SHA1, SHA2-224, +SHA2-256, SHA2-384, SHA2-512, SHA1-HMAC, SHA2-224-HMAC, SHA2-256-HMAC, SHA2-384-HMAC, and SHA2-512-HMAC operations for .Xr crypto 4 and .Xr ipsec 4 . The driver also supports chaining one of AES-CBC, AES-CTR, or AES-XTS with -SHA1-HMAC, SHA2-256-HMAC, SHA2-384-HMAC, or SHA2-512-HMAC for +SHA1-HMAC, SHA2-224-HMAC, SHA2-256-HMAC, SHA2-384-HMAC, or SHA2-512-HMAC for encrypt-then-authenticate operations. For further hardware information and questions related to hardware requirements, see Modified: projects/capsicum-test/share/man/man4/mfi.4 ============================================================================== --- projects/capsicum-test/share/man/man4/mfi.4 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man4/mfi.4 Sat Mar 16 04:02:19 2019 (r345219) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 15, 2013 +.Dd March 13, 2019 .Dt MFI 4 .Os .Sh NAME @@ -84,6 +84,12 @@ then the driver will reduce its probe priority to allo .Cd mrsas to attach to the card instead of .Nm . +.Pp +.Nm +does not provide ATA TRIM support. +Refer to +.Cd mrsas +if TRIM support is required. .Sh HARDWARE The .Nm Modified: projects/capsicum-test/share/man/man4/mrsas.4 ============================================================================== --- projects/capsicum-test/share/man/man4/mrsas.4 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man4/mrsas.4 Sat Mar 16 04:02:19 2019 (r345219) @@ -34,7 +34,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 8, 2014 +.Dd Mar 13, 2019 .Dt MRSAS 4 .Os .Sh NAME @@ -117,6 +117,12 @@ at probe call for device id's 0x005B, 0x005D, and 0x005F so that .Nm does not take control of these devices without user intervention. +.Pp +Solid-state drives (SSD) get ATA TRIM support with +.Nm +if underlying adapter allows it. +This may require configuring SSD as Non-RAID drive +rather then JBOD virtual mode. .Sh HARDWARE The .Nm Modified: projects/capsicum-test/share/man/man5/pf.conf.5 ============================================================================== --- projects/capsicum-test/share/man/man5/pf.conf.5 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man5/pf.conf.5 Sat Mar 16 04:02:19 2019 (r345219) @@ -28,7 +28,7 @@ .\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 5, 2019 +.Dd March 10, 2019 .Dt PF.CONF 5 .Os .Sh NAME @@ -3053,6 +3053,8 @@ include = "include" filename Host name database. .It Pa /etc/pf.conf Default location of the ruleset file. +The file has to be created manually as it is not installed with a +standard installation. .It Pa /etc/pf.os Default location of OS fingerprints. .It Pa /etc/protocols Modified: projects/capsicum-test/share/man/man5/src.conf.5 ============================================================================== --- projects/capsicum-test/share/man/man5/src.conf.5 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man5/src.conf.5 Sat Mar 16 04:02:19 2019 (r345219) @@ -1,6 +1,6 @@ .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman. .\" $FreeBSD$ -.Dd March 6, 2019 +.Dd March 15, 2019 .Dt SRC.CONF 5 .Os .Sh NAME @@ -828,6 +828,11 @@ Set to not build GNU Set this option to include GNU extensions in .Xr bsdgrep 1 by linking against libgnuregex. +.It Va WITHOUT_GOOGLETEST +Set to neither build nor install +.Lb libgmock , +.Lb libgtest , +and dependent tests. .It Va WITHOUT_GPIO Set to not build .Xr gpioctl 8 @@ -1826,6 +1831,10 @@ When set, it enforces these options: When set, these options are also in effect: .Pp .Bl -inset -compact +.It Va WITHOUT_GOOGLETEST +(unless +.Va WITH_GOOGLETEST +is set explicitly) .It Va WITHOUT_TESTS_SUPPORT (unless .Va WITH_TESTS_SUPPORT @@ -1833,6 +1842,12 @@ is set explicitly) .El .It Va WITHOUT_TESTS_SUPPORT Set to disables the build of all test-related dependencies, including ATF. +When set, it enforces these options: +.Pp +.Bl -item -compact +.It +.Va WITHOUT_GOOGLETEST +.El .It Va WITHOUT_TEXTPROC Set to not build programs used for text processing. Modified: projects/capsicum-test/share/man/man7/ports.7 ============================================================================== --- projects/capsicum-test/share/man/man7/ports.7 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man7/ports.7 Sat Mar 16 04:02:19 2019 (r345219) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 12, 2019 +.Dd March 12, 2019 .Dt PORTS 7 .Os .Sh NAME @@ -587,7 +587,7 @@ The following command builds and installs Emacs. .Ed .It Sy Example 2\&: No Installing Dependencies with Xr pkg 8 .Pp -The following examples shows how to build and install a port without having to +The following example shows how to build and install a port without having to build its dependencies. Instead, the dependencies are downloaded via .Xr pkg 8 . @@ -603,6 +603,16 @@ The drawback is that .Xr pkg 8 offers only packages built with the default set of .Va OPTIONS . +.It Sy Example 3\&: No Building a Non-Default Flavor of a Port +.Pp +The following command builds a non-default flavor of a port. +(In this case +.Pa devel/py-pip +is going to be built with Python 3.7 support.) +.Bd -literal -offset 2n +.Li # Ic cd /usr/ports/devel/py-pip +.Li # Ic env FLAVOR=py37 make build +.Ed .El .Sh SEE ALSO .Xr make 1 , Modified: projects/capsicum-test/share/man/man9/VOP_INACTIVE.9 ============================================================================== --- projects/capsicum-test/share/man/man9/VOP_INACTIVE.9 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man9/VOP_INACTIVE.9 Sat Mar 16 04:02:19 2019 (r345219) @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 27, 2014 +.Dd March 15, 2019 .Dt VOP_INACTIVE 9 .Os .Sh NAME @@ -50,13 +50,16 @@ The vnode being reclaimed. .El .Pp .Fn VOP_INACTIVE -is called when the kernel is no longer using the vnode. +is usually called when the kernel is no longer using the vnode. +However, there is no guarantee that it will be called at all, for example if +the last reference was dropped while the vnode lock could not be upgraded +to exclusive without sleeping. This may be because the reference count reaches zero or it may be that the file system is being forcibly unmounted while there are open files. -It can be used to reclaim space for +It can be used to reclaim space on the last close of an .Sq open but deleted -files. +file. .Pp .Fn VOP_RECLAIM is called when a vnode is being reused for a different file system. Modified: projects/capsicum-test/share/man/man9/firmware.9 ============================================================================== --- projects/capsicum-test/share/man/man9/firmware.9 Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/man/man9/firmware.9 Sat Mar 16 04:02:19 2019 (r345219) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 2, 2008 +.Dd March 14, 2019 .Dt FIRMWARE 9 .Os .Sh NAME @@ -248,12 +248,11 @@ IxNpeMicrocode.fwo optional npe_fw \\ -r -d -o ${.TARGET} IxNpeMicrocode.dat" \\ no-implicit-rule \\ clean "IxNpeMicrocode.fwo" -IxNpeMicrocode.dat optional npe_fw \\ - dependency ".PHONY" \\ - compile-with "uudecode < $S/contrib/dev/npe/IxNpeMicrocode.dat.uu" \\ - no-obj no-implicit-rule \\ - clean "IxNpeMicrocode.dat" .Ed +.Pp +Firmware was previously committed to the source tree as uuencoded files, +but this is no longer required; the binary firmware file should be committed +to the tree as provided by the vendor. .Pp Note that generating the firmware modules in this way requires the availability of the following tools: Modified: projects/capsicum-test/share/misc/committers-doc.dot ============================================================================== --- projects/capsicum-test/share/misc/committers-doc.dot Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/share/misc/committers-doc.dot Sat Mar 16 04:02:19 2019 (r345219) @@ -92,6 +92,7 @@ skreuzer [label="Steven Kreuzer\nskreuzer@FreeBSD.org\ taras [label="Taras Korenko\ntaras@FreeBSD.org\n2010/06/25"] trhodes [label="Tom Rhodes\ntrhodes@FreeBSD.org\n2002/03/25"] wblock [label="Warren Block\nwblock@FreeBSD.org\n2011/09/12"] +ygy [label="Guangyuan Yang\nygy@FreeBSD.org\n2017/09/18"] zeising [label="Niclas Zeising\nzeising@FreeBSD.org\n2012/07/03"] # Here are the mentor/mentee relationships. Copied: projects/capsicum-test/share/mk/googletest.test.inc.mk (from r345218, head/share/mk/googletest.test.inc.mk) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/capsicum-test/share/mk/googletest.test.inc.mk Sat Mar 16 04:02:19 2019 (r345219, copy of r345218, head/share/mk/googletest.test.inc.mk) @@ -0,0 +1,15 @@ +# $FreeBSD$ + +# XXX: this should be defined in bsd.sys.mk +CXXSTD?= c++11 + +GTESTS_CXXFLAGS+= -DGTEST_HAS_POSIX_RE=1 +GTESTS_CXXFLAGS+= -DGTEST_HAS_PTHREAD=1 +GTESTS_CXXFLAGS+= -DGTEST_HAS_STREAM_REDIRECTION=1 +GTESTS_CXXFLAGS+= -frtti +GTESTS_CXXFLAGS+= -std=${CXXSTD} + +# XXX: src.libnames.mk should handle adding this directory. +GTESTS_CXXFLAGS+= -I${DESTDIR}${INCLUDEDIR}/private + +NO_WTHREAD_SAFETY= Copied: projects/capsicum-test/share/mk/googletest.test.mk (from r345218, head/share/mk/googletest.test.mk) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/capsicum-test/share/mk/googletest.test.mk Sat Mar 16 04:02:19 2019 (r345219, copy of r345218, head/share/mk/googletest.test.mk) @@ -0,0 +1,41 @@ +# $FreeBSD$ +# +# You must include bsd.test.mk instead of this file from your Makefile. +# +# Logic to build and install GoogleTest based test programs. +# +# GoogleTest is a C++ test framework, thus, it does not describe/articulate how +# to write tests in other languages, e.g., C or shell, unlike the ATF, plain, +# and TAP raw test interfaces. +# +# For now this is a thin wrapper around the `plain` test interface, but in the +# future this will rely on a newer version of kyua which will integrate in +# GoogleTest support. + +.if !target(____) +.error googletest.test.mk cannot be included directly. +.endif + +# List of GoogleTest test programs to build. +# +# Programs listed here are built according to the semantics of bsd.progs.mk for +# PROGS_CXX. +# +# Test programs registered in this manner are set to be installed into TESTSDIR +# (which should be overridden by the Makefile) and are not required to provide a +# manpage. +GTESTS?= + +.if !empty(GTESTS) +.include + +PROGS_CXX+= ${GTESTS} +_TESTS+= ${GTESTS} +.for _T in ${GTESTS} +BINDIR.${_T}= ${TESTSDIR} +CXXFLAGS.${_T}+= ${GTESTS_CXXFLAGS} +MAN.${_T}?= # empty +SRCS.${_T}?= ${_T}.cc +TEST_INTERFACE.${_T}= plain +.endfor +.endif Modified: projects/capsicum-test/stand/common/bcache.c ============================================================================== --- projects/capsicum-test/stand/common/bcache.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/stand/common/bcache.c Sat Mar 16 04:02:19 2019 (r345219) @@ -44,9 +44,9 @@ __FBSDID("$FreeBSD$"); /* #define BCACHE_DEBUG */ #ifdef BCACHE_DEBUG -# define DEBUG(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) +# define DPRINTF(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) #else -# define DEBUG(fmt, args...) +# define DPRINTF(fmt, args...) #endif struct bcachectl @@ -369,7 +369,7 @@ bcache_strategy(void *devdata, int rw, daddr_t blk, si /* bypass large requests, or when the cache is inactive */ if (bc == NULL || ((size * 2 / bcache_blksize) > bcache_nblks)) { - DEBUG("bypass %zu from %qu", size / bcache_blksize, blk); + DPRINTF("bypass %zu from %qu", size / bcache_blksize, blk); bcache_bypasses++; rw &= F_MASK; return (dd->dv_strategy(dd->dv_devdata, rw, blk, size, buf, rsize)); @@ -444,7 +444,7 @@ bcache_insert(struct bcache *bc, daddr_t blkno) cand = BHASH(bc, blkno); - DEBUG("insert blk %llu -> %u # %d", blkno, cand, bcache_bcount); + DPRINTF("insert blk %llu -> %u # %d", blkno, cand, bcache_bcount); bc->bcache_ctl[cand].bc_blkno = blkno; bc->bcache_ctl[cand].bc_count = bcache_bcount++; } @@ -461,7 +461,7 @@ bcache_invalidate(struct bcache *bc, daddr_t blkno) if (bc->bcache_ctl[i].bc_blkno == blkno) { bc->bcache_ctl[i].bc_count = -1; bc->bcache_ctl[i].bc_blkno = -1; - DEBUG("invalidate blk %llu", blkno); + DPRINTF("invalidate blk %llu", blkno); } } Modified: projects/capsicum-test/stand/common/disk.c ============================================================================== --- projects/capsicum-test/stand/common/disk.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/stand/common/disk.c Sat Mar 16 04:02:19 2019 (r345219) @@ -38,9 +38,9 @@ __FBSDID("$FreeBSD$"); #include "disk.h" #ifdef DISK_DEBUG -# define DEBUG(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) +# define DPRINTF(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) #else -# define DEBUG(fmt, args...) +# define DPRINTF(fmt, args...) #endif struct open_disk { @@ -231,7 +231,7 @@ disk_open(struct disk_devdesc *dev, uint64_t mediasize rc = 0; od = (struct open_disk *)malloc(sizeof(struct open_disk)); if (od == NULL) { - DEBUG("no memory"); + DPRINTF("no memory"); return (ENOMEM); } dev->dd.d_opendata = od; @@ -252,14 +252,14 @@ disk_open(struct disk_devdesc *dev, uint64_t mediasize slice = dev->d_slice; partition = dev->d_partition; - DEBUG("%s unit %d, slice %d, partition %d => %p", + DPRINTF("%s unit %d, slice %d, partition %d => %p", disk_fmtdev(dev), dev->dd.d_unit, dev->d_slice, dev->d_partition, od); /* Determine disk layout. */ od->table = ptable_open(&partdev, mediasize / sectorsize, sectorsize, ptblread); if (od->table == NULL) { - DEBUG("Can't read partition table"); + DPRINTF("Can't read partition table"); rc = ENXIO; goto out; } @@ -315,7 +315,7 @@ disk_open(struct disk_devdesc *dev, uint64_t mediasize table = ptable_open(dev, part.end - part.start + 1, od->sectorsize, ptblread); if (table == NULL) { - DEBUG("Can't read BSD label"); + DPRINTF("Can't read BSD label"); rc = ENXIO; goto out; } @@ -343,12 +343,12 @@ out: if (od->table != NULL) ptable_close(od->table); free(od); - DEBUG("%s could not open", disk_fmtdev(dev)); + DPRINTF("%s could not open", disk_fmtdev(dev)); } else { /* Save the slice and partition number to the dev */ dev->d_slice = slice; dev->d_partition = partition; - DEBUG("%s offset %lld => %p", disk_fmtdev(dev), + DPRINTF("%s offset %lld => %p", disk_fmtdev(dev), (long long)dev->d_offset, od); } return (rc); @@ -360,7 +360,7 @@ disk_close(struct disk_devdesc *dev) struct open_disk *od; od = (struct open_disk *)dev->dd.d_opendata; - DEBUG("%s closed => %p", disk_fmtdev(dev), od); + DPRINTF("%s closed => %p", disk_fmtdev(dev), od); ptable_close(od->table); free(od); return (0); Modified: projects/capsicum-test/stand/common/interp_forth.c ============================================================================== --- projects/capsicum-test/stand/common/interp_forth.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/stand/common/interp_forth.c Sat Mar 16 04:02:19 2019 (r345219) @@ -39,9 +39,9 @@ INTERP_DEFINE("4th"); /* #define BFORTH_DEBUG */ #ifdef BFORTH_DEBUG -#define DEBUG(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) +#define DPRINTF(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args) #else -#define DEBUG(fmt, args...) +#define DPRINTF(fmt, args...) #endif /* @@ -128,7 +128,7 @@ bf_command(FICL_VM *vm) vmUpdateTib(vm, tail + len); } } - DEBUG("cmd '%s'", line); + DPRINTF("cmd '%s'", line); command_errmsg = command_errbuf; command_errbuf[0] = 0; @@ -305,7 +305,7 @@ bf_run(const char *line) */ result = ficlExec(bf_vm, __DECONST(char *, line)); - DEBUG("ficlExec '%s' = %d", line, result); + DPRINTF("ficlExec '%s' = %d", line, result); switch (result) { case VM_OUTOFTEXT: case VM_ABORTQ: Modified: projects/capsicum-test/stand/common/part.c ============================================================================== --- projects/capsicum-test/stand/common/part.c Sat Mar 16 03:58:23 2019 (r345218) +++ projects/capsicum-test/stand/common/part.c Sat Mar 16 04:02:19 2019 (r345219) @@ -44,9 +44,9 @@ __FBSDID("$FreeBSD$"); #include #ifdef PART_DEBUG -#define DEBUG(fmt, args...) printf("%s: " fmt "\n", __func__, ## args) +#define DPRINTF(fmt, args...) printf("%s: " fmt "\n", __func__, ## args) #else -#define DEBUG(fmt, args...) +#define DPRINTF(fmt, args...) #endif #ifdef LOADER_GPT_SUPPORT @@ -155,34 +155,34 @@ gpt_checkhdr(struct gpt_hdr *hdr, uint64_t lba_self, u uint32_t sz, crc; if (memcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) != 0) { - DEBUG("no GPT signature"); + DPRINTF("no GPT signature"); return (NULL); } sz = le32toh(hdr->hdr_size); if (sz < 92 || sz > sectorsize) { - DEBUG("invalid GPT header size: %d", sz); + DPRINTF("invalid GPT header size: %d", sz); return (NULL); } crc = le32toh(hdr->hdr_crc_self); hdr->hdr_crc_self = 0; if (crc32(hdr, sz) != crc) { - DEBUG("GPT header's CRC doesn't match"); + DPRINTF("GPT header's CRC doesn't match"); return (NULL); } hdr->hdr_crc_self = crc; hdr->hdr_revision = le32toh(hdr->hdr_revision); if (hdr->hdr_revision < GPT_HDR_REVISION) { - DEBUG("unsupported GPT revision %d", hdr->hdr_revision); + DPRINTF("unsupported GPT revision %d", hdr->hdr_revision); return (NULL); } hdr->hdr_lba_self = le64toh(hdr->hdr_lba_self); if (hdr->hdr_lba_self != lba_self) { - DEBUG("self LBA doesn't match"); + DPRINTF("self LBA doesn't match"); return (NULL); } hdr->hdr_lba_alt = le64toh(hdr->hdr_lba_alt); if (hdr->hdr_lba_alt == hdr->hdr_lba_self) { - DEBUG("invalid alternate LBA"); + DPRINTF("invalid alternate LBA"); return (NULL); } hdr->hdr_entries = le32toh(hdr->hdr_entries); @@ -190,7 +190,7 @@ gpt_checkhdr(struct gpt_hdr *hdr, uint64_t lba_self, u if (hdr->hdr_entries == 0 || hdr->hdr_entsz < sizeof(struct gpt_ent) || sectorsize % hdr->hdr_entsz != 0) { - DEBUG("invalid entry size or number of entries"); + DPRINTF("invalid entry size or number of entries"); return (NULL); } hdr->hdr_lba_start = le64toh(hdr->hdr_lba_start); @@ -214,7 +214,7 @@ gpt_checktbl(const struct gpt_hdr *hdr, uint8_t *tbl, /* Check CRC only when buffer size is enough for table. */ if (hdr->hdr_crc_table != crc32(tbl, hdr->hdr_entries * hdr->hdr_entsz)) { - DEBUG("GPT table's CRC doesn't match"); + DPRINTF("GPT table's CRC doesn't match"); return (-1); } } @@ -310,7 +310,7 @@ ptable_gptread(struct ptable *table, void *dev, diskre table->type = PTABLE_NONE; goto out; } - DEBUG("GPT detected"); + DPRINTF("GPT detected"); size = MIN(hdr.hdr_entries * hdr.hdr_entsz, MAXTBLSZ * table->sectorsize); @@ -346,7 +346,7 @@ ptable_gptread(struct ptable *table, void *dev, diskre entry->flags = le64toh(ent->ent_attr); memcpy(&entry->type.gpt, &ent->ent_type, sizeof(uuid_t)); STAILQ_INSERT_TAIL(&table->entries, entry, entry); - DEBUG("new GPT partition added"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Sat Mar 16 03:47:16 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DF1E9153FA02 for ; Sat, 16 Mar 2019 03:47:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7DDD96C01A; Sat, 16 Mar 2019 03:47:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 68C711C5D7; Sat, 16 Mar 2019 03:47:16 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x2G3lGvG087990; Sat, 16 Mar 2019 03:47:16 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x2G3lGD1087988; Sat, 16 Mar 2019 03:47:16 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201903160347.x2G3lGD1087988@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Enji Cooper Date: Sat, 16 Mar 2019 03:47:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r345217 - projects/capsicum-test/contrib/capsicum-test X-SVN-Group: projects X-SVN-Commit-Author: ngie X-SVN-Commit-Paths: projects/capsicum-test/contrib/capsicum-test X-SVN-Commit-Revision: 345217 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 7DDD96C01A X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.94 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.95)[-0.945,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 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: Sat, 16 Mar 2019 03:47:17 -0000 Author: ngie Date: Sat Mar 16 03:47:15 2019 New Revision: 345217 URL: https://svnweb.freebsd.org/changeset/base/345217 Log: Fix more `-Wunused-parameter` issues Modified: projects/capsicum-test/contrib/capsicum-test/capmode.cc projects/capsicum-test/contrib/capsicum-test/procdesc.cc Modified: projects/capsicum-test/contrib/capsicum-test/capmode.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/capmode.cc Sat Mar 16 03:37:47 2019 (r345216) +++ projects/capsicum-test/contrib/capsicum-test/capmode.cc Sat Mar 16 03:47:15 2019 (r345217) @@ -627,7 +627,7 @@ FORK_TEST(Capmode, NewThread) { } static int had_signal = 0; -static void handle_signal(int x) { had_signal = 1; } +static void handle_signal(int) { had_signal = 1; } FORK_TEST(Capmode, SelfKill) { pid_t me = getpid(); Modified: projects/capsicum-test/contrib/capsicum-test/procdesc.cc ============================================================================== --- projects/capsicum-test/contrib/capsicum-test/procdesc.cc Sat Mar 16 03:37:47 2019 (r345216) +++ projects/capsicum-test/contrib/capsicum-test/procdesc.cc Sat Mar 16 03:47:15 2019 (r345217) @@ -223,7 +223,7 @@ TEST(Pdfork, NonProcessDescriptor) { close(fd); } -static void *SubThreadMain(void *data) { +static void *SubThreadMain(void *) { while (true) { if (verbose) fprintf(stderr, " subthread: \"I aten't dead\"\n"); usleep(100000); @@ -231,7 +231,7 @@ static void *SubThreadMain(void *data) { return NULL; } -static void *ThreadMain(void *data) { +static void *ThreadMain(void *) { int pd; pid_t child = pdfork(&pd, 0); if (child == 0) {