From owner-p4-projects@FreeBSD.ORG Sun Jun 12 16:39:14 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8CC5E1065675; Sun, 12 Jun 2011 16:39:14 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 36AF01065670 for ; Sun, 12 Jun 2011 16:39:14 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 2406C8FC0A for ; Sun, 12 Jun 2011 16:39:14 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5CGdEBx087003 for ; Sun, 12 Jun 2011 16:39:14 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5CGdDcN087000 for perforce@freebsd.org; Sun, 12 Jun 2011 16:39:13 GMT (envelope-from rene@FreeBSD.org) Date: Sun, 12 Jun 2011 16:39:13 GMT Message-Id: <201106121639.p5CGdDcN087000@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194639 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Jun 2011 16:39:14 -0000 http://p4web.freebsd.org/@@194639?ac=10 Change 194639 by rene@rene_acer on 2011/06/12 16:38:19 MFen handbook/disks 1.302 -> 1.309 (HAST section is work-in-progress, 419 lines left) Affected files ... .. //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#24 edit Differences ... ==== //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#24 (text+ko) ==== @@ -4,7 +4,7 @@ $FreeBSD: doc/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml,v 1.20 2011/01/29 22:37:20 remko Exp $ %SOURCE% en_US.ISO8859-1/books/handbook/disks/chapter.sgml - %SRCID% 1.302 + %SRCID% 1.309 --> @@ -261,7 +261,9 @@ en schijven tot 4 TB. Het formaat van &man.sunlabel.8; is beperkt tot 2^32-1 sectoren per partitie en 8 partities per schijf, in totaal dus 16 TB. Voor grotere schijven kan - &man.gpt.8; worden gebruikt. + &man.gpart.8; worden gebruikt om GPT-partities aan te + maken. GPT heeft het bijkomende voordeel dat het niet + tot 4 slices beperkt is. &man.sysinstall.8; gebruiken @@ -4502,6 +4504,259 @@ + + + + + + Daniel + Gerzo + Bijgedragen door + + + + + Freddie + Cash + Met informatie van + + + Pawel Jakub + Dawidek + + + Michael W. + Lucas + + + Viktor + Petersson + + + + + + Highly Available Storage (HAST) + + + HAST + + hoge beschikbaarheid + + + + Overzicht + + Hoge beschikbaarheid is een van de hoofdzaken in serieuze zakelijke + toepassingen en hoog beschikbare opslag is een sleutelonderdeel in zulke + omgevingen. Hoog beschikbare opslag, of HASTHighly Available STorage, werd + ontwikkeld door &a.pjd; als een raamwerk dat transparante opslag van + dezelfde gegevens toestaat over fysiek gescheiden machines die verbonden + zijn door een TCP/IP-netwerk. HAST kan gezien worden + als een netwerkgebaseerde RAID1 (spiegel) en is vergelijkbaar met het + DRBD® opslagsysteem bekend van het GNU/&linux; platform. In + combinatie met andere eigenschappen voor hoge beschikbaarheid van &os; + zoals CARP maakt HAST het mogelijk + om een opslagcluster met hoge beschikbaarheid te bouwen dat resistent is + tegen falende hardware. + + Na het lezen van deze sectie weet u: + + + + Wat HAST is, hoe het werkt en welke + mogelijkeheden het biedt. + + + + Hoe HAST op &os; te op te zetten en te + gebruiken. + + + + Hoe CARP en &man.devd.8; te integreren om een + robuust opslagsysteem te bouwen. + + + + Voor het lezen van deze sectie dient u: + + + + De beginselen van &unix; en &os; te begrijpen (). + + + + Te weten hoe de netwerkinterfaces en andere kerndeelsystemen van + &os; in te stellen (). + + + + Netwerken op &os; goed te begrijpen (). + + + + &os; 8.1-RELEASE of nieuwer te gebruiken. + + + + Het HAST-project werd gesponsord door The &os; + Foundation met ondersteuning van + OMCnet Internet Service GmbH en TransIP BV. + + + + Eigenschappen van HAST + + De belangrijkste eigenschappen van HAST zijn: + + + + Het kan gebruikt worden om I/O-fouten op lokale harde schijven + te maskeren. + + + + Agnostisch qua bestandssysteem, dus het staat toe om elk + bestandssysteem dat door &os; wordt ondersteund te gebruiken. + + + + Efficiënte en snelle hersynchronisatie, alleen de blokken + die zijn veranderd toen een knooppunt uitstond worden + gesynchroniseerd. + + + + + + Het kan gebruikt worden in reeds uitgerolde omgevingen om + aanvullende redundantie toe te voegen. + + + + Samen met CARP, + Heartbeat of andere gereedschappen kan + het worden gebruikt om een robuust en duurzaam opslagsysteem te + bouwen. + + + + + + Werking van HAST + + Omdat HAST synchrone replicatie op blockniveau + van elk opslagmedium naar verscheidene machines biedt, heeft het + tenminste twee knooppunten (fysieke machines) nodig — het + primaire (ook bekend als meester) + knooppunt en het secundaire (slaaf + ) knooppunt. Tezamen worden deze twee machines een cluster genoemd. + + + HAST is momenteel beperkt tot een totaal van twee + clusterknooppunten. + + + Aangezien HAST in een primaire-secundaire + configuratie werkt, kan er op elk moment slechts één van + de clusterknooppunten actief zijn. Het primaire + knooppunt, ookwel actief, is degene die alle + I/O-verzoeken aan apparaten die door HAST worden + beheerd afhandelt. Het secundaire knooppunt wordt + dan automatisch gesynchroniseerd vanuit het primaire + knooppunt. + + De fysieke componenten van het HAST-systeem + zijn: + + + + lokale schijf (op primair knooppunt) + + + + schijf op verre machine (secundair knooppunt) + + + + HAST werkt synchroon op blokniveau, wat het + transparant maakt voor bestandssystemen en toepassingen. + HAST biedt reguliere GEOM-aanbieders aan in /dev/hast/ voor zowel andere + gereedschappen als toepassingen, er is dus geen verschil tussen het + gebruik van apparaten die door HAST worden geleverd + en rauwe schijven, partities, etc. + + Elke bewerking met betrekking tot schrijven, verwijderen of spoelen + wordt naar de plaatselijke schijf en over TCP/IP naar de verre schijf + gestuurd. Elke leesbewerking wordt gedaan door de plaatselijke schijf, + tenzij de plaatselijke schijf niet actueel is of er een I/O-fout + optreed. In zulke gevallen wordt de leesbewerking naar het secundaire + knooppunt gestuurd. + + + Synchronisatie- en replicatiemodi + + HAST probeert om een snel herstel van fouten + te leveren. Om deze reden is het heel belangrijk om de + synchronisatietijd te verkorten nadat een knooppunt is hersteld van + een uitval. Om een snelle synchronisatie te leveren, beheert + HAST op de schijf een bitmap van verschillen en + synchroniseert het die alleen tijdens een reguliere synchronisatie + (met uitzondering van de initiëe synchronisatie). + + Er zijn vele manieren om synchronisatie af te handelen. + HAST implementeert meerdere replicatiemodi om + verschillende synchronisatiemethodes af te handelen: + + + + memsync: rapporteer een schrijfbewerking + als voltooid wanneer de plaatselijke schrijfbewerking klaar is en + wanneer het verre knooppunt de gegevensaankomst bevestigt, maar + voordat het de gegevens daadwerkelijk heeft opgeslagen. De + gegevens op het verre knooppunt zullen meteen na het versuren van + de bevestiging worden opgeslagen. Deze modus is bedoeld om + latency te verminderen en nog steeds een zeer goede + betrouwbaarheid te bieden. De replicatiemodus + memsync is momenteel niet + geïmplementeerd. + + + + fullsync: rapporteer een schrijfbewerking + als voltooid wanneer zowel de plaatselijke en de verre + schrijfbewerking voltooid zijn. Dit is de veiligste en traagste + replicatiemodus. Dit is de standaardmodus. + + + + async: rapporteer de schrijfbewerking als + voltooid wanneer de plaatselijke schrijfbewerking klaar is. Dit + is de snelste en gevaarlijkste replicatiemodus. Het dient + gebruikt te worden wanneer er naar een ver knooppunt wordt + gerepliceerd en de latency te hoog is voor andere modi. De + replicatiemodus async is momenteel niet + geïmplementeerd. + + + + Momenteel wordt alleen de replicatiemodus + fullsync ondersteund. + + + + + + Herstellen van de Split-brain-conditie + + + + + From owner-p4-projects@FreeBSD.ORG Mon Jun 13 14:15:08 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B32221065672; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7577E106566C for ; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 62E5A8FC13 for ; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DEF8Nf054513 for ; Mon, 13 Jun 2011 14:15:08 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DEF8Ld054510 for perforce@freebsd.org; Mon, 13 Jun 2011 14:15:08 GMT (envelope-from rene@FreeBSD.org) Date: Mon, 13 Jun 2011 14:15:08 GMT Message-Id: <201106131415.p5DEF8Ld054510@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194675 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 14:15:09 -0000 http://p4web.freebsd.org/@@194675?ac=10 Change 194675 by rene@rene_acer on 2011/06/13 14:15:04 handbook/disks: finish update modulo spellcheck Affected files ... .. //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#26 edit Differences ... ==== //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#26 (text+ko) ==== @@ -4910,12 +4910,265 @@ hastd_enable="YES" - + + Failover-configuratie + + Het doel van dit voorbeeld is om een robuust opslagsysteem te + bouwen dat resistent is tegen het falen van alle knooppunten. De + hoofdtaak is het oplossen van een scenario waarin een + primair knooppunt van het cluster faalt. Mocht dit + gebeuren, dan neemt het secundaire knooppunt het + feilloos over, controleert en koppelt het het bestandssysteem aan, en + gaat het verder zonder dat er een bit aan gegevens ontbreekt. + + Om deze taak voor elkaar te krijgen, is het nodig om een andere + eigenschap te gebruiken die beschikbaar is op &os; en dat voorziet in + automatische failover van de IP-laag — CARP. + CARP staat voor Common Address Redundancy Protocol + en maakt het mogelijk dat meerdere hosts in hetzelfde netwerksegment + een IP-adres delen. Stel CARP in op beide + knooppunten van het cluster volgens de documentatie die beschikbaar is + in . Nadat deze taak voltooid is, zou elk + knooppunt een eigen interface carp0 met een + gedeeld IP-adres 172.16.0.254 moeten + hebben. Het primaire HAST-knooppunt van het + cluster moet het meester-CARP-knooppunt + zijn. + + De HAST-pool die in de vorige sectie is gemaakt + is nu klaar om geëxporteerd te worden naar de andere hosts op het + netwerk. Dit kan gedaan worden door het te exporteren over + NFS, Samba, etc., door + gebruik te maken van het gedeelde IP-adres + 172.16.0.254. Het enige overgebleven + probleem is een automatische failover in het geval dat het primaire + knooppunt het begeeft. + + Als een CARP-interface aan- of uitgaat, + genereert &os; een &man.devd.8;-gebeurtenis, wat het mogelijk maakt om + toestandsveranderingen op de CARP-interfaces in de + gaten te houden. Een toestandsverandering op het + CARP-interface geeft aan dat een van de knooppunten + het begaf of weer online kwam. In zulke gevallen is het mogelijk om + een script te draaien dat automatisch de failover afhandelt. + + Om de toestandsverandering op de + CARP-interfaces af te vangen, dient de volgende + configuratie te worden toegevoegd aan het bestand + /etc/devd.conf op elk knooppunt: + + notify 30 { + match "system" "IFNET"; + match "subsystem" "carp0"; + match "type" "LINK_UP"; + action "/usr/local/sbin/carp-hast-switch master"; +}; + +notify 30 { + match "system" "IFNET"; + match "subsystem" "carp0"; + match "type" "LINK_DOWN"; + action "/usr/local/sbin/carp-hast-switch slave"; +}; + + Draai het volgende commando op beide knooppunten om de nieuwe + configuratie te laten gelden: + + &prompt.root; /etc/rc.d/devd restart + + Als het interface carp0 aan of uit gaat + (i.e. de toestand van het interface verandert), genreert het systeem + een notificatie wat het subsysteem &man.devd.8; in staat stelt om een + willekeurig script te draaien, in dit geval + /usr/local/sbin/carp-hast-switch. Dit is het + script dat de automatische failover afhandelt. Raadpleeg de + handleidingpagina &man.devd.conf.5; voor verdere uitleg over de + bovenstaande configuratie van &man.devd.8;. + + Het volgende zou een voorbeeld van zo'n script kunnen zijn: + + #!/bin/sh +# Origineel script door Freddie Cash <fjwcash@gmail.com> +# Gewijzigd door Michael W. Lucas <mwlucas@BlackHelicopters.org> +# en Viktor Petersson <vpetersson@wireload.net> + +# De namen van de HAST-hulpbronnen, zoals vermeld in /etc/hast.conf +resources="test" + +# vertraging voor het aankoppelen van de HAST-hulpbron na het worden van meester +# doe een gok +delay=3 + +# logging +log="local0.debug" +name="carp-hast" + +# einde van gebruiker-instelbare dingen + +case "$1" in + master) + logger -p $log -t $name "Omschakelen naar primaire aanbieder voor ${resources}." + sleep ${delay} + + # Wacht totdat de "hastd secondary" processen zijn gestopt + for disk in ${resources}; do + while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do + sleep 1 + done + + # Verwissel de rol voor elke schijf + hastctl role primary ${disk} + if [ $? -ne 0 ]; then + logger -p $log -t $name "Omschakelen van rol naar primair voor hulpbron ${disk} mislukt." + exit 1 + fi + done + + # Wacht totdat de apparaten /dev/hast/* verschijnen + for disk in ${resources}; do + for I in $( jot 60 ); do + [ -c "/dev/hast/${disk}" ] && break + sleep 0.5 + done + + if [ ! -c "/dev/hast/${disk}" ]; then + logger -p $log -t $name "GEOM-aanbieder /dev/hast/${disk} is niet verschenen." + exit 1 + fi + done + + logger -p $log -t $name "Rollen van HAST-hulpbronnen ${resources} omgeschakeld naar primair." + + + logger -p $log -t $name "Schijven aankoppelen." + for disk in ${resources}; do + mkdir -p /hast/${disk} + fsck -p -y -t ufs /dev/hast/${disk} + mount /dev/hast/${disk} /hast/${disk} + done + + ;; + + slave) + logger -p $log -t $name "Omschakelen naar secundaire aanbieder voor ${resources}." + + # Schakel de rollen van de HAST-hulpbronnen om + for disk in ${resources}; do + if ! mount | grep -q "^/dev/hast/${disk} on " + then + else + umount -f /hast/${disk} + fi + sleep $delay + hastctl role secondary ${disk} 2>&1 + if [ $? -ne 0 ]; then + logger -p $log -t $name "Omschakelen van rol naar secundair voor hulpbron ${disk} mislukt." + exit 1 + fi + logger -p $log -t $name "Rol van hulpbron ${disk} omgeschakeld naar secundair." + done + ;; +esac + + In een notendop doet het script het volgende wanneer een knooppunt + meester / primair wordt: + + + + De HAST-pools opwaarderen naar primair op + een gegeven knooppunt. + + + + Het bestandssysteem onder de HAST-pool + controleren. + + + + De pools op de juiste plaats aankoppelen. + + + + Wanneer een knooppunt backup / + secundair wordt: + + + + De HAST-pools afkoppelen. + + + + De HAST-pools degraderen naar + secundair. + + + + + Houd in gedachte dat dit slechts een voorbeeldscript is dat + dienst doet om aan te tonen dat alles werkt. Het behandeld niet + alle mogelijke situaties en kan op elke manier worden uitgebreid of + veranderd, het kan bijvoorbeeld benodigde diensten starten en + stoppen. + + + + Voor het doel van dit voorbeeld hebbwn we een standaard + UFS-bestandssysteem gebruikt. Om de tijd die nodig is voor herstel + te verkorten, kan een bestandssysteem met UFS-journalling of ZFS + worden gebruikt. + + + Meer gedetailleerde informatie met aanvullende voorbeelden kunnen + gevonden worden op de HAST Wiki-pagina. + + + + + Problemen oplossen + + + Algemene tips om problemen op te lossen + + HAST zou over het algemeen zonder problemen + moeten werken, maar net als met elk ander software-product zijn er + momenten waarop het anders werkt dan het zou moeten. De oorzaken van + de problemen kunnen verschillen, maar de vuistregel is om ervoor te + zorgen dat de klokken zijn gesynchroniseerd op alle knooppunten in het + cluster. + + Het debug-niveau van &man.hastd.8; dient verhoogd te worden + wanneer problemen met HAST worden verholpen. Dit + kan gedaan worden door het daemon &man.hastd.8; met het argument + -d op te starten. Merk op dat dit argument + meerdere malen kan worden opgegeven om het debug-niveau nog verder op + te hogen. Op deze manier kan veel nuttige informatie worden vergaard. + Het is ook de moeite te overwegen om het argument + -F te gebruiken, dat het daemon &man.hastd.8; in de + voorgrond zal starten. + + Herstellen van de Split-brain-conditie - - + Het gevolg van de situatie waarin beide knooppunten van het + cluster niet met elkaar kunnen communiceren en beide als primaire + knooppunten zijn ingesteld wordt split-brain + genoemd. Dit is een gevaarlijke situatie omdat het beide knooppunten + in staat stelt om incompatibele veranderingen aan de gegevens te + maken. Deze situatie dient handmatig door de systeembeheerder te + worden afgehandeld. + + Om deze situatie op te lossen moet de beheerder besluiten welk + knooppunt de belangrijkere veranderingen bevat (of ze handmatig + samenvoegen) en HAST de volledige synchronisatie + op het knooppunt dat de kapotte gegevens heeft laten uitvoeren. Voer + hiervoor de volgende commando's uit op het knooppunt dat opnieuw + gesynchroniseert moet worden: + + &prompt.root; hastctl role init <resource> +&prompt.root; hastctl create <resource> +&prompt.root; hastctl role secondary <resource> From owner-p4-projects@FreeBSD.ORG Mon Jun 13 14:31:35 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 445021065672; Mon, 13 Jun 2011 14:31:35 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E3408106566C for ; Mon, 13 Jun 2011 14:31:34 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id C93AE8FC16 for ; Mon, 13 Jun 2011 14:31:34 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DEVYkX058751 for ; Mon, 13 Jun 2011 14:31:34 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DEVYrg058748 for perforce@freebsd.org; Mon, 13 Jun 2011 14:31:34 GMT (envelope-from rene@FreeBSD.org) Date: Mon, 13 Jun 2011 14:31:34 GMT Message-Id: <201106131431.p5DEVYrg058748@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194676 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 14:31:35 -0000 http://p4web.freebsd.org/@@194676?ac=10 Change 194676 by rene@rene_acer on 2011/06/13 14:31:30 Spelling fixes for the HAST section. Affected files ... .. //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#27 edit Differences ... ==== //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#27 (text+ko) ==== @@ -4566,7 +4566,7 @@ Wat HAST is, hoe het werkt en welke - mogelijkeheden het biedt. + mogelijkheden het biedt. @@ -4633,7 +4633,7 @@ @@ -4655,7 +4655,7 @@ Werking van HAST - Omdat HAST synchrone replicatie op blockniveau + Omdat HAST synchrone replicatie op blokniveau van elk opslagmedium naar verscheidene machines biedt, heeft het tenminste twee knooppunten (fysieke machines) nodig — het primaire (ook bekend als meester) @@ -4725,7 +4725,7 @@ als voltooid wanneer de plaatselijke schrijfbewerking klaar is en wanneer het verre knooppunt de gegevensaankomst bevestigt, maar voordat het de gegevens daadwerkelijk heeft opgeslagen. De - gegevens op het verre knooppunt zullen meteen na het versuren van + gegevens op het verre knooppunt zullen meteen na het versturen van de bevestiging worden opgeslagen. Deze modus is bedoeld om latency te verminderen en nog steeds een zeer goede betrouwbaarheid te bieden. De replicatiemodus @@ -4977,7 +4977,7 @@ &prompt.root; /etc/rc.d/devd restart Als het interface carp0 aan of uit gaat - (i.e. de toestand van het interface verandert), genreert het systeem + (i.e. de toestand van het interface verandert), genereert het systeem een notificatie wat het subsysteem &man.devd.8; in staat stelt om een willekeurig script te draaien, in dit geval /usr/local/sbin/carp-hast-switch. Dit is het @@ -5112,7 +5112,7 @@ - Voor het doel van dit voorbeeld hebbwn we een standaard + Voor het doel van dit voorbeeld hebben we een standaard UFS-bestandssysteem gebruikt. Om de tijd die nodig is voor herstel te verkorten, kan een bestandssysteem met UFS-journalling of ZFS worden gebruikt. @@ -5164,7 +5164,7 @@ samenvoegen) en HAST de volledige synchronisatie op het knooppunt dat de kapotte gegevens heeft laten uitvoeren. Voer hiervoor de volgende commando's uit op het knooppunt dat opnieuw - gesynchroniseert moet worden: + gesynchroniseerd moet worden: &prompt.root; hastctl role init <resource> &prompt.root; hastctl create <resource> From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:31:31 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7519C1065676; Mon, 13 Jun 2011 15:31:31 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2EEC1106566B for ; Mon, 13 Jun 2011 15:31:31 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 04A028FC17 for ; Mon, 13 Jun 2011 15:31:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFVUPx074028 for ; Mon, 13 Jun 2011 15:31:30 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFVUfS074024 for perforce@freebsd.org; Mon, 13 Jun 2011 15:31:30 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:31:30 GMT Message-Id: <201106131531.p5DFVUfS074024@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194679 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:31:31 -0000 http://p4web.freebsd.org/@@194679?ac=10 Change 194679 by ilya@ilya_triton2011 on 2011/06/13 15:30:42 Import fuse_file.c fuse_node.c fuse_param. Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.c#1 add .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.c#1 add .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_param.h#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:32:37 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7E455106566B; Mon, 13 Jun 2011 15:32:37 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 410711065674 for ; Mon, 13 Jun 2011 15:32:37 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 169008FC15 for ; Mon, 13 Jun 2011 15:32:37 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFWaMB074382 for ; Mon, 13 Jun 2011 15:32:36 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFWapU074379 for perforce@freebsd.org; Mon, 13 Jun 2011 15:32:36 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:32:36 GMT Message-Id: <201106131532.p5DFWapU074379@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194680 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:32:37 -0000 http://p4web.freebsd.org/@@194680?ac=10 Change 194680 by ilya@ilya_triton2011 on 2011/06/13 15:31:40 Remove unused fuse_subr.c Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_subr.c#3 delete Differences ... From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:33:43 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3E9A3106567B; Mon, 13 Jun 2011 15:33:43 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 013701065673 for ; Mon, 13 Jun 2011 15:33:43 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id E41EB8FC16 for ; Mon, 13 Jun 2011 15:33:42 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFXglM074429 for ; Mon, 13 Jun 2011 15:33:42 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFXgbW074426 for perforce@freebsd.org; Mon, 13 Jun 2011 15:33:42 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:33:42 GMT Message-Id: <201106131533.p5DFXgbW074426@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194681 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:33:43 -0000 http://p4web.freebsd.org/@@194681?ac=10 Change 194681 by ilya@ilya_triton2011 on 2011/06/13 15:32:38 Fix FUSE_LOCK and FUSE_UNLOCK macros Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#6 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#5 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#6 (text+ko) ==== @@ -105,11 +105,11 @@ #if USE_FUSE_LOCK extern struct mtx fuse_mtx; -#define FUSE_LOCK mtx_lock(&fuse_mtx) -#define FUSE_UNLOCK mtx_unlock(&fuse_mtx) +#define FUSE_LOCK() mtx_lock(&fuse_mtx) +#define FUSE_UNLOCK() mtx_unlock(&fuse_mtx) #else -#define FUSE_LOCK -#define FUSE_UNLOCK +#define FUSE_LOCK() +#define FUSE_UNLOCK() #endif #define RECTIFY_TDCR(td, cred) \ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#5 (text+ko) ==== @@ -119,9 +119,9 @@ fdata = fdata_alloc(dev, td->td_ucred); - FUSE_LOCK; + FUSE_LOCK(); if (fusedev_get_data(dev)) { - FUSE_UNLOCK; + FUSE_UNLOCK(); fdata_destroy(fdata); goto busy; } else { @@ -131,7 +131,7 @@ fdata->dataflag |= FSESS_OPENED; dev->si_drv1 = fdata; } - FUSE_UNLOCK; + FUSE_UNLOCK(); #if DO_GIANT_MANUALLY && ! USE_FUSE_LOCK mtx_unlock(&Giant); #endif @@ -159,7 +159,7 @@ #if DO_GIANT_MANUALLY && ! USE_FUSE_LOCK mtx_lock(&Giant); #endif - FUSE_LOCK; + FUSE_LOCK(); data = fusedev_get_data(dev); if (! data) panic("no fuse data upon fuse device close"); @@ -186,11 +186,11 @@ } mtx_unlock(&data->aw_mtx); - FUSE_UNLOCK; + FUSE_UNLOCK(); goto out; } dev->si_drv1 = NULL; - FUSE_UNLOCK; + FUSE_UNLOCK(); fdata_destroy(data); From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:33:43 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7D918106576E; Mon, 13 Jun 2011 15:33:43 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2571F1065674 for ; Mon, 13 Jun 2011 15:33:43 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 134E18FC15 for ; Mon, 13 Jun 2011 15:33:43 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFXgcS074435 for ; Mon, 13 Jun 2011 15:33:42 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFXgkM074432 for perforce@freebsd.org; Mon, 13 Jun 2011 15:33:42 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:33:42 GMT Message-Id: <201106131533.p5DFXgkM074432@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194682 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:33:43 -0000 http://p4web.freebsd.org/@@194682?ac=10 Change 194682 by ilya@ilya_triton2011 on 2011/06/13 15:33:26 Restore vfs_hash and original node creations on FreeBSD Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.c#2 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.h#4 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.c#2 (text+ko) ==== @@ -3,173 +3,165 @@ * Amit Singh */ +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "fuse.h" +#include "fuse_node.h" +#include "fuse_internal.h" #include "fuse_ipc.h" -#include "fuse_locking.h" -#include "fuse_node.h" + +#include +#include + +static void +fuse_vnode_init(struct vnode *vp, struct fuse_vnode_data *fvdat, + uint64_t nodeid, enum vtype vtyp) +{ + fvdat->nid = nodeid; + if (nodeid == FUSE_ROOT_ID) { + vp->v_vflag |= VV_ROOT; + } + vp->v_type = vtyp; + vp->v_data = fvdat; + mtx_init(&fvdat->createlock, "fuse node create mutex", NULL, MTX_DEF); + sx_init(&fvdat->nodelock, "fuse node sx lock"); + sx_init(&fvdat->truncatelock, "fuse node truncate sx lock"); +} void -FSNodeScrub(struct fuse_vnode_data *fvdat) +fuse_vnode_destroy(struct vnode *vp) { - lck_mtx_destroy(fvdat->createlock, fuse_lock_group); - lck_rw_destroy(fvdat->nodelock, fuse_lock_group); - lck_rw_destroy(fvdat->truncatelock, fuse_lock_group); - fvdat->fMagic = kFSNodeBadMagic; -} + struct fuse_vnode_data *fvdat = vp->v_data; + + vp->v_data = NULL; + mtx_destroy(&fvdat->createlock); + sx_destroy(&fvdat->nodelock); + sx_destroy(&fvdat->truncatelock); + free(fvdat, M_FUSEVN); +} -errno_t -FSNodeGetOrCreateFileVNodeByID(mount_t mp, - uint64_t nodeid, - vnode_t dvp, - enum vtype vtyp, - uint64_t insize, - vnode_t *vnPtr, - int flags) +static int +fuse_vnode_cmp(struct vnode *vp, void *nidp) { - int err; - int junk; - vnode_t vn; - HNodeRef hn; - vnode_t dirVN; - dev_t dummy_device; - struct fuse_vnode_data *fvdat = NULL; - struct fuse_data *mntdata; - int markroot = FALSE; - uint64_t size = 0; + return (VTOI(vp) != *((uint64_t *)nidp)); +} - if (insize == 0xffffffff) { - markroot = TRUE; - } else { - size = insize; - } +static uint32_t __inline +fuse_vnode_hash(uint64_t id) +{ + return (fnv_32_buf(&id, sizeof(id), FNV1_32_INIT)); +} - hn = NULL; - vn = NULL; - dirVN = NULL; +static int +fuse_vnode_alloc(struct mount *mp, + struct thread *td, + uint64_t nodeid, + enum vtype vtyp, + int lkflags, + struct vnode **vpp) +{ + struct fuse_vnode_data *fvdat; + struct vnode *vp2; + int err = 0; - mntdata = vfs_fsprivate(mp); - dummy_device = (dev_t)mntdata->fdev; + DEBUG("been asked for vno #%ju\n", (uintmax_t)nodeid); - err = HNodeLookupCreatingIfNecessary(dummy_device, - (ino_t)nodeid, // XXXXXXXX - 0 /* fork index */, - &hn, - &vn); - if ((err == 0) && (vn == NULL)) { + if (vtyp == VNON) { + return EINVAL; + } - struct vnode_fsparam params; - fvdat = (struct fuse_vnode_data *)FSNodeGenericFromHNode(hn); - if (!fvdat->fInitialised) { - int k; - fvdat->fMagic = kFSNodeMagic; - fvdat->fInitialised = TRUE; - fvdat->nid = nodeid; - fvdat->vtype = vtyp; - fvdat->parent = NULL; - fvdat->filesize = size; - fvdat->newfilesize = 0; - fvdat->nlookup = 0; - if (dvp) { - fvdat->parent_nid = VTOFUD(dvp)->nid; - } else { - fvdat->parent_nid = 0; - } - for (k = 0; k < FUFH_MAXTYPE; k++) { - fvdat->fufh[k].fufh_flags = 0; - } - fvdat->createlock = lck_mtx_alloc_init(fuse_lock_group, fuse_lock_attr); - fvdat->nodelock = lck_rw_alloc_init(fuse_lock_group, fuse_lock_attr); - fvdat->truncatelock = lck_rw_alloc_init(fuse_lock_group, fuse_lock_attr); - fvdat->creator = current_thread(); - fvdat->flag = flags; - //LIST_INIT(&fvdat->fh_head); - } + *vpp = NULL; + err = vfs_hash_get(mp, fuse_vnode_hash(nodeid), lkflags, td, vpp, + fuse_vnode_cmp, &nodeid); + if (err) + return (err); - if (err == 0) { - params.vnfs_mp = mp; - params.vnfs_vtype = vtyp; - params.vnfs_str = NULL; - params.vnfs_dvp = NULL; // dvp; XXXXXXXXXXXXXXXXXXXXXXXXXX - params.vnfs_fsnode = hn; - params.vnfs_vops = fuse_vnode_operations; - params.vnfs_marksystem = FALSE; - params.vnfs_rdev = 0; - params.vnfs_cnp = NULL; - params.vnfs_flags = VNFS_NOCACHE | VNFS_CANTCACHE; - params.vnfs_filesize = size; - params.vnfs_markroot = markroot; + if (*vpp) { + MPASS((*vpp)->v_type == vtyp && (*vpp)->v_data != NULL); + DEBUG("vnode taken from hash\n"); + return (0); + } - err = vnode_create(VNCREATE_FLAVOR, sizeof(params), ¶ms, &vn); - } + lkflags = LK_EXCLUSIVE | LK_RETRY; /* XXXIP don't loose other flags */ - if (err == 0) { - HNodeAttachVNodeSucceeded(hn, 0 /* forkIndex */, vn); - if (markroot == TRUE) { - fvdat->parent = vn; - } - } else { - if (HNodeAttachVNodeFailed(hn, 0 /* forkIndex */)) { - FSNodeScrub(fvdat); - HNodeScrubDone(hn); - } - } + fvdat = malloc(sizeof(*fvdat), M_FUSEVN, M_WAITOK | M_ZERO); + err = getnewvnode("fuse", mp, &fuse_vnops, vpp); + if (err) { + free(fvdat, M_FUSEVN); + return (err); } - if (err == 0) { - *vnPtr = vn; - vnode_settag(vn, VT_KERNFS); + vn_lock(*vpp, lkflags); + err = insmntque(*vpp, mp); + if (err) { + free(fvdat, M_FUSEVN); + return (err); } - if (dirVN != NULL) { - junk = vnode_put(dirVN); - /* assert(junk == 0); */ + fuse_vnode_init(*vpp, fvdat, nodeid, vtyp); + err = vfs_hash_insert(*vpp, fuse_vnode_hash(nodeid), lkflags, + td, &vp2, fuse_vnode_cmp, &nodeid); + + if (err) { + fuse_vnode_destroy(*vpp); + *vpp = NULL; + return (err); } - /* assert((err == 0) == (*vnPtr != NULL); */ + /* + * XXXIP: Prevent silent vnode reuse. It may happen because several fuse + * filesystems ignore inode numbers + */ + KASSERT(vp2 == NULL, + ("vfs hash collision for node #%ju\n", (uintmax_t)nodeid)); - return err; + return (0); } int -fuse_vget_i(mount_t mp, - uint64_t nodeid, - vfs_context_t context, - vnode_t dvp, - vnode_t *vpp, - struct componentname *cnp, - enum vtype vtyp, - uint64_t size, - enum vget_mode mode, - uint64_t parentid) +fuse_vnode_get(struct mount *mp, + uint64_t nodeid, + struct vnode *dvp, + struct vnode **vpp, + struct componentname *cnp, + enum vtype vtyp, + uint64_t size) { + struct thread *td = (cnp != NULL ? cnp->cn_thread : curthread); int err = 0; debug_printf("dvp=%p\n", dvp); - if (vtyp == VNON) { - return EINVAL; - } - -#if 0 //XROOT - if (nodeid == FUSE_ROOT_ID) { - *vpp = fusefs_get_data(mp)->rvp; //XROOT - err = vnode_get(*vpp); - if (err) { - *vpp = NULLVP; - return err; - } - goto found; - } -#endif - - err = FSNodeGetOrCreateFileVNodeByID(mp, nodeid, dvp, vtyp, size, vpp, 0); + err = fuse_vnode_alloc(mp, td, nodeid, vtyp, LK_EXCLUSIVE | LK_RETRY, vpp); if (err) { return err; } - cache_enter(dvp, *vpp, cnp); + if (cnp != NULL) { + cache_enter(dvp, *vpp, cnp); + } -found: VTOFUD(*vpp)->nlookup++; return 0; ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.h#4 (text+ko) ==== @@ -10,22 +10,14 @@ #include #include "fuse_file.h" -#include "fuse_nodehash.h" -enum { - kFSNodeMagic = 1, - kFSNodeBadMagic = 2, - kHNodeMagic = 3, -}; - #define FN_CREATING 0x00000001 struct fuse_vnode_data { - uint32_t fMagic; - boolean_t fInitialised; uint64_t nid; uint64_t nlookup; enum vtype vtype; + /* XXXIP very likely to be stale, it's not updated in rename() */ uint64_t parent_nid; struct mtx createlock; @@ -40,16 +32,17 @@ * modified. Typically, we would take this lock at the beginning of a * vnop and drop it at the end of the vnop. */ - struct sx *nodelock; + struct sx nodelock; void *nodelockowner; /* * The truncatelock guards against the EOF changing on us (that is, a * file resize) unexpectedly. */ - struct sx *truncatelock; + struct sx truncatelock; struct vnode *c_vp; + /* XXXIP reference is very likely to be stale, it's not updated in rename() */ struct vnode *parent; off_t filesize; off_t newfilesize; @@ -59,13 +52,11 @@ struct vattr cached_attrs; struct timespec cached_attrs_valid; }; -typedef struct fuse_vnode_data * fusenode_t; -#define VTOFUD(vp) \ - ((struct fuse_vnode_data *)FSNodeGenericFromHNode((vp)->v_data)) +#define VTOFUD(vp) ((struct fuse_vnode_data *)((vp)->v_data)) #define VTOI(vp) (VTOFUD(vp)->nid) #define VTOVA(vp) (&(VTOFUD(vp)->cached_attrs)) -#define VTOILLU(vp) ((unsigned long long)(VTOFUD(vp) ? VTOI(vp) : 0)) +#define VTOILLU(vp) ((uint64_t)(VTOFUD(vp) ? VTOI(vp) : 0)) #define FUSE_NULL_ID 0 @@ -79,17 +70,6 @@ MALLOC_DECLARE(M_FUSEVN); -vfs_hash_cmp_t fuse_vnode_cmp; -vfs_hash_cmp_t fuse_vnode_setparent_cmp; - -void fuse_vnode_init(struct vnode *vp, struct fuse_vnode_data *fvdat, - uint64_t nodeid, enum vtype vtyp, uint64_t parentid); -void fuse_vnode_ditch(struct vnode *vp, struct thread *td); -void fuse_vnode_teardown(struct vnode *vp, struct thread *td, - struct ucred *cred, enum vtype vtyp); - -enum vget_mode { VG_NORMAL, VG_WANTNEW, VG_FORCENEW }; - struct get_filehandle_param { enum fuse_opcode opcode; uint8_t do_gc:1; @@ -116,37 +96,17 @@ #define C_CREATING 0x04000 #define C_ACCESS_NOOP 0x08000 -int -FSNodeGetOrCreateFileVNodeByID(struct mount *mp, - uint64_t nodeid, - struct vnode *dvp, - enum vtype vtyp, - uint64_t insize, - struct vnode **vnPtr, - int flags); +extern struct vop_vector fuse_vnops; -void FSNodeScrub(struct fuse_vnode_data *fvdat); +void fuse_vnode_destroy(struct vnode *vp); int -fuse_vget_i(struct mount *mp, - struct thread *td, - uint64_t nodeid, - enum vtype vtyp, - struct vnode **vpp, - enum vget_mode vmod, - uint64_t parentid); -#ifdef XXXIP -int -fuse_vget_i(struct mount *mp, - uint64_t nodeid, - vfs_context_t context, - struct vnode *dvp, - struct vnode *vpp, - struct componentname *cnp, - enum vtype vtyp, - uint64_t size, - enum vget_mode mode, - uint64_t parentid); -#endif +fuse_vnode_get(struct mount *mp, + uint64_t nodeid, + struct vnode *dvp, + struct vnode **vpp, + struct componentname *cnp, + enum vtype vtyp, + uint64_t size); #endif /* _FUSE_NODE_H_ */ From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:35:55 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 481D01065689; Mon, 13 Jun 2011 15:35:55 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 09CBA1065680 for ; Mon, 13 Jun 2011 15:35:55 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id EB0DE8FC1C for ; Mon, 13 Jun 2011 15:35:54 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFZs3L074595 for ; Mon, 13 Jun 2011 15:35:54 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFZsQb074591 for perforce@freebsd.org; Mon, 13 Jun 2011 15:35:54 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:35:54 GMT Message-Id: <201106131535.p5DFZsQb074591@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194684 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:35:55 -0000 http://p4web.freebsd.org/@@194684?ac=10 Change 194684 by ilya@ilya_triton2011 on 2011/06/13 15:35:37 Fix internal functions definfions, rename fdisp_simple_vfs_getattr -> fdisp_simple_vfs_statfs Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.c#2 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#6 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#8 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.h#6 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#11 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.c#2 (text+ko) ==== @@ -3,14 +3,34 @@ * Amit Singh */ +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "fuse.h" #include "fuse_file.h" +#include "fuse_internal.h" #include "fuse_ipc.h" #include "fuse_node.h" -#include "fuse_sysctl.h" int -fuse_filehandle_get(vnode_t vp, vfs_context_t context, fufh_type_t fufh_type) +fuse_filehandle_get(struct vnode *vp, struct thread *td, struct ucred *cred, fufh_type_t fufh_type) { struct fuse_vnode_data *fvdat = VTOFUD(vp); struct fuse_dispatcher fdi; @@ -42,7 +62,7 @@ } fdisp_init(&fdi, sizeof(*foi)); - fdisp_make_vp(&fdi, op, vp, context); + fdisp_make_vp(&fdi, op, vp, td, cred); foi = fdi.indata; foi->flags = oflags; @@ -68,7 +88,7 @@ } int -fuse_filehandle_put(vnode_t vp, vfs_context_t context, fufh_type_t fufh_type, +fuse_filehandle_put(struct vnode *vp, struct thread *td, struct ucred *cred, fufh_type_t fufh_type, int foregrounded) { struct fuse_dispatcher fdi; @@ -103,7 +123,7 @@ } fdisp_init(&fdi, sizeof(*fri)); - fdisp_make_vp(&fdi, op, vp, context); + fdisp_make_vp(&fdi, op, vp, td, cred); fri = fdi.indata; fri->fh = fufh->fh_id; fri->flags = fufh->open_flags; ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#6 (text+ko) ==== @@ -280,8 +280,6 @@ int fuse_internal_readdir(struct vnode *vp, struct uio *uio, - struct thread *td, - struct ucred *cred, struct fuse_filehandle *fufh, struct fuse_iov *cookediov) { @@ -300,7 +298,7 @@ while (uio_resid(uio) > 0) { fdi.iosize = sizeof(*fri); - fdisp_make_vp(&fdi, FUSE_READDIR, vp, td, cred); + fdisp_make_vp(&fdi, FUSE_READDIR, vp, NULL, NULL); fri = fdi.indata; fri->fh = fufh->fh_id; @@ -544,6 +542,7 @@ int fuse_internal_newentry_core(struct vnode *dvp, struct vnode **vpp, + struct componentname *cnp, enum vtype vtyp, struct fuse_dispatcher *fdip) { @@ -563,8 +562,8 @@ goto out; } - err = fuse_vget_i(mp, curthread, feo->nodeid, vtyp, vpp, - VG_FORCENEW, VTOI(dvp)); + err = fuse_vnode_get(mp, feo->nodeid, dvp, vpp, cnp, + vtyp, 0); if (err) { fuse_internal_forget_send(mp, curthread, NULL, feo->nodeid, 1, fdip); return err; @@ -593,7 +592,7 @@ fdisp_init(&fdi, 0); fuse_internal_newentry_makerequest(vnode_mount(dvp), VTOI(dvp), cnp, op, buf, bufsize, &fdi); - err = fuse_internal_newentry_core(dvp, vpp, vtyp, &fdi); + err = fuse_internal_newentry_core(dvp, vpp, cnp, vtyp, &fdi); fuse_invalidate_attr(dvp); return (err); ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#8 (text+ko) ==== @@ -14,12 +14,24 @@ #include "fuse_ipc.h" #include "fuse_node.h" +static __inline int +vfs_isrdonly(struct mount *mp) +{ + return ((mp->mnt_flag & MNT_RDONLY) != 0 ? 1 : 0); +} + static __inline struct mount * vnode_mount(struct vnode *vp) { return (vp->v_mount); } +static __inline int +vnode_mountedhere(struct vnode *vp) +{ + return (vp->v_mountedhere != NULL ? 1 : 0); +} + static __inline enum vtype vnode_vtype(struct vnode *vp) { @@ -32,6 +44,18 @@ return ((vp->v_vflag & VV_ROOT) != 0 ? 1 : 0); } +static __inline int +vnode_isreg(struct vnode *vp) +{ + return (vp->v_type == VREG ? 1 : 0); +} + +static __inline int +vnode_isdir(struct vnode *vp) +{ + return (vp->v_type == VDIR ? 1 : 0); +} + static __inline ssize_t uio_resid(struct uio *uio) { @@ -50,6 +74,12 @@ uio->uio_offset = offset; } +static __inline void +uio_setresid(struct uio *uio, ssize_t resid) +{ + uio->uio_resid = resid; +} + /* XXX */ void cluster_push(struct vnode *vp, int a); @@ -166,8 +196,6 @@ int fuse_internal_readdir(struct vnode *vp, struct uio *uio, - struct thread *td, - struct ucred *cred, struct fuse_filehandle *fufh, struct fuse_iov *cookediov); @@ -246,6 +274,7 @@ int fuse_internal_newentry_core(struct vnode *dvp, struct vnode **vpp, + struct componentname *cnp, enum vtype vtyp, struct fuse_dispatcher *fdip); ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.h#6 (text+ko) ==== @@ -302,14 +302,12 @@ return (fdisp_wait_answ(fdip)); } -static __inline__ int -fdisp_simple_vfs_getattr(struct fuse_dispatcher *fdip, - struct mount *mp, - struct thread *td, - struct ucred *cred) +static __inline int +fdisp_simple_vfs_statfs(struct fuse_dispatcher *fdip, + struct mount *mp) { fdisp_init(fdip, 0); - fdisp_make(fdip, mp, FUSE_STATFS, FUSE_ROOT_ID, td, cred); + fdisp_make(fdip, mp, FUSE_STATFS, FUSE_ROOT_ID, NULL, NULL); return (fdisp_wait_answ(fdip)); } ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#11 (text+ko) ==== @@ -46,60 +46,6 @@ #include -#if 0 -/* function prototype for iterators over filehandles (of a vp) */ -typedef int fuse_metrics_t(struct fuse_filehandle *fufh, struct thread *td, - struct ucred *cred, void *param); - - -/* parameter struct for fuse_standard_metrics() */ -struct standard_metrics_param { - int mode; - enum fuse_opcode op; - struct fuse_filehandle *fufh; -}; - -struct fuse_release_param { - int err; - uint8_t fg:1; - uint8_t flush:1; -}; - -static __inline void fuse_vnode_init_data(struct vnode *vp, struct fuse_vnode_data *fvdat, - uint64_t nodeid); -static __inline void fuse_vnode_init_misc(struct vnode *vp, enum vtype vtyp, - uint64_t parentid); -static int fuse_recyc_backend(struct vnode *vp, struct thread *td); -static void fuse_filehandle_gc(struct vnode *vp, struct thread *td, - struct ucred *cred, - struct fuse_release_param *frp); -static int iterate_filehandles(struct vnode *vp, struct thread *td, - struct ucred *cred, - fuse_metrics_t fmetr, void *param); -#if FUSE_HAS_CREATE -static __inline int create_filehandle(struct vnode *vp, struct thread *td, - struct ucred *cred, int mode, - struct fuse_dispatcher *fdip); -#endif -static void fuse_send_release(struct fuse_filehandle *fufh, - struct thread *td, struct ucred *cred, - int flags, - struct fuse_release_param *frp); -extern int fuse_read_directbackend(struct fuse_io_data *fioda); - -static fuse_metrics_t fuse_file_ditch; -static fuse_metrics_t fuse_standard_metrics; -static fuse_metrics_t fuse_fsync_filehandle; -static fuse_metrics_t release_filehandle; - -#if FUSE_HAS_CREATE -static vfs_hash_cmp_t fuse_vnode_fgdrop_cmp; -#endif -static vfs_hash_cmp_t fuse_vnode_findparent_cmp; - -/* file ops */ -static fo_close_t fuse_close_f; - /* vnode ops */ static vop_access_t fuse_vnop_access; static vop_close_t fuse_vnop_close; @@ -159,162 +105,11 @@ .vop_unlock = fuse_vnop_unlock, }; -struct fileops fuse_fileops = { - .fo_read = fuse_io_file, - .fo_write = fuse_io_file, - /* - * following fields are filled from vnops, but "vnops.foo" is not - * legitimate in a definition, so we set them at module load time - */ - .fo_ioctl = NULL, - .fo_poll = NULL, - .fo_kqfilter = NULL, - .fo_stat = NULL, - .fo_close = fuse_close_f, - .fo_flags = DFLAG_PASSABLE | DFLAG_SEEKABLE -}; - -#if FUSE_HAS_CREATE -struct vop_vector fuse_germ_vnops; -#endif - MALLOC_DEFINE(M_FUSEVN, "fuse_vnode", "fuse vnode private data"); MALLOC_DEFINE(M_FUSEFH, "fuse_filehandles", "buffer for fuse filehandles"); int fuse_pbuf_freecnt = -1; -/****************** - * - * >>> VFS hash comparators - * - ******************/ - -#if FUSE_HAS_CREATE -/* - * Vnode comparison function with which the given vnode always - * gets inserted, but got marked invalid upon a clash. Caller - * is free (and expected to) deal with clashes. - */ - -int -fuse_vnode_fgdrop_cmp(struct vnode *vp, void *param) -{ - struct fuse_vnode_data *fvdat = param; - - if (VTOI(vp) == fvdat->nid) - fvdat->nid = FUSE_NULL_ID; - - return (1); -} -#endif - -/* - * A skewed use of the vfs hash subsystem for finding out parent - * nodeid. This comparator never matches, just collects data during - * scanning through the nodes (without vnode locking). - */ - -static int -fuse_vnode_findparent_cmp(struct vnode *vp, void *param) -{ - struct parentmanager_param *pmp = param; - - /* - * In general, we'd need a (nodeid, vtyp) pair to match - * but we may assume that the type is directory, because - * that's what users of this function will want. - */ - - if (VTOI(vp) == pmp->nodeid && vp->v_type == VDIR) { - KASSERT(! pmp->valid, - ("more than one vnode seems to match #%llu", - (unsigned long long)pmp->nodeid)); - pmp->parent_nid = VTOFUD(vp)->parent_nid; - pmp->valid = 1; - } - - return (1); -} - -/****************** - * - * >>> Vnode related aux routines - * - ******************/ - -static __inline void -fuse_vnode_init_data(struct vnode *vp, struct fuse_vnode_data *fvdat, - uint64_t nodeid) -{ - fvdat->nid = nodeid; - vp->v_data = fvdat; -} - -static __inline void -fuse_vnode_init_misc(struct vnode *vp, enum vtype vtyp, uint64_t parentid) -{ - struct fuse_vnode_data *fvdat = VTOFUD(vp); - - VNASSERT(fvdat, vp, (("init_misc on virgin vnode"))); - - fvdat->parent_nid = parentid; - vp->v_type = vtyp; - - LIST_INIT(&fvdat->fh_head); - - vp->v_bufobj.bo_private = vp; -} - -void -fuse_vnode_init(struct vnode *vp, struct fuse_vnode_data *fvdat, - uint64_t nodeid, enum vtype vtyp, uint64_t parentid) -{ - fuse_vnode_init_data(vp, fvdat, nodeid); - fuse_vnode_init_misc(vp, vtyp, parentid); -} - -void -fuse_vnode_ditch(struct vnode *vp, struct thread *td) -{ - if (! td) - td = curthread; - - if (vp->v_vflag & VV_ROOT) { - fdata_kick_set(fusefs_get_data(vp->v_mount)); - return; - } - DEBUG2G("vp %p, #%llu\n", vp, VTOILLU(vp)); - vnode_destroy_vobject(vp); - /* - * this implies we won't get feedback on recycling - * (other than panicking, or the lack of that) - * but creating a customized set of bad vnode ops - * would be too much hassle... - */ - vp->v_op = &dead_vnodeops; - fuse_recyc_backend(vp, td); -} - -void -fuse_vnode_teardown(struct vnode *vp, struct thread *td, struct ucred *cred, - enum vtype vtyp) -{ - struct fuse_dispatcher fdi; - struct fuse_vnode_data *fvdat = VTOFUD(vp); - - if (vp->v_type == vtyp) { - bzero(&fdi, sizeof(fdi)); - vfs_hash_remove(vp); - fuse_internal_forget_send(vp->v_mount, td, cred, fvdat->nid, - fvdat->nlookup, &fdi); - fvdat->nid = FUSE_NULL_ID; - } else - fuse_vnode_ditch(vp, td); - - vput(vp); -} -#endif - /* struct vnop_access_args { struct vnode *a_vp; @@ -2135,7 +1930,7 @@ ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; memcpy((char *)fdi.indata + cnp->cn_namelen + 1, target, len); - err = fuse_internal_newentry_core(dvp, vpp, VLNK, &fdi); + err = fuse_internal_newentry_core(dvp, vpp, cnp, VLNK, &fdi); fuse_invalidate_attr(dvp); return (err); } @@ -2476,503 +2271,3 @@ return vop_stdunlock(ap); } - -static int -release_filehandle(struct fuse_filehandle *fufh, struct thread *td, - struct ucred *cred, void *param) -{ - KASSERT(fufh->useco >= 0, - ("negative use count for fuse filehandle #%llu@#%llu", - (long long unsigned)fufh->fh_id, VTOILLU(fufh->fh_vp))); - KASSERT(! fufh->fp || fufh->useco > 0, - ("filehandle bound with 0 use counter")); - DEBUG2G("vnode #%llu, fufh %p #%llu, owner file %p, useco %d\n", - VTOILLU(fufh->fh_vp), fufh, (long long unsigned) fufh->fh_id, - fufh->fp, fufh->useco); - if (! fufh->fp && fufh->useco == 0) { - LIST_REMOVE(fufh, fh_link); - fuse_send_release(fufh, td, cred, fufh->mode, param); - } - - return (0); -} - -static void -fuse_filehandle_gc(struct vnode *vp, struct thread *td, struct ucred *cred, - struct fuse_release_param *frp) -{ - ASSERT_VOP_ELOCKED__FH(vp); - iterate_filehandles(vp, td, cred, release_filehandle, frp); -} - -static int -iterate_filehandles(struct vnode *vp, struct thread *td, struct ucred *cred, - fuse_metrics_t fmetr, void *param) -{ - struct fuse_filehandle *fufh, *fufhxxx; - struct fuse_vnode_data *fvdat = VTOFUD(vp); - int rv = 0; - - RECTIFY_TDCR(td, cred); - - LIST_FOREACH_SAFE(fufh, &fvdat->fh_head, fh_link, fufhxxx) { - KASSERT(fufh->fh_vp == vp, - ("vnode mismatch for fuse_filehandle %p\n", fufh)); - if ((rv = fmetr(fufh, td, cred, param))) - return (rv); - } - - return (0); -} - -static int -fuse_standard_metrics(struct fuse_filehandle *fufh, struct thread *td, - struct ucred *cred, void *param) -{ - struct standard_metrics_param *stmp = param; - - DEBUG2G("fufh->mode %#x, mode %#x\n", fufh->mode, stmp->mode); - if (fufh->cred->cr_uid == cred->cr_uid && - fufh->cred->cr_rgid == cred->cr_rgid && - fufh->pid == td->td_proc->p_pid && - ((fufh->mode ^ stmp->mode) & ~(O_CREAT | O_EXCL | O_TRUNC)) == 0 && - fufh->op == stmp->op) { - stmp->fufh = fufh; - fufh->useco++; - return (-1); - } - - return (0); -} - -#if FUSE_HAS_CREATE -static __inline int -create_filehandle(struct vnode *vp, struct thread *td, struct ucred *cred, - int mode, struct fuse_dispatcher *fdip) -{ - struct fuse_vnode_data *fvdat = VTOFUD(vp); - uint64_t parentid = fvdat->parent_nid; - struct componentname *cnp = fvdat->germcnp; - struct fuse_open_in *foi; - struct fuse_entry_out *feo; - struct fuse_mknod_in fmni; - int err; - int gone_good_old = 0; - struct vnode *clashvp; - - vp->v_data = NULL; - mode &= ~O_NOCTTY; - - fdisp_init(fdip, sizeof(*foi) + cnp->cn_namelen + 1); - - if (fusefs_get_data(vp->v_mount)->dataflag & FSESS_NOCREATE) - goto good_old; - fdisp_make(fdip, vp->v_mount, FUSE_CREATE, parentid, td, cred); - - /* - * Looks stupid, but this is how we could smuggle in these - * values from fuse_create... - */ - foi = fdip->indata; - foi->flags = OFLAGS(mode); - foi->mode = fvdat->flags; - - memcpy((char *)fdip->indata + sizeof(*foi), cnp->cn_nameptr, - cnp->cn_namelen); - ((char *)fdip->indata)[sizeof(*foi) + cnp->cn_namelen] = '\0'; - - err = fdisp_wait_answ(fdip); - - if (err == ENOSYS) { - fusefs_get_data(vp->v_mount)->dataflag |= FSESS_NOCREATE; - fdip->tick = NULL; - goto good_old; - } else if (err) - goto undo; - - goto bringup; - -good_old: - gone_good_old = 1; - fmni.mode = fvdat->flags; - fmni.rdev = 0; - fuse_internal_newentry_makerequest(vp->v_mount, parentid, cnp, FUSE_MKNOD, - &fmni, sizeof(fmni), fdip); - err = fdisp_wait_answ(fdip); - if (err) - goto undo; - -bringup: - feo = fdip->answ; - - if ((err = fuse_internal_checkentry(feo, VREG))) { - fuse_ticket_drop(fdip->tick); - goto undo; - } - - bzero(fvdat, sizeof(*fvdat)); - fuse_vnode_init(vp, fvdat, feo->nodeid, VREG, parentid); - fvdat->nlookup++; - vp->v_op = &fuse_vnops; - cache_attrs(vp, feo); - -try_insert: - VOP_UNLOCK(vp, 0); - /* - * We can't let the vnode being vput() here, the caller wants - * that do by herself. - * That means hash collisions must be relaxed. With a funky - * comparison function insertion will succeed, but we get a clear - * sign of the collision and we can handle it by ourselves. - */ - err = vfs_hash_get(vp->v_mount, feo->nodeid, LK_EXCLUSIVE, td, - &clashvp, fuse_vnode_cmp, &feo->nodeid); - if (! err && clashvp) - fuse_vnode_teardown(clashvp, td, cred, VREG); - - if (! err) { - err = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); - if (err) - printf("fuse4bsd: leaking vnode %p\n", vp); - else { - struct mount *mp = vp->v_mount; - - vp->v_mount = NULL; - err = insmntque(vp, mp); - } - } - - if (! err) - err = vfs_hash_insert(vp, feo->nodeid, LK_EXCLUSIVE, td, - &clashvp, fuse_vnode_fgdrop_cmp, fvdat); - if (! err && fvdat->nid == FUSE_NULL_ID) { - vfs_hash_remove(vp); - fvdat->nid = feo->nodeid; - goto try_insert; - } - - if (err) { - if (gone_good_old) - fuse_internal_forget_send(vp->v_mount, td, cred, feo->nodeid, 1, - fdip); - else { - struct fuse_release_in *fri; - uint64_t nodeid = feo->nodeid; - uint64_t fh_id = ((struct fuse_open_out *)(feo + 1))->fh; - struct fuse_pidcred *pidcred; - - fdisp_init(fdip, sizeof(*fri)); - fdisp_make(fdip, vp->v_mount, FUSE_RELEASE, nodeid, td, - cred); - fri = fdip->indata; - fri->fh = fh_id; - fri->flags = OFLAGS(mode); - /* - * The node must be forgotten after the release. - * Release is sent in the background as usual (that's not - * necessary, but anyway...), so we do the forgetting - * by a dedicated callback handler. - * - * Current pid/cred is attached to the ticket as a parameter - * as the FORGET must be sent with current pid/cred but - * it will be sent from another context. - */ - fiov_adjust(&fdip->tick->tk_aw_handler_parm, - sizeof(*pidcred)); - pidcred = fdip->tick->tk_aw_handler_parm.base; - pidcred->pid = td->td_proc->p_pid; - memcpy(&pidcred->cred, cred, sizeof(*cred)); - fuse_insert_callback(fdip->tick, fuse_internal_forget_callback); - fuse_insert_message(fdip->tick); - } - - return (err); - } - - fdip->answ = gone_good_old ? NULL : feo + 1; - - return (0); - -undo: - free(fvdat, M_FUSEVN); - vp->v_data = NULL; - return (err); -} -#endif - -int -fuse_get_filehandle(struct vnode *vp, struct thread *td, struct ucred *cred, - int mode, struct fuse_filehandle **fufhp, - struct get_filehandle_param *gefhp) -{ - struct fuse_vnode_data *fvdat = VTOFUD(vp); - struct fuse_dispatcher fdi; - struct fuse_open_in *foi; - struct fuse_open_out *foo; - int err = 0; - struct fuse_filehandle *fufh = NULL; - enum fuse_opcode op; - int gone_create = 0; - - RECTIFY_TDCR(td, cred); - - /* - * "create" messaging is almost transparent for get_filehandle. There are - * some gotos and status variables though. - * And it's totally transparent for fuse_open. - * (By transparent I mean that they don't see the special "germic" state of - * the vnode... if the vnode is a germ, it will be tried to be initialized - * via a dedicated method, but from that on we go on as usual.) - */ -#if FUSE_HAS_CREATE - if (vp->v_op == &fuse_germ_vnops) { - KASSERT(gefhp, ("create_filehandle called without get_filehandle_param")); - gone_create = 1; - if (gefhp) - gefhp->do_gc = 0; - op = FUSE_OPEN; - fdi.answ = NULL; - if ((err = create_filehandle(vp, td, cred, mode, &fdi))) - goto out; - else if (fdi.answ) - goto setup_filehandle; - } -#endif - - if (gefhp && gefhp->opcode) - op = gefhp->opcode; - else - op = FUSE_OPEN; - - if (op == FUSE_OPENDIR) - mode = FREAD; - else - mode &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); - - if (! (gefhp && gefhp->do_new)) { - struct standard_metrics_param stmp; - stmp.mode = mode; - stmp.op = op; - - ASSERT_VOP_LOCKED__FH(vp); - err = iterate_filehandles(vp, td, cred, fuse_standard_metrics, - &stmp); - - if (err) { - if (err == -1) { - DEBUG2G("suitable fh of vnode #%llu found\n", - VTOILLU(vp)); - fufh = stmp.fufh; - err = 0; - } - goto out; - } - } - - DEBUG2G("we need to fetch a new filehandle for vnode #%llu\n", VTOILLU(vp)); - - fdisp_init(&fdi, sizeof(*foi)); - fdisp_make_vp(&fdi, op, vp, td, cred); - - foi = fdi.indata; - foi->flags = OFLAGS(mode); - - if ((err = fdisp_wait_answ(&fdi))) - goto out; - -#if FUSE_HAS_CREATE -setup_filehandle: -#endif - foo = fdi.answ; - - fufh = malloc(sizeof(*fufh), M_FUSEFH, M_WAITOK | M_ZERO); - - /* - * We need to reference the vnode from fuse private file data - * as files' f_vnode field might point to another vnode (eg., - * if we are accessed through a nullfs overlay). - */ - fufh->fh_vp = vp; - fufh->fh_id = foo->fh; - fufh->flags = foo->open_flags; - - fuse_ticket_drop(fdi.tick); - - fufh->mode = mode; - fufh->cred = crhold(cred); - fufh->pid = td->td_proc->p_pid; - fufh->useco = 1; - fufh->op = op; - - ASSERT_VOP_ELOCKED__FH(vp); - LIST_INSERT_HEAD(&fvdat->fh_head, fufh, fh_link); - if (gefhp && gefhp->do_gc) { - /* - * The neat idea is that a cache cleanup is the best time for - * a gc -- gc'ing unbound filehandles at inactive/reclaim time - * is not enough, they can just accumulate while something - * happens with the file, given the cache is flushed frequently - * (otherwise there is no reason for the system to spawn them, - * as the data can be read from core). - * So then, let's just tie their gc to cache flush... - * Luckily, this won't break the POSIX semantics that an - * unlinked file is get kept until there is reference to it, - * because that's done via the lookup/forget mechanism, and not - * via filehandles. - */ - /* - * Now we use unbound filehandles pretty rarely (as read/write - * of regular files doesn't rely on them anymore), only during - * exec and reading directories. It's pretty much unlikely that - * one can be reused in any way, so we drop them - * unconditionally. - */ - struct fuse_release_param frp; - - DEBUG2G("gc'ing...\n"); - frp.fg = 0; - frp.flush = 0; - iterate_filehandles(vp, td, cred, release_filehandle, &frp); - } - fvdat->fh_counter++; - -#if _DEBUG2G - if (gefhp && gefhp->do_gc) { - DEBUG2G("after gc...\n"); - vn_printf(vp, " "); - } -#endif - -out: - if (gone_create && ! err) - fufh->flags |= FOPEN_KEEP_CACHE; - - *fufhp = fufh; - - return (err); -} - -static void -fuse_send_release(struct fuse_filehandle *fufh, struct thread *td, - struct ucred *cred, int flags, struct fuse_release_param *frp) -{ - struct vnode *vp = fufh->fh_vp; - struct fuse_dispatcher fdi; - struct fuse_release_in *fri; - int err = 0; - - KASSERT(! fufh->fp && fufh->useco == 0, ("active-looking fuse filehandle was attempted to release")); - - VTOFUD(vp)->fh_counter--; - DEBUG2G("filehandle of vnode #%llu being released, fh counter now is %d\n", - VTOILLU(vp), VTOFUD(vp)->fh_counter); - - if (vp->v_type == VBAD) - goto out; - - fdisp_init(&fdi, sizeof(*fri)); - fdisp_make_vp(&fdi, - fufh->op == FUSE_OPENDIR ? FUSE_RELEASEDIR : FUSE_RELEASE, - vp, td, cred); - fri = fdi.indata; - fri->fh = fufh->fh_id; - fri->flags = OFLAGS(flags); -#if FUSE_HAS_FLUSH_RELEASE - if (frp->flush) - fri->release_flags = FUSE_RELEASE_FLUSH; -#endif - - if (frp->fg) { - err = fdisp_wait_answ(&fdi); - if (err) - goto out; - else - fuse_ticket_drop(fdi.tick); - } else { - fuse_insert_callback(fdi.tick, NULL); - fuse_insert_message(fdi.tick); - } - -out: - crfree(fufh->cred); - free(fufh, M_FUSEFH); - if (err && frp->err == 0) - frp->err = err; -} - -static int -fuse_close_f(struct file *fp, struct thread *td) -{ - struct fuse_filehandle *fufh; - struct vnode *vp = NULL, *ovl_vp = fp->f_vnode; - struct fuse_release_param frp; - - if (! _file_is_fat(fp)) - panic("non-fat file passed to close routine"); - - vn_lock(ovl_vp, LK_EXCLUSIVE | LK_RETRY); - - if (_file_is_bad(fp)) { - DEBUG2G("fp %p, (overlay) vnode %p: went bad, giving up\n", - fp, ovl_vp); - goto out; - } - fufh = FTOFH(fp); - vp = fufh->fh_vp; - KASSERT(fufh->fp == fp, ("file's filehandle is stolen")); - DEBUG2G("vnode #%llu, fufh owner %p, useco %d\n", - VTOILLU(vp), fp, fufh->useco); - - fufh->useco--; - ASSERT_VOP_ELOCKED__FH(vp); - fufh->fp = NULL; - if (fufh->useco == 0) - LIST_REMOVE(fufh, fh_link); - fp->f_data = NULL; - - if (fufh->useco == 0) { - frp.err = 0; -#if FUSE_HAS_FLUSH_RELEASE - frp.fg = 1; - frp.flush = 1; -#else - frp.fg = 0; - frp.flush = 0; -#endif - fuse_send_release(fufh, td, NULL, fp->f_flag & ~O_EXCL, &frp); - } - -out: - if (fp->f_flag & FWRITE && vp) - vp->v_writecount--; - vput(ovl_vp); - return (frp.err); -} - -static int -fuse_fsync_filehandle(struct fuse_filehandle *fufh, struct thread *td, - struct ucred *cred, void *param) -{ - struct fuse_fsync_in *ffsi; - struct fuse_dispatcher *fdip = param; - - fdip->iosize = sizeof(*ffsi); - fdip->tick = NULL; - fdisp_make_vp(fdip, - (fufh->op == FUSE_OPENDIR) ? FUSE_FSYNCDIR : FUSE_FSYNC, - fufh->fh_vp, td, cred); - - ffsi = fdip->indata; - ffsi->fh = fufh->fh_id; - /* - * this sets that we wanna sync file data, - * not just metadata; a 0 value would have no - * counterpart in BSD semantics - */ - ffsi->fsync_flags = 1; - - fuse_insert_callback(fdip->tick, fuse_internal_fsync_callback); - fuse_insert_message(fdip->tick); - - return (0); -} From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:38:07 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 56F541065677; Mon, 13 Jun 2011 15:38:07 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 192A9106564A for ; Mon, 13 Jun 2011 15:38:07 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 0674A8FC16 for ; Mon, 13 Jun 2011 15:38:07 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFc6MC074647 for ; Mon, 13 Jun 2011 15:38:06 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFc6Lc074644 for perforce@freebsd.org; Mon, 13 Jun 2011 15:38:06 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:38:06 GMT Message-Id: <201106131538.p5DFc6Lc074644@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194685 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:38:07 -0000 http://p4web.freebsd.org/@@194685?ac=10 Change 194685 by ilya@ilya_triton2011 on 2011/06/13 15:37:47 Simplify fuse_vfs_root, root vnode is handed by fuse_vnode_get Simplify fuse_vfs_statfs, merge macfuse Remove VFS hash comparators Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vfsops.c#10 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vfsops.c#10 (text+ko) ==== @@ -40,9 +40,6 @@ #define PRIV_VFS_FUSE_SYNC_UNMOUNT PRIV_VFS_MOUNT_NONUSER #endif - -static vfs_hash_cmp_t fuse_vnode_bgdrop_cmp; - static vfs_mount_t fuse_vfs_mount; static vfs_unmount_t fuse_vfs_unmount; static vfs_root_t fuse_vfs_root; @@ -69,57 +66,6 @@ extern struct vop_vector fuse_vnops; -/****************** - * - * >>> VFS hash comparators - * - ******************/ - -int -fuse_vnode_cmp(struct vnode *vp, void *nidp) -{ - return (VTOI(vp) != *((uint64_t *)nidp)); -} - -/* - * This comparator is used for safely setting the parent_nid. - */ - -int -fuse_vnode_setparent_cmp(struct vnode *vp, void *param) -{ - struct parentmanager_param *pmp = param; - - if (VTOI(vp) == pmp->nodeid) { - KASSERT(! pmp->valid, - ("more than one vnode seems to match #%llu", - (unsigned long long)pmp->nodeid)); - VTOFUD(vp)->parent_nid = pmp->parent_nid; - pmp->valid = 1; - } - - return (1); -} - -/* - * Vnode comparison function which expicitly marks - * clashing vnodes as unhashed (via setting id to 0) - * before dropping them. So at gc time we'll know if - * we have to remove the node from the hash. - */ - -static int -fuse_vnode_bgdrop_cmp(struct vnode *vp, void *param) -{ - struct fuse_vnode_data *fvdat = param; - - if (VTOI(vp) != fvdat->nid) - return (1); - - fvdat->nid = FUSE_NULL_ID; - return (0); -} - /************* * * >>> VFS ops @@ -541,309 +487,68 @@ return (0); } -/* stolen from portalfs */ static int -fuse_vfs_root(struct mount *mp, int flags, struct vnode **vpp) +fuse_vfs_root(struct mount *mp, int lkflags, struct vnode **vpp) { - /* - * Return locked reference to root. - */ - struct thread *td = curthread; - struct fuse_data *data = fusefs_get_data(mp); - struct vnode *vp; + int err; - DEBUG2G("mp %p: %s\n", mp, mp->mnt_stat.f_mntfromname); - - if (! data) { - struct fuse_secondary_data *fsdat = fusefs_get_secdata(mp); - int err; - - data = fsdat->master; - sx_slock(&data->mhierlock); - if (data->mpri == FM_PRIMARY) - err = fuse_vfs_root(data->mp, flags, vpp); - else - err = ENXIO; - sx_sunlock(&data->mhierlock); - return (err); - } - - vp = data->rvp; - vref(vp); - vn_lock(vp, flags | LK_RETRY); - if (vp->v_type == VNON) { - struct vattr va; - - (void)VOP_GETATTR(vp, &va, td->td_ucred); - } - *vpp = vp; -#if _DEBUG2G - DEBUG2G("root node:\n"); - vn_printf(vp, " * "); -#endif - return (0); + err = fuse_vnode_get(mp, FUSE_ROOT_ID, NULL, vpp, NULL, VDIR, 0); + return (err); } static int fuse_vfs_statfs(struct mount *mp, struct statfs *sbp) { - struct thread *td = curthread; - struct fuse_dispatcher fdi; - struct fuse_statfs_out *fsfo; - struct fuse_data *data; - int err = 0; + struct fuse_dispatcher fdi; + struct fuse_statfs_out *fsfo; + struct fuse_data *data; + int err = 0; - DEBUG2G("mp %p: %s\n", mp, mp->mnt_stat.f_mntfromname); - data = fusefs_get_data(mp); + DEBUG2G("mp %p: %s\n", mp, mp->mnt_stat.f_mntfromname); + data = fusefs_get_data(mp); - if (! data) { - struct fuse_secondary_data *fsdat; + if (!(data->dataflag & FSESS_INITED)) + goto fake; - fsdat = fusefs_get_secdata(mp); - data = fsdat->master; + if ((err = fdisp_simple_vfs_statfs(&fdi, mp))) { + if (err == ENOTCONN) { + /* + * We want to seem a legitimate fs even if the daemon + * is stiff dead... (so that, eg., we can still do path + * based unmounting after the daemon dies). + */ + goto fake; + } + return (err); + } - sx_slock(&data->mhierlock); - if (data->mpri == FM_PRIMARY) - err = fuse_vfs_statfs(data->mp, sbp); - else - err = ENXIO; - sx_sunlock(&data->mhierlock); - return (err); - } + fsfo = fdi.answ; - if (! (data->dataflag & FSESS_INITED)) - goto fake; + sbp->f_blocks = fsfo->st.blocks; + sbp->f_bfree = fsfo->st.bfree; + sbp->f_bavail = fsfo->st.bavail; + sbp->f_files = fsfo->st.files; + sbp->f_ffree = fsfo->st.ffree; /* cast from uint64_t to int64_t */ + sbp->f_namemax = fsfo->st.namelen; + sbp->f_bsize = fsfo->st.frsize; /* cast from uint32_t to uint64_t */ - if ((err = fdisp_simple_putget(&fdi, FUSE_STATFS, data->rvp, td, - NULL))) { - if (err == ENOTCONN) - /* - * We want to seem a legitimate fs even if the daemon - * is stiff dead... (so that, eg., we can still do path - * based unmounting after the daemon dies). - */ - goto fake; + DEBUG("fuse_statfs_out -- blocks: %llu, bfree: %llu, bavail: %llu, " + "files: %llu, ffree: %llu, bsize: %i, namelen: %i\n", + (unsigned long long)fsfo->st.blocks, (unsigned long long)fsfo->st.bfree, + (unsigned long long)fsfo->st.bavail, (unsigned long long)fsfo->st.files, + (unsigned long long)fsfo->st.ffree, fsfo->st.bsize, fsfo->st.namelen); - return (err); - } + fuse_ticket_drop(fdi.tick); - fsfo = fdi.answ; - - sbp->f_blocks = fsfo->st.blocks; - sbp->f_bfree = fsfo->st.bfree; - sbp->f_bavail = fsfo->st.bavail; - sbp->f_files = fsfo->st.files; - sbp->f_ffree = fsfo->st.ffree; /* cast from uint64_t to int64_t */ - sbp->f_namemax = fsfo->st.namelen; - if (fuse_libabi_geq(fusefs_get_data(mp), 7, 3)) { - /* - * fuse_kstatfs is created from a struct statvfs, we can fill - * the statfs struct by inverting sfs2svfs() of lib/libc/gen/statvfs.c - */ -#if 0 - /* - * This would pretty much **ck up buffered IO, - * since this would overwrite mnt_stat.f_iosize - */ - sbp->f_iosize = fsfo->st.bsize; /* cast from uint32_t to uint64_t */ -#endif - sbp->f_bsize = 0; /* userspace data is broken ... */ -#if FUSE_KERNELABI_GEQ(7, 4) - if (fuse_libabi_geq(fusefs_get_data(mp), 7, 4)) - /* ... unless both kernel and userspace speak 7.4 */ - sbp->f_bsize = fsfo->st.frsize; /* cast from uint32_t to uint64_t */ -#endif - } else - /* - * fuse_kstatfs is also created from a struct statfs, - * conversion is direct - */ - sbp->f_bsize = fsfo->st.bsize; /* cast from uint32_t to uint64_t */ - - DEBUG("fuse_statfs_out -- blocks: %llu, bfree: %llu, bavail: %llu, files: %llu, ffree: %llu, bsize: %i, namelen: %i\n", - (unsigned long long)fsfo->st.blocks, (unsigned long long)fsfo->st.bfree, (unsigned long long)fsfo->st.bavail, (unsigned long long)fsfo->st.files, (unsigned long long)fsfo->st.ffree, fsfo->st.bsize, fsfo->st.namelen); - - fuse_ticket_drop(fdi.tick); - - return (0); + return (0); fake: - sbp->f_blocks = 0; - sbp->f_bfree = 0; - sbp->f_bavail = 0; - sbp->f_files = 0; - sbp->f_ffree = 0; - sbp->f_namemax = 0; - sbp->f_bsize = 0; + sbp->f_blocks = 0; + sbp->f_bfree = 0; + sbp->f_bavail = 0; + sbp->f_files = 0; + sbp->f_ffree = 0; + sbp->f_namemax = 0; + sbp->f_bsize = 0; - return (0); -} - -/* - * ..._i, as "internal" -- we don't need to register it as a VFS op, - * so we might alter from the VFS_VGET signature - */ - -int -fuse_vget_i(struct mount *mp, struct thread *td, uint64_t nodeid, - enum vtype vtyp, struct vnode **vpp, enum vget_mode vmod, - uint64_t parentid) -{ -#define myflags LK_EXCLUSIVE | LK_RETRY - int err = 0; - struct fuse_vnode_data *fvdat; - struct vnode *vp2; - - DEBUG("been asked for vno #%llu, parent #%llu\n", - (long long unsigned)nodeid, (long long unsigned)parentid); - - if (vtyp == VNON) - return (EINVAL); - - if (nodeid == FUSE_ROOT_ID) { - if (parentid != FUSE_NULL_ID) - return (ENOENT); - err = VFS_ROOT(mp, myflags, vpp); - if (err) - return (err); - KASSERT(*vpp, ("we neither err'd nor found the root node")); - goto found; - } - - /* - * With vmod == VG_WANTNEW, caller wants to get a vnode for the id - * only if it's a new one. Hence, no use of trying to get - * to get one with the given id. - */ - if (vmod == VG_WANTNEW) - *vpp = NULL; - else if ((err = vfs_hash_get(mp, nodeid, /*flags*/ myflags, td, vpp, - fuse_vnode_cmp, &nodeid))) - return (err); - - /* - * If vmod == VG_FORCENEW, we also want a new vnode, but instead of - * just bitching when there is an old one with the given id, we - * go and search & destroy those ones... - */ - if (*vpp && vmod == VG_FORCENEW) { - fuse_vnode_teardown(*vpp, td, NULL, vtyp); - *vpp = NULL; - } - -audit: - if (*vpp) { - DEBUG("vnode taken from hash\n"); - if ((*vpp)->v_type == vtyp) { - if (vtyp == VDIR && parentid != FUSE_NULL_ID && - VTOFUD(*vpp)->parent_nid != parentid) { - DEBUG("parent mismatch\n"); - if (VTOFUD(*vpp)->parent_nid == FUSE_NULL_ID) { - /* - * Deleted directory is to be reused. - * We adjust the nodeid to the new scenario. - */ - struct parentmanager_param pmp; - struct vnode *xvp; - - DEBUG("dir has no parent, pushing in required\n"); - pmp.nodeid = nodeid; - pmp.parent_nid = parentid; - pmp.valid = 0; - err = vfs_hash_get(mp, pmp.nodeid, 0, - td, &xvp, - fuse_vnode_setparent_cmp, - &pmp); - KASSERT(xvp == NULL, - ("findparent routine has fetched a vnode")); - } else - /* parent mismatch for a directory */ - err = EIO; - - if (err) { - vput(*vpp); - *vpp = NULL; - return (err); - } - } - goto found; - } else if ((*vpp)->v_type == VNON) { - DEBUG2G("vnode #%llu with no type\n", VTOILLU(*vpp)); - (*vpp)->v_type = vtyp; - goto found; - } else { - fuse_vnode_ditch(*vpp, td); - vput(*vpp); - } - } else if (parentid == FUSE_NULL_ID) { - DEBUG("no vpp, no parentid => ENOENT\n"); - *vpp = NULL; - return (ENOENT); - } - - /* as the big guys say, malloc for your data before getnewvnode() */ - - fvdat = malloc(sizeof(*fvdat), M_FUSEVN, M_WAITOK | M_ZERO); - err = getnewvnode("fuse", mp, &fuse_vnops, vpp); -#if _DEBUG - DEBUG2G("allocated new vnode:\n"); - vn_printf(*vpp, " * "); -#endif - - if (err) { - free(fvdat, M_FUSEVN); - VNASSERT(! *vpp, *vpp, - ("Maybe I misunderstood how getnewvnode() works...")); - return (err); - } - - err = vn_lock(*vpp, myflags); - if (err) - printf("fuse4bsd: leaking vnode %p\n", *vpp); - else - err = insmntque(*vpp, mp); - if (err) { - free(fvdat, M_FUSEVN); - return (err); - } - - /* - * There is no harm in fully initializing the vnode before trying - * at insertion, because vnodes are gc-d anyway. For the same reason, - * they _do_ have to be fully initialized here -- the gc routines should - * get the node in an as much predictable state as it's possible. - */ - fuse_vnode_init(*vpp, fvdat, nodeid, vtyp, parentid); - err = vfs_hash_insert(*vpp, nodeid, /*flags*/ myflags, td, &vp2, - fuse_vnode_bgdrop_cmp, fvdat); - - if (err) { - free(fvdat, M_FUSEVN); - /* XXX do something to tear down allocated inode? - * (other fss' code doesn't, so neither I...) - */ - return (err); - } - - if (vp2) { - DEBUG("gee, vfs hash collision for node #%llu\n", (unsigned long long)nodeid); - if (vmod == VG_WANTNEW) { - vput(vp2); - *vpp = NULL; - return (EEXIST); - } else if (vmod == VG_FORCENEW) { - fuse_vnode_teardown(vp2, td, NULL, vtyp); - *vpp = NULL; - goto audit; - } - vpp = &vp2; - goto audit; - } - -found: -#if _DEBUG - DEBUG2G("\n"); - vn_printf(*vpp, " * "); -#endif - return (0); -#undef myflags + return (0); } From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:39:13 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7A5811065677; Mon, 13 Jun 2011 15:39:13 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3C5651065676 for ; Mon, 13 Jun 2011 15:39:13 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 29E248FC16 for ; Mon, 13 Jun 2011 15:39:13 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFdDP7074677 for ; Mon, 13 Jun 2011 15:39:13 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFdCTY074674 for perforce@freebsd.org; Mon, 13 Jun 2011 15:39:12 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:39:12 GMT Message-Id: <201106131539.p5DFdCTY074674@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194686 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:39:13 -0000 http://p4web.freebsd.org/@@194686?ac=10 Change 194686 by ilya@ilya_triton2011 on 2011/06/13 15:38:33 Fix mount and unmount, remove secondary mounts support Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vfsops.c#11 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vfsops.c#11 (text+ko) ==== @@ -64,322 +64,209 @@ MALLOC_DEFINE(M_FUSEVFS, "fuse_filesystem", "buffer for fuse vfs layer"); -extern struct vop_vector fuse_vnops; +#define FUSE_FLAGOPT(fnam, fval) do { \ + vfs_flagopt(opts, #fnam, &mntopts, fval); \ + vfs_flagopt(opts, "__" #fnam, &__mntopts, fval); \ +} while (0) -/************* - * - * >>> VFS ops - * - *************/ - -/* - * Mount system call - */ static int fuse_vfs_mount(struct mount *mp) { - struct thread *td = curthread; - int err = 0; - size_t len; - char *fspec, *subtype = NULL; - struct vnode *devvp; - struct vfsoptlist *opts; - struct nameidata nd, *ndp = &nd; - struct cdev *fdev; - struct sx *slock; - struct fuse_data *data; - int mntopts = 0, __mntopts = 0, max_read_set = 0, secondary = 0; - unsigned max_read = ~0; - struct vnode *rvp; - struct fuse_vnode_data *fvdat; + size_t len; + int err = 0; + int mntopts = 0; + int __mntopts = 0; + int max_read_set = 0; + unsigned int max_read = ~0; + + struct cdev *fdev; + struct fuse_data *data; + struct thread *td = curthread; + char *fspec, *subtype = NULL; + struct vnode *devvp; + struct vfsoptlist *opts; + struct nameidata nd, *ndp = &nd; + + fuse_trace_printf_vfsop(); - GIANT_REQUIRED; - KASSERT(fuse_useco >= 0, - ("negative fuse usecount despite Giant")); + GIANT_REQUIRED; + KASSERT(fuse_useco >= 0, + ("negative fuse usecount despite Giant")); - if (mp->mnt_flag & MNT_UPDATE) - return (EOPNOTSUPP); + if (mp->mnt_flag & MNT_UPDATE) + return (EOPNOTSUPP); - mp->mnt_flag |= MNT_SYNCHRONOUS; - /* Get the new options passed to mount */ - opts = mp->mnt_optnew; + mp->mnt_flag |= MNT_SYNCHRONOUS; + /* Get the new options passed to mount */ + opts = mp->mnt_optnew; - if (!opts) - return (EINVAL); + if (!opts) + return (EINVAL); - /* `fspath' contains the mount point (eg. /mnt/fuse/sshfs); REQUIRED */ - if (!vfs_getopts(opts, "fspath", &err)) - return (err); + /* `fspath' contains the mount point (eg. /mnt/fuse/sshfs); REQUIRED */ + if (!vfs_getopts(opts, "fspath", &err)) + return (err); - /* `from' contains the device name (eg. /dev/fuse0); REQUIRED */ - fspec = vfs_getopts(opts, "from", &err); - if (!fspec) - return (err); + /* `from' contains the device name (eg. /dev/fuse0); REQUIRED */ + fspec = vfs_getopts(opts, "from", &err); + if (!fspec) + return (err); - mp->mnt_data = NULL; + mp->mnt_data = NULL; - /* - * Not an update, or updating the name: look up the name - * and verify that it refers to a sensible disk device. - */ + /* + * Not an update, or updating the name: look up the name + * and verify that it refers to a sensible disk device. + */ - NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, fspec, td); - if ((err = namei(ndp)) != 0) - return (err); - NDFREE(ndp, NDF_ONLY_PNBUF); - devvp = ndp->ni_vp; + NDINIT(ndp, LOOKUP, FOLLOW, UIO_SYSSPACE, fspec, td); + if ((err = namei(ndp)) != 0) + return (err); + NDFREE(ndp, NDF_ONLY_PNBUF); + devvp = ndp->ni_vp; - if (devvp->v_type != VCHR) { - vrele(devvp); - return (ENXIO); - } + if (devvp->v_type != VCHR) { + vrele(devvp); + return (ENXIO); + } - fdev = devvp->v_rdev; - dev_ref(fdev); + fdev = devvp->v_rdev; + dev_ref(fdev); - if (fuse_enforce_dev_perms) { - /* - * Check if mounter can open the fuse device. - * - * This has significance only if we are doing a secondary mount - * which doesn't involve actually opening fuse devices, but we - * still want to enforce the permissions of the device (in - * order to keep control over the circle of fuse users). - * - * (In case of primary mounts, we are either the superuser so - * we can do anything anyway, or we can mount only if the - * device is already opened by us, ie. we are permitted to open - * the device.) - */ + if (fuse_enforce_dev_perms) { + /* + * Check if mounter can open the fuse device. + * + * This has significance only if we are doing a secondary mount + * which doesn't involve actually opening fuse devices, but we + * still want to enforce the permissions of the device (in + * order to keep control over the circle of fuse users). + * + * (In case of primary mounts, we are either the superuser so + * we can do anything anyway, or we can mount only if the + * device is already opened by us, ie. we are permitted to open + * the device.) + */ #ifdef MAC - err = mac_check_vnode_open(td->td_ucred, devvp, VREAD|VWRITE); - if (! err) + err = mac_check_vnode_open(td->td_ucred, devvp, VREAD|VWRITE); + if (! err) #endif - err = VOP_ACCESS(devvp, VREAD|VWRITE, td->td_ucred, td); - if (err) { - vrele(devvp); - return (err); - } - } + err = VOP_ACCESS(devvp, VREAD|VWRITE, td->td_ucred, td); + if (err) { + vrele(devvp); + return (err); + } + } - /* - * according to coda code, no extra lock is needed -- - * although in sys/vnode.h this field is marked "v" - */ - vrele(devvp); + /* + * according to coda code, no extra lock is needed -- + * although in sys/vnode.h this field is marked "v" + */ + vrele(devvp); - FUSE_LOCK; - if (! fdev->si_devsw || - strcmp("fuse", fdev->si_devsw->d_name)) { - FUSE_UNLOCK; - return (ENXIO); - } + FUSE_LOCK(); + if (!fdev->si_devsw || + strcmp("fuse", fdev->si_devsw->d_name)) { + FUSE_UNLOCK(); + return (ENXIO); + } - if ((data = fusedev_get_data(fdev)) && - data->dataflag & FSESS_OPENED) - data->mntco++; - else { - FUSE_UNLOCK; - dev_rel(fdev); - return (ENXIO); - } - FUSE_UNLOCK; + data = fusedev_get_data(fdev); + if (data && data->dataflag & FSESS_OPENED) { + data->mntco++; + debug_printf("a.inc:mntco = %d\n", data->mntco); + } else { + FUSE_UNLOCK(); + dev_rel(fdev); + return (ENXIO); + } + FUSE_UNLOCK(); - /* - * With the help of underscored options the mount program - * can inform us from the flags it sets by default - */ -#define FUSE_FLAGOPT(fnam, fval) do { \ - vfs_flagopt(opts, #fnam, &mntopts, fval); \ - vfs_flagopt(opts, "__" #fnam, &__mntopts, fval); \ -} while (0) - FUSE_FLAGOPT(private, FSESS_PRIVATE); - FUSE_FLAGOPT(neglect_shares, FSESS_NEGLECT_SHARES); - FUSE_FLAGOPT(allow_other, FSESS_DAEMON_CAN_SPY); - FUSE_FLAGOPT(push_symlinks_in, FSESS_PUSH_SYMLINKS_IN); - FUSE_FLAGOPT(default_permissions, FSESS_DEFAULT_PERMISSIONS); + /* + * With the help of underscored options the mount program + * can inform us from the flags it sets by default + */ + FUSE_FLAGOPT(private, FSESS_PRIVATE); + FUSE_FLAGOPT(neglect_shares, FSESS_NEGLECT_SHARES); + FUSE_FLAGOPT(allow_other, FSESS_DAEMON_CAN_SPY); + FUSE_FLAGOPT(push_symlinks_in, FSESS_PUSH_SYMLINKS_IN); + FUSE_FLAGOPT(default_permissions, FSESS_DEFAULT_PERMISSIONS); +#ifdef XXXIP #if FUSE_HAS_DESTROY - FUSE_FLAGOPT(sync_unmount, FSESS_SYNC_UNMOUNT); + FUSE_FLAGOPT(sync_unmount, FSESS_SYNC_UNMOUNT); +#endif #endif -#undef FUSE_FLAGOPT - if (vfs_scanopt(opts, "max_read=", "%u", &max_read) == 1) - max_read_set = 1; - subtype = vfs_getopts(opts, "subtype=", &err); - err = 0; + if (vfs_scanopt(opts, "max_read=", "%u", &max_read) == 1) + max_read_set = 1; + subtype = vfs_getopts(opts, "subtype=", &err); + err = 0; - if (fdata_kick_get(data)) - err = ENOTCONN; - if (mntopts & FSESS_DAEMON_CAN_SPY) - err = priv_check(td, PRIV_VFS_FUSE_ALLOWOTHER); + if (fdata_kick_get(data)) + err = ENOTCONN; + if (mntopts & FSESS_DAEMON_CAN_SPY) + err = priv_check(td, PRIV_VFS_FUSE_ALLOWOTHER); - slock = &data->mhierlock; - /* Note that sx_try_xlock returns 0 on _failure_ */ - if (! err && sx_try_xlock(slock) == 0) { - err = EBUSY; - DEBUG2G("lock contested\n"); - } + DEBUG2G("mntopts 0x%x\n", mntopts); - if (err) - goto out; + /* Sanity + permission checks */ - DEBUG2G("mntopts 0x%x\n", mntopts); + if (!data->daemoncred) + panic("fuse daemon found, but identity unknown"); - /* Sanity + permission checks */ + MPASS(data->mpri != FM_PRIMARY); + if (td->td_ucred->cr_uid != data->daemoncred->cr_uid) + /* are we allowed to do the first mount? */ + err = priv_check(td, PRIV_VFS_FUSE_MOUNT_NONUSER); - if (! data->daemoncred) - panic("fuse daemon found, but identity unknown"); + if (err) { + goto out; + } - if (data->mpri == FM_PRIMARY) { - secondary = 1; - if (data->dataflag & FSESS_PRIVATE) - /* - * device is owned and owner doesn't - * wanna share it with us - */ - err = EPERM; - if (/* actual option set differs from default */ - mntopts != __mntopts || - max_read_set || subtype) - /* - * Secondary mounts not allowed to have - * options (basicly, that would be - * useless though harmless, just let's - * be explicit about it) - */ - err = EINVAL; - } else { - if (td->td_ucred->cr_uid != data->daemoncred->cr_uid) - /* are we allowed to do the first mount? */ - err = priv_check(td, PRIV_VFS_FUSE_MOUNT_NONUSER); - } + /* We need this here as this slot is used by getnewvnode() */ + mp->mnt_stat.f_iosize = MAXBSIZE; - if (err) { - sx_xunlock(slock); - goto out; - } + mp->mnt_data = data; - /* We need this here as this slot is used by getnewvnode() */ - mp->mnt_stat.f_iosize = MAXBSIZE; + data->mp = mp; + data->mpri = FM_PRIMARY; + data->dataflag |= mntopts; + data->max_read = max_read; +#ifdef XXXIP + if (!priv_check(td, PRIV_VFS_FUSE_SYNC_UNMOUNT)) + data->dataflag |= FSESS_CAN_SYNC_UNMOUNT; +#endif - if (secondary) { - struct fuse_secondary_data *fsdat; - - fsdat = malloc(sizeof(*fsdat), M_FUSEVFS, M_WAITOK| M_ZERO); - fsdat->mpri = FM_SECONDARY; - mp->mnt_data = fsdat; - fsdat->mp = mp; - fsdat->master = data; - - LIST_INSERT_HEAD(&data->slaves_head, fsdat, slaves_link); - - goto rootdone; - } - - mp->mnt_data = data; - - /* code stolen from portalfs */ - - fvdat = malloc(sizeof(*fvdat), M_FUSEVN, M_WAITOK | M_ZERO); - - err = getnewvnode("fuse", mp, &fuse_vnops, &rvp); - if (! err) { - err = vn_lock(rvp, LK_EXCLUSIVE | LK_RETRY); - if (err) - printf("fuse4bsd: leaking vnode %p\n", rvp); - } - - if (! err) { - /* - * FUSE_ROOT_ID as an inode number will be resolved directly. - * without resorting to the vfs hashing mechanism, thus it also - * can be inserted directly to the v_hash slot. - */ - rvp->v_hash = FUSE_ROOT_ID; - data->rvp = rvp; - fuse_vnode_init(rvp, fvdat, FUSE_ROOT_ID, VNON, 0); - rvp->v_vflag |= VV_ROOT; - err = insmntque(rvp, mp); - } - - if (err) { - fdata_kick_set(data); - sx_xunlock(slock); - free(fvdat, M_FUSEVN); - goto out; - } else - VOP_UNLOCK(rvp, 0); - data->mp = mp; - data->mpri = FM_PRIMARY; - data->dataflag |= mntopts; - data->max_read = max_read; - if (! priv_check(td, PRIV_VFS_FUSE_SYNC_UNMOUNT)) - data->dataflag |= FSESS_CAN_SYNC_UNMOUNT; - -rootdone: - - sx_xunlock(slock); - - vfs_getnewfsid(mp); - mp->mnt_flag |= MNT_LOCAL; -#ifdef MNTK_MPSAFE - mp->mnt_kern_flag |= MNTK_MPSAFE; + vfs_getnewfsid(mp); + mp->mnt_flag |= MNT_LOCAL; +#ifdef XXXIP + mp->mnt_kern_flag |= MNTK_MPSAFE; #endif - if (subtype) { - strlcat(mp->mnt_stat.f_fstypename, ".", MFSNAMELEN); - strlcat(mp->mnt_stat.f_fstypename, subtype, MFSNAMELEN); - } - copystr(fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &len); - if (secondary && len >= 1) { - /* - * I've considered using s1, s2,... for shares, instead - * #1, #2,... as s* is more conventional... - * Finally I chose #* as I feel it's more expressive - * and s* can be misleading (slices are strung up - * serially, shares exist in parallell) - */ - mp->mnt_stat.f_mntfromname[len-1] = '#'; - if (len < MNAMELEN - 1) { - /* Duhh, ain't there a better way of doing this? */ - int log = 0, lim = 1; - while (data->mntco > lim) { - lim *= 10; - log++; - } - if (log >= MNAMELEN - len) { - mp->mnt_stat.f_mntfromname[len] = '?'; - len++; - } else { - sprintf(mp->mnt_stat.f_mntfromname + len, "%d", - data->mntco - 1); - len += log; - } - } - } - bzero(mp->mnt_stat.f_mntfromname + len, MNAMELEN - len); - DEBUG2G("mp %p: %s\n", mp, mp->mnt_stat.f_mntfromname); + if (subtype) { + strlcat(mp->mnt_stat.f_fstypename, ".", MFSNAMELEN); + strlcat(mp->mnt_stat.f_fstypename, subtype, MFSNAMELEN); + } + copystr(fspec, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &len); + bzero(mp->mnt_stat.f_mntfromname + len, MNAMELEN - len); + DEBUG2G("mp %p: %s\n", mp, mp->mnt_stat.f_mntfromname); - if (! secondary) - /* Now handshaking with daemon */ - fuse_internal_send_init(data, td); + /* Now handshaking with daemon */ + fuse_internal_send_init(data, td); out: - if (err ) { - data->mntco--; - FUSE_LOCK; - if (data->mntco == 0 && ! (data->dataflag & FSESS_OPENED)) { - fdev->si_drv1 = NULL; - fdata_destroy(data); - } - FUSE_UNLOCK; - dev_rel(fdev); - } - return (err); + if (err) { + data->mntco--; + FUSE_LOCK(); + if (data->mntco == 0 && ! (data->dataflag & FSESS_OPENED)) { + fdev->si_drv1 = NULL; + fdata_destroy(data); + } + FUSE_UNLOCK(); + dev_rel(fdev); + } + return (err); } -/* - * Unmount system call - */ static int fuse_vfs_unmount(struct mount *mp, int mntflags) { @@ -388,101 +275,60 @@ struct fuse_data *data; struct cdev *fdev; - struct fuse_secondary_data *fsdat = NULL; - struct thread *td = curthread; + struct fuse_dispatcher fdi; + struct thread *td = curthread; fuse_trace_printf_vfsop(); GIANT_REQUIRED; - /* Flag handling */ if (mntflags & MNT_FORCE) { flags |= FORCECLOSE; } data = fusefs_get_data(mp); if (!data) { - fsdat = fusefs_get_secdata(mp); - data = fsdat->master; + panic("no private data for mount point?"); } - if (sx_try_xlock(&data->mhierlock) == 0) { - DEBUG2G("lock contested\n"); - return (EBUSY); + /* There is 1 extra root vnode reference (mp->mnt_data). */ + err = vflush(mp, 1, flags, td); + if (err) { + debug_printf("vflush failed"); + return (err); } - if (! fsdat) { -#if _DEBUG - struct vnode *vp, *nvp; -#endif - if (! (mntflags & MNT_FORCE || - data->dataflag & FSESS_NEGLECT_SHARES || - LIST_EMPTY(&data->slaves_head))) { - err = EBUSY; - goto unlock; - } - -#if _DEBUG - MNT_ILOCK(mp); - DEBUG2G("vnodes:\n"); - MNT_VNODE_FOREACH(vp, mp, nvp) { - DEBUG2G("\n"); - vn_printf(vp, "..."); - } - MNT_IUNLOCK(mp); -#endif - - /* Flush files -> vflush */ - /* There is 1 extra root vnode reference (mp->mnt_data). */ - if ((err = vflush(mp, 1, flags, td))) { - DEBUG2G("err %d\n", err); - goto unlock; - } + if (fdata_kick_get(data)) { + goto alreadydead; } - if (fsdat) { - LIST_REMOVE(fsdat, slaves_link); - free(fsdat, M_FUSEVFS); - } else { -#if FUSE_HAS_DESTROY - if (data->dataflag & FSESS_SYNC_UNMOUNT && - ((sync_unmount == 1 && - data->dataflag & FSESS_CAN_SYNC_UNMOUNT) || - sync_unmount == 2) && - !(mntflags & MNT_FORCE)) { - struct fuse_dispatcher fdi; - - fdisp_init(&fdi, 0); - fdisp_make(&fdi, mp, FUSE_DESTROY, FUSE_ROOT_ID, td, - NULL); - fdisp_wait_answ(&fdi); - /* ignore return value */ - } -#endif - fdata_kick_set(data); - - data->mpri = FM_NOMOUNTED; + fdisp_init(&fdi, 0); + fdisp_make(&fdi, mp, FUSE_DESTROY, 0, td, NULL); + err = fdisp_wait_answ(&fdi); + if (!err) { + fuse_ticket_drop(fdi.tick); } -unlock: - sx_xunlock(&data->mhierlock); - if (err) - return (err); + fdata_kick_set(data); +alreadydead: + data->mpri = FM_NOMOUNTED; data->mntco--; - FUSE_LOCK; + FUSE_LOCK(); fdev = data->fdev; if (data->mntco == 0 && !(data->dataflag & FSESS_OPENED)) { data->fdev->si_drv1 = NULL; fdata_destroy(data); } - FUSE_UNLOCK; - dev_rel(fdev); + FUSE_UNLOCK(); + + MNT_ILOCK(mp); mp->mnt_data = NULL; + mp->mnt_flag &= ~MNT_LOCAL; + MNT_IUNLOCK(mp); - /* Other guys do this, I don't know what it is good for... */ - mp->mnt_flag &= ~MNT_LOCAL; + dev_rel(fdev); return (0); } From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:40:19 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BEBA81065673; Mon, 13 Jun 2011 15:40:19 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81965106566B for ; Mon, 13 Jun 2011 15:40:19 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 6F4CA8FC08 for ; Mon, 13 Jun 2011 15:40:19 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFeJac074788 for ; Mon, 13 Jun 2011 15:40:19 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFeJBr074784 for perforce@freebsd.org; Mon, 13 Jun 2011 15:40:19 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:40:19 GMT Message-Id: <201106131540.p5DFeJBr074784@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194687 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:40:20 -0000 http://p4web.freebsd.org/@@194687?ac=10 Change 194687 by ilya@ilya_triton2011 on 2011/06/13 15:39:55 Vnode operations merge. Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#12 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#12 (text+ko) ==== @@ -74,7 +74,7 @@ static vop_print_t fuse_vnop_print; static vop_unlock_t fuse_vnop_unlock; -static struct vop_vector fuse_vnops = { +struct vop_vector fuse_vnops = { .vop_default = &default_vnodeops, .vop_access = fuse_vnop_access, .vop_close = fuse_vnop_close, @@ -289,12 +289,11 @@ goto undo; } - err = FSNodeGetOrCreateFileVNodeByID(mp, - feo->nodeid, - dvp, - VREG, /*size*/0, - vpp, - (gone_good_old) ? 0 : FN_CREATING); + err = fuse_vnode_get(mp, feo->nodeid, dvp, vpp, cnp, VREG, + /*size*/0); + if (!err && !gone_good_old) { + VTOFUD(*vpp)->flag |= FN_CREATING; + } if (err) { if (gone_good_old) { fuse_internal_forget_send(mp, td, cred, feo->nodeid, 1, fdip); @@ -416,7 +415,11 @@ return 0; } -#ifdef XXXVP +#define fusetimespeccmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec == (uvp)->tv_sec) ? \ + ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ + ((tvp)->tv_sec cmp (uvp)->tv_sec)) + /* struct vnop_getattr_args { struct vnode *a_vp; @@ -428,68 +431,72 @@ static int fuse_vnop_getattr(struct vop_getattr_args *ap) { - struct vnode *vp = ap->a_vp; - struct vattr *vap = ap->a_vap; - struct ucred *cred = ap->a_cred; - struct thread *td = curthread; - struct fuse_dispatcher fdi; - struct timespec uptsp; - int err = 0; + int err = 0; + int dataflag; + struct vnode *vp = ap->a_vp; + struct vattr *vap = ap->a_vap; + struct ucred *cred = ap->a_cred; + struct thread *td = curthread; + struct fuse_dispatcher fdi; + struct timespec uptsp; - /* look for cached attributes */ - nanouptime(&uptsp); - if (timespeccmp(&uptsp, &VTOFUD(vp)->cached_attrs_valid, <=)) { - DEBUG("found valid cached attrs for vp #%llu\n", VTOILLU(vp)); + fuse_trace_printf_vnop(); - if (vap != VTOVA(vp)) - memcpy(vap, VTOVA(vp), sizeof(*vap)); + dataflag = fusefs_get_data(vnode_mount(vp))->dataflag; - return (0); - } + /* Note that we are not bailing out on a dead file system just yet. */ - if (! (fusefs_get_data(vp->v_mount)->dataflag & FSESS_INITED)) { - if (! (vp->v_vflag & VV_ROOT)) { - fdata_kick_set(fusefs_get_data(vp->v_mount)); - err = ENOTCONN; + /* look for cached attributes */ + nanouptime(&uptsp); + if (fusetimespeccmp(&uptsp, &VTOFUD(vp)->cached_attrs_valid, <=)) { + if (vap != VTOVA(vp)) { + memcpy(vap, VTOVA(vp), sizeof(*vap)); + } + debug_printf("fuse_getattr a: returning 0\n"); + return (0); + } - return (err); - } else - goto fake; - } + if (!(dataflag & FSESS_INITED)) { + if (!vnode_isvroot(vp)) { + fdata_kick_set(fusefs_get_data(vnode_mount(vp))); + err = ENOTCONN; + debug_printf("fuse_getattr b: returning ENOTCONN\n"); + return (err); + } else { + goto fake; + } + } - if ((err = fdisp_simple_putget(&fdi, FUSE_GETATTR, vp, td, cred))) { - if (err == ENOTCONN && vp->v_vflag & VV_ROOT) - /* see comment at similar place in fuse_statfs() */ - goto fake; + if ((err = fdisp_simple_putget_vp(&fdi, FUSE_GETATTR, vp, td, cred))) { + if (err == ENOTCONN && vnode_isvroot(vp)) { + /* see comment at similar place in fuse_statfs() */ + goto fake; + } + debug_printf("fuse_getattr c: returning ENOTCONN\n"); + return (err); + } - return (err); - } + cache_attrs(vp, (struct fuse_attr_out *)fdi.answ); + if (vap != VTOVA(vp)) { + memcpy(vap, VTOVA(vp), sizeof(*vap)); + } - cache_attrs(vp, (struct fuse_attr_out *)fdi.answ); - if (vap != VTOVA(vp)) - memcpy(vap, VTOVA(vp), sizeof(*vap)); + fuse_ticket_drop(fdi.tick); - fuse_ticket_drop(fdi.tick); + if (vnode_vtype(vp) != vap->va_type) { + if (vnode_vtype(vp) == VNON && vap->va_type != VNON) { + // vp->v_type = vap->va_type; + } else { + /* stale vnode */ + // XXX: vnode should be ditched. + debug_printf("fuse_getattr d: returning ENOTCONN\n"); + return (ENOTCONN); + } + } - if (vp->v_type != vap->va_type) { - if (vp->v_type == VNON && vap->va_type != VNON) { - DEBUG2G("vnode #%llu with no type\n", VTOILLU(vp)); - vp->v_type = vap->va_type; - } else { - /* stale vnode */ - DEBUG2G("node #%lu got stale (old type %#x, new type %#x), kicking...\n", - vap->va_fileid, vp->v_type, vap->va_type); - fuse_vnode_ditch(vp, td); - return (ENOTCONN); - } - } + debug_printf("fuse_getattr e: returning 0\n"); - DEBUG("node #%llu, type %d\n", VTOILLU(vp), vap->va_type); -#if _DEBUG - DEBUG2G("\n"); - vn_printf(vp, " * "); -#endif - return (0); + return (0); fake: bzero(vap, sizeof(*vap)); @@ -497,7 +504,6 @@ return (0); } -#endif /* struct vnop_inactive_args { @@ -584,47 +590,44 @@ struct componentname *a_cnp; }; */ -#ifdef XXXIP int fuse_vnop_lookup(struct vop_lookup_args *ap) { struct componentname *cnp = ap->a_cnp; int nameiop = cnp->cn_nameiop; int flags = cnp->cn_flags; - int wantparent = flags & WANTPARENT; + int wantparent = flags & (LOCKPARENT|WANTPARENT); int islastcn = flags & ISLASTCN; struct vnode *dvp = ap->a_dvp; struct vnode **vpp = ap->a_vpp; struct thread *td = cnp->cn_thread; struct ucred *cred = cnp->cn_cred; + struct mount *mp = vnode_mount(dvp); fuse_trace_printf_vnop(); int err = 0; int lookup_err = 0; struct vnode *vp = NULL; + struct vnode *pdp = NULL; struct fuse_attr *fattr = NULL; struct fuse_dispatcher fdi; enum fuse_opcode op; - uint64_t nid, parentid; + uint64_t nid, parent_nid; struct fuse_access_param facp; -#ifdef INVARIANTS - int cache_attrs_hit = 0; -#endif + uint64_t size = 0; - /* general stuff, based on vfs_cache_lookup */ + if (fuse_isdeadfs(dvp)) { + *vpp = NULL; + return ENXIO; + } -#if _DEBUG - DEBUG2G("root node:\n"); - vn_printf(fusefs_get_data(dvp->v_mount)->rvp, " * "); -#endif - - if (dvp->v_type != VDIR) { + if (vnode_vtype(dvp) != VDIR) { return ENOTDIR; } - if (islastcn && (dvp->v_mount->mnt_flag & MNT_RDONLY) && - (nameiop == DELETE || nameiop == RENAME)) { + if (islastcn && vfs_isrdonly(mp) && + ((nameiop == DELETE) || (nameiop == RENAME) || (nameiop == CREATE))) { return (EROFS); } @@ -636,122 +639,121 @@ */ bzero(&facp, sizeof(facp)); - if ( -#ifdef NO_EARLY_PERM_CHECK_HACK - 1 -#else - dvp->v_vflag & VV_ROOT -#endif - ) { - if ((err = fuse_internal_access(dvp, VEXEC, cred, td, &facp))) - return err; + if (vnode_isvroot(dvp)) { /* early permission check hack */ + if ((err = fuse_internal_access(dvp, VEXEC, cred, td, &facp))) { + return err; + } } - DEBUG2G("lookup in #%llu, nameiop %lu, with flags %#x\n", - VTOILLU(dvp), cnp->cn_nameiop, flags); - - /* fetching data from "storage" */ - if (flags & ISDOTDOT) { - DEBUG2G("dotdot lookup!\n"); - nid = VTOFUD(dvp)->parent_nid; - parentid = FUSE_NULL_ID; + pdp = VTOFUD(dvp)->parent; + nid = VTOI(pdp); + parent_nid = VTOFUD(dvp)->parent_nid; fdisp_init(&fdi, 0); op = FUSE_GETATTR; + goto calldaemon; } else if (cnp->cn_namelen == 1 && *(cnp->cn_nameptr) == '.') { - DEBUG2G("dot lookup!\n"); nid = VTOI(dvp); - parentid = VTOFUD(dvp)->parent_nid; /* irrelevant */ + parent_nid = VTOFUD(dvp)->parent_nid; fdisp_init(&fdi, 0); op = FUSE_GETATTR; + goto calldaemon; } else { - nid = VTOI(dvp); - parentid = VTOI(dvp); - fdisp_init(&fdi, cnp->cn_namelen + 1); - op = FUSE_LOOKUP; + err = cache_lookup(dvp, vpp, cnp); + switch (err) { + + case -1: /* positive match */ +#ifdef XXXIP + fuse_lookup_cache_hits++; +#endif + return 0; + + case 0: /* no match in cache */ +#ifdef XXXIP + fuse_lookup_cache_misses++; +#endif + break; + + case ENOENT: /* negative match */ + /* fall through */ + default: + return err; + } } - fdisp_make(&fdi, dvp->v_mount, op, nid, td, cred); + nid = VTOI(dvp); + parent_nid = VTOI(dvp); + fdisp_init(&fdi, cnp->cn_namelen + 1); + op = FUSE_LOOKUP; + +calldaemon: + fdisp_make(&fdi, vnode_mount(dvp), op, nid, td, cred); if (op == FUSE_LOOKUP) { memcpy(fdi.indata, cnp->cn_nameptr, cnp->cn_namelen); ((char *)fdi.indata)[cnp->cn_namelen] = '\0'; - DEBUG2G("standard lookup, looking up %s\n", (char *)fdi.indata); } lookup_err = fdisp_wait_answ(&fdi); if (op == FUSE_LOOKUP && !lookup_err) { nid = ((struct fuse_entry_out *)fdi.answ)->nodeid; + size = ((struct fuse_entry_out *)fdi.answ)->attr.size; if (!nid) { /* * zero nodeid is the same as "not found", * but it's also cacheable (which we keep * keep on doing not as of writing this) */ - DEBUG2G("zero nid, ie ENOENT\n"); lookup_err = ENOENT; } else if (nid == FUSE_ROOT_ID) { - DEBUG2G("root inode found on lookup?!!\n"); lookup_err = EINVAL; } } - if (lookup_err && ( - (!fdi.answ_stat) || /* this means messaging error */ - lookup_err != ENOENT || /* daemon reported other error than "legal" ENOENT */ - op != FUSE_LOOKUP /* we tolerate ENOENT only when we sent a LOOKUP */ - )) { + if (lookup_err && + ((!fdi.answ_stat) || lookup_err != ENOENT || op != FUSE_LOOKUP)) { /* * There is error but not lookup related actually * (messaging error) */ - DEBUG("lookup failed b/c messaging crap\n"); return (lookup_err); } - /* analyzing answer */ - /* * Now we got the answer and filtered out the crap, too, so we know that * "found" iff lookup_err == 0 */ if (lookup_err) { - DEBUG("looked up thingy not found\n"); - if ((nameiop == CREATE || nameiop == RENAME) - && islastcn - /* && directory dvp has not been removed */) { + if ((nameiop == CREATE || nameiop == RENAME) && + islastcn /* && directory dvp has not been removed */) { - if (dvp->v_mount->mnt_flag & MNT_RDONLY) { - err = EROFS; - goto out; - } + if (vfs_isrdonly(mp)) { + err = EROFS; + goto out; + } - DEBUG("create/rename -- we have to make it\n"); - /* - * Check for write access on directory. - */ - - if ((err = fuse_internal_access(dvp, VWRITE, cred, td, &facp))) - goto out; +#if 0 // THINK_ABOUT_THIS + if ((err = fuse_internal_access(dvp, VWRITE, cred, td, &facp))) { + goto out; + } +#endif - /* - * Possibly record the position of a slot in the - * directory large enough for the new component name. - * This can be recorded in the vnode private data for - * dvp. Set the SAVENAME flag to hold onto the - * pathname for use later in VOP_CREATE or VOP_RENAME. - */ - cnp->cn_flags |= SAVENAME; - - err = EJUSTRETURN; - goto out; + /* + * Possibly record the position of a slot in the + * directory large enough for the new component name. + * This can be recorded in the vnode private data for + * dvp. Set the SAVENAME flag to hold onto the + * pathname for use later in VOP_CREATE or VOP_RENAME. + */ + cnp->cn_flags |= SAVENAME; + + err = EJUSTRETURN; + goto out; } - /* - * Consider inserting name into cache. - */ + /* Consider inserting name into cache. */ /* * No we can't use negative caching, as the fs @@ -772,13 +774,13 @@ goto out; } else { + if (op == FUSE_GETATTR) { fattr = &((struct fuse_attr_out *)fdi.answ)->attr; } else { fattr = &((struct fuse_entry_out *)fdi.answ)->attr; } - DEBUG("we found something...\n"); /* * If deleting, and at end of pathname, return parameters * which can be used to remove file. If the wantparent flag @@ -786,11 +788,9 @@ * and lock the inode, being careful with ".". */ if (nameiop == DELETE && islastcn) { - DEBUG("something to delete\n"); /* * Check for write access on directory. */ - facp.xuid = fattr->uid; facp.facc_flags |= FACCESS_STICKY; err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); @@ -801,95 +801,112 @@ } if (nid == VTOI(dvp)) { - VREF(dvp); + vref(dvp); *vpp = dvp; goto out; } - if ((err = fuse_vget_i(dvp->v_mount, td, - nid, - IFTOVT(fattr->mode), - &vp, - VG_NORMAL, - parentid))) { - goto out; + /* + * XXX We discard generation, also brought to us by + * LOOKUP. It's purpose is unclear... it seems to be + * simply just yet another 32/64 bit extension for the + * inode number, but I'm not sure (hmm, it seems to + * have something to do with NFS exportability, too). + * + * (Linux has such a 32 bit value in its inode struct, + * and it really might just be a backward compatible + * extension for the inode space [but might as well + * be more into it, dunno]. The FUSE protocol uses + * a 64 bit generation value; FUSE/Linux uses it for + * filling the inode's i_generation field.) + */ + err = fuse_vnode_get(dvp->v_mount, + nid, + dvp, + &vp, + cnp, + IFTOVT(fattr->mode), + size); + if (err) { + goto out; } *vpp = vp; goto out; + } + + /* + * If rewriting (RENAME), return the inode and the + * information required to rewrite the present directory + * Must get inode of directory entry to verify it's a + * regular file, or empty directory. + */ + if (nameiop == RENAME && wantparent && islastcn) { + +#if 0 // THINK_ABOUT_THIS + if ((err = fuse_internal_access(dvp, VWRITE, cred, td, &facp))) { + goto out; } +#endif /* - * If rewriting (RENAME), return the inode and the - * information required to rewrite the present directory - * Must get inode of directory entry to verify it's a - * regular file, or empty directory. + * Check for "." */ - if (nameiop == RENAME && wantparent && islastcn) { - DEBUG("something to rename...\n"); + if (nid == VTOI(dvp)) { + err = EISDIR; + goto out; + } - facp.xuid = fattr->uid; - facp.facc_flags |= FACCESS_STICKY; - err = fuse_internal_access(dvp, VWRITE, cred, td, &facp); - facp.facc_flags &= ~FACCESS_XQUERIES; + err = fuse_vnode_get(vnode_mount(dvp), + nid, + dvp, + &vp, + cnp, + IFTOVT(fattr->mode), + size); + if (err) { + goto out; + } - if (err) - goto out; + *vpp = vp; + /* + * Save the name for use in VOP_RENAME later. + */ + cnp->cn_flags |= SAVENAME; - /* - * Check for "." - */ - if (nid == VTOI(dvp)) { - err = EISDIR; - goto out; - } + goto out; + } - err = fuse_vget_i(dvp->v_mount, td, nid, - IFTOVT(fattr->mode), &vp, VG_NORMAL, - parentid); - if (err) - goto out; - *vpp = vp; - /* - * Save the name for use in VOP_RENAME later. - */ - cnp->cn_flags |= SAVENAME; - - goto out; + if (flags & ISDOTDOT) { + vref(pdp); + *vpp = pdp; + } else if (nid == VTOI(dvp)) { + vref(dvp); + *vpp = dvp; + } else { + err = fuse_vnode_get(vnode_mount(dvp), + nid, + dvp, + &vp, + cnp, + IFTOVT(fattr->mode), + size); + if (err) { + goto out; } - - DEBUG("we peacefully found that file\n"); - - if (nid == VTOI(dvp)) { - VREF(dvp); /* We want ourself, ie "." */ - *vpp = dvp; - } else { - if (flags & ISDOTDOT) - /* - * If doing dotdot, we unlock dvp for vget time - * to conform lock order regulations. - */ - VOP_UNLOCK(dvp, 0); - err = fuse_vget_i(dvp->v_mount, td, nid, - IFTOVT(fattr->mode), &vp, VG_NORMAL, - parentid); - if (flags & ISDOTDOT) - vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); - if (err) - goto out; - *vpp = vp; + if (vnode_vtype(vp) == VDIR) { + VTOFUD(vp)->parent = dvp; + //SETPARENT(vp, dvp); } + *vpp = vp; + } if (op == FUSE_GETATTR) cache_attrs(*vpp, (struct fuse_attr_out *)fdi.answ); else cache_attrs(*vpp, (struct fuse_entry_out *)fdi.answ); -#ifdef INVARIANTS - cache_attrs_hit = 1; -#endif - /* Insert name into cache if appropriate. */ /* @@ -915,27 +932,19 @@ */ #if 0 if (cnp->cn_flags & MAKEENTRY) { - DEBUG("...caching\n"); cache_enter(dvp, *vpp, cnp); } #endif } out: if (!lookup_err) { - DEBUG("as the looked up thing was simply found, the cleanup is left for us\n"); - + // as the looked up thing was simply found, the cleanup is left for us if (err) { - DEBUG("though inode found, err exit with no vnode\n"); + // though inode found, err exit with no vnode if (op == FUSE_LOOKUP) - fuse_internal_forget_send(dvp->v_mount, td, cred, nid, 1, &fdi); + fuse_internal_forget_send(vnode_mount(dvp), td, cred, nid, 1, &fdi); return (err); } else { - if (op == FUSE_LOOKUP) - VTOFUD(*vpp)->nlookup++; - - if (islastcn && flags & ISOPEN) - VTOFUD(*vpp)->flags |= FVP_ACCESS_NOOP; - #ifndef NO_EARLY_PERM_CHECK_HACK if (!islastcn) { /* We have the attributes of the next item @@ -966,18 +975,21 @@ * dir in question. But that can be known only * by having the vnode... */ + int tmpvtype = vnode_vtype(*vpp); + bzero(&facp, sizeof(facp)); - DEBUG("the early perm check hack\n"); + // the early perm check hack facp.facc_flags |= FACCESS_VA_VALID; - KASSERT(cache_attrs_hit, - (("invalid reference to cached attrs"))); - if ((*vpp)->v_type != VDIR && (*vpp)->v_type != VLNK) + if (tmpvtype != VDIR && tmpvtype != VLNK) err = ENOTDIR; - if (!err && !(*vpp)->v_mountedhere) + + if (!err && !vnode_mountedhere(*vpp)) { err = fuse_internal_access(*vpp, VEXEC, cred, td, &facp); + } + if (err) { - if ((*vpp)->v_type == VLNK) + if (tmpvtype == VLNK) DEBUG("weird, permission error with a symlink?\n"); vput(*vpp); *vpp = NULL; @@ -991,9 +1003,7 @@ return (err); } -#endif - /* struct vnop_mkdir_args { struct vnode *a_dvp; @@ -1199,17 +1209,68 @@ static int fuse_vnop_read(struct vop_read_args *ap) { + int err; struct vnode *vp = ap->a_vp; - struct ucred *cred = ap->a_cred; struct uio *uio = ap->a_uio; +#ifdef XXXIP int ioflag = ap->a_ioflag; + struct ucred *cred = ap->a_cred; +#endif + off_t orig_resid; + off_t orig_offset; - DEBUG2G("vnode #%llu\n", VTOILLU(vp)); - return fuse_io_vnode(vp, cred, uio, ioflag); + struct fuse_vnode_data *fvdat; + + fuse_trace_printf_vnop(); + + if (fuse_isdeadfs_nop(vp)) { + if (vnode_vtype(vp) != VCHR) { + return EIO; + } else { + return 0; + } + } + + if (uio_offset(uio) < 0) { + return EINVAL; + } + + /* + * if (uio_offset(uio) > SOME_MAXIMUM_SIZE) { + * return 0; + * } + */ + + orig_resid = uio_resid(uio); + if (orig_resid == 0) { + return 0; + } + + orig_offset = uio_offset(uio); + if (orig_offset < 0) { + return EINVAL; + } + + fvdat = VTOFUD(vp); + if (!fvdat) { + return EINVAL; + } + + /* Protect against size change here. */ + + if (vnode_isreg(vp)) { +#ifdef XXXIP + err = cluster_read(vp, uio, fvdat->filesize, 0); +#endif + } else if (vnode_isdir(vp)) { + err = EISDIR; + } else { + err = EPERM; + } + + return err; } -#define DIRCOOKEDSIZE FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + MAXNAMLEN + 1) - /* struct vnop_readdir_args { struct vnode *a_vp; @@ -1226,48 +1287,47 @@ struct vnode *vp = ap->a_vp; struct ucred *cred = ap->a_cred; struct uio *uio = ap->a_uio; - - struct thread *td = curthread; + int freefufh = 0; int err = 0; struct fuse_iov cookediov; struct fuse_filehandle *fufh; - struct fuse_io_data fioda; - struct get_filehandle_param gefhp; + struct fuse_vnode_data *fvdat; + + fuse_trace_printf_vnop(); + + if (fuse_isdeadfs_nop(vp)) { + return EBADF; + } + +#ifdef XXXIP + /* Sanity check the uio data. */ + if ((uio_iovcnt(uio) > 1) || + (uio_resid(uio) < (int)sizeof(struct dirent))) { + return (EINVAL); + } +#endif + + fvdat = VTOFUD(vp); - bzero(&gefhp, sizeof(gefhp)); - gefhp.opcode = FUSE_OPENDIR; - if ((err = fuse_get_filehandle(vp, td, cred, FREAD, &fufh, &gefhp))) { - DEBUG2G("fetching filehandle failed\n"); - return (err); + fufh = &(fvdat->fufh[FUFH_RDONLY]); + if (!(fufh->fufh_flags & FUFH_VALID)) { + err = fuse_filehandle_get(vp, NULL, cred, FUFH_RDONLY); + if (err) { + return err; + } + freefufh = 1; } - /* - * In "most cases" this will do and won't have to resize the buffer - * (that is, if the daemon has a "tight" view of the dir entries, - * which is the case if userspace uses the old API or the new one - * in the analogous way; by our terminology, this means - * freclen == bytesavail) - * (See fuse_internal_readdir_processdata). - */ +#define DIRCOOKEDSIZE FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + MAXNAMLEN + 1) fiov_init(&cookediov, DIRCOOKEDSIZE); - bzero(&fioda, sizeof(fioda)); - fioda.vp = vp; - fioda.fufh = fufh; - fioda.uio = uio; - fioda.cred = cred; - fioda.opcode = FUSE_READDIR; - fioda.buffeater = fuse_internal_readdir_processdata; - fioda.param = &cookediov; - /* - * We tried hard to use bio, but offsety readdir can't be handled - * properly that way -- the offset field of fuse_dirents can't be - * mapped to an offset of a bio buffer - */ - err = fuse_read_directbackend(&fioda); + err = fuse_internal_readdir(vp, uio, fufh, &cookediov); fiov_teardown(&cookediov); - fufh->useco--; + if (freefufh) { + fufh->open_count--; + (void)fuse_filehandle_put(vp, NULL, NULL, FUFH_RDONLY, 0); + } fuse_invalidate_attr(vp); return err; @@ -1286,19 +1346,27 @@ int err; struct vnode *vp = ap->a_vp; struct uio *uio = ap->a_uio; + struct ucred *cred = ap->a_cred; struct fuse_dispatcher fdi; fuse_trace_printf_vnop(); - if ((err = fdisp_simple_putget(&fdi, FUSE_READLINK, vp, curthread, - ap->a_cred))) - return (err); + if (fuse_isdeadfs_nop(vp)) { + return EBADF; + } + + if (vnode_vtype(vp) != VLNK) { + return EINVAL; + } + + if ((err = fdisp_simple_putget_vp(&fdi, FUSE_READLINK, vp, curthread, cred))) { + return err; + } if (((char *)fdi.answ)[0] == '/' && - fusefs_get_data(vp->v_mount)->dataflag & FSESS_PUSH_SYMLINKS_IN) { - char *mpth = vp->v_mount->mnt_stat.f_mntonname; - - err = uiomove(mpth, strlen(mpth), uio); + fusefs_get_data(vnode_mount(vp))->dataflag & FSESS_PUSH_SYMLINKS_IN) { + char *mpth = vnode_mount(vp)->mnt_stat.f_mntonname; + err = uiomove(mpth, strlen(mpth), uio); } if (!err) { @@ -1320,18 +1388,46 @@ static int fuse_vnop_reclaim(struct vop_reclaim_args *ap) { + int type; struct vnode *vp = ap->a_vp; struct thread *td = ap->a_td; + struct fuse_vnode_data *fvdat = VTOFUD(vp); + struct fuse_filehandle *fufh = NULL; + + fuse_trace_printf_vnop(); + + if (!fvdat) { + panic("FUSE: no vnode data during recycling"); + } + + for (type = 0; type < FUFH_MAXTYPE; type++) { + fufh = &(fvdat->fufh[type]); + if (fufh->fufh_flags & FUFH_VALID) { + if (fufh->fufh_flags & FUFH_STRATEGY) { + fufh->fufh_flags &= ~FUFH_MAPPED; + fufh->open_count = 0; + (void)fuse_filehandle_put(vp, td, NULL, type, 0); + } else { + panic("vnode being reclaimed but fufh (type=%d) is valid", + type); + } + } + } - DEBUG("pfft...\n"); -#if _DEBUG - DEBUG2G("=============>\n"); - kdb_backtrace(); - vn_printf(vp, " "); - DEBUG2G("<=============\n"); -#endif + if ((!fuse_isdeadfs(vp)) && (fvdat->nlookup)) { + struct fuse_dispatcher fdi; + fdi.tick = NULL; + fuse_internal_forget_send(vnode_mount(vp), td, NULL, VTOI(vp), + fvdat->nlookup, &fdi); + } + + cache_purge(vp); + /* XXXIP TODO */ + vfs_hash_remove(vp); vnode_destroy_vobject(vp); - return (fuse_recyc_backend(vp, td)); + fuse_vnode_destroy(vp); + + return 0; } /* @@ -1348,6 +1444,18 @@ struct vnode *vp = ap->a_vp; struct componentname *cnp = ap->a_cnp; + fuse_trace_printf_vnop(); + + if (fuse_isdeadfs_nop(vp)) { + panic("fuse_vnop_remove(): called on a dead file system"); + } + + if (vnode_isdir(vp)) { + return EPERM; + } + + cache_purge(vp); + return (fuse_internal_remove(dvp, vp, cnp, FUSE_UNLINK)); } @@ -1364,252 +1472,34 @@ static int fuse_vnop_rename(struct vop_rename_args *ap) { - struct vnode *tvp = ap->a_tvp; - struct vnode *tdvp = ap->a_tdvp; - struct vnode *fvp = ap->a_fvp; - struct vnode *fdvp = ap->a_fdvp; - struct componentname *tcnp = ap->a_tcnp; - struct componentname *fcnp = ap->a_fcnp; + int err = 0; + struct vnode *fdvp = ap->a_fdvp; + struct vnode *fvp = ap->a_fvp; + struct componentname *tcnp = ap->a_tcnp; + struct vnode *tdvp = ap->a_tdvp; + struct vnode *tvp = ap->a_tvp; + struct componentname *fcnp = ap->a_fcnp; - int doingdirectory = 0; - int err = 0; - struct thread *td; - struct fuse_access_param facp; - uint64_t fnid, tdnid; - struct fuse_data *data = NULL; - struct parentmanager_param pmp; - struct vnode *xvp; + fuse_trace_printf_vnop(); - td = curthread; - bzero(&facp, sizeof(facp)); + if (fuse_isdeadfs_nop(fdvp)) { + panic("fuse_vnop_rename(): called on a dead file system"); + } >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:41:25 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2A9CE1065680; Mon, 13 Jun 2011 15:41:25 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E0D3E106567B for ; Mon, 13 Jun 2011 15:41:24 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id CBA558FC14 for ; Mon, 13 Jun 2011 15:41:24 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFfOoB076351 for ; Mon, 13 Jun 2011 15:41:24 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFfOQ1076347 for perforce@freebsd.org; Mon, 13 Jun 2011 15:41:24 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:41:24 GMT Message-Id: <201106131541.p5DFfOQ1076347@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194689 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:41:25 -0000 http://p4web.freebsd.org/@@194689?ac=10 Change 194689 by ilya@ilya_triton2011 on 2011/06/13 15:40:31 Use fuse4bsd io Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.c#7 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#4 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#13 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.c#7 (text+ko) ==== @@ -35,17 +35,13 @@ #include #include -#if (__FreeBSD__ >= 8) -#define vfs_bio_set_validclean vfs_bio_set_valid -#endif - #include "fuse.h" #include "fuse_file.h" #include "fuse_node.h" #include "fuse_ipc.h" #include "fuse_io.h" -int fuse_read_directbackend(struct fuse_io_data *fioda); +static int fuse_read_directbackend(struct fuse_io_data *fioda); static int fuse_io_p2p(struct fuse_io_data *fioda, struct fuse_dispatcher *fdip); static int fuse_read_biobackend(struct fuse_io_data *fioda); static int fuse_write_directbackend(struct fuse_io_data *fioda); @@ -53,6 +49,52 @@ static fuse_buffeater_t fuse_std_buffeater; +static int +fuse_io_filehandle_get(struct vnode *vp, int rdonly, + struct ucred *cred, struct fuse_filehandle **fufhp) +{ + struct fuse_vnode_data *fvdat = VTOFUD(vp); + struct fuse_filehandle *fufh; + fufh_type_t fufh_type; + int err = 0; + + if (rdonly) { + fufh_type = FUFH_RDONLY; // FUFH_RDWR will also do + } else { + fufh_type = FUFH_WRONLY; // FUFH_RDWR will also do + } + + fufh = &(fvdat->fufh[fufh_type]); + if (!(fufh->fufh_flags & FUFH_VALID)) { + fufh_type = FUFH_RDWR; + fufh = &(fvdat->fufh[fufh_type]); + if (!(fufh->fufh_flags & FUFH_VALID)) { + fufh = NULL; + } else { + debug_printf("strategy falling back to FUFH_RDWR ... OK\n"); + } + } + + if (fufh == NULL) { + if (rdonly) { + fufh_type = FUFH_RDONLY; + } else { + fufh_type = FUFH_RDWR; + } + err = fuse_filehandle_get(vp, NULL, cred, fufh_type); + if (!err) { + fufh = &(fvdat->fufh[fufh_type]); + debug_printf("STRATEGY: created *new* fufh of type %d\n", + fufh_type); + } + } else { + debug_printf("STRATEGY: using existing fufh of type %d\n", fufh_type); + } + + *fufhp = fufh; + return (err); +} + /**************** * * >>> Low level I/O routines and interface to them @@ -61,29 +103,24 @@ /* main I/O dispatch routine */ int -fuse_io_dispatch(struct vnode *vp, struct fuse_filehandle *fufh, struct uio *uio, - struct ucred *cred, int flag, struct thread *td) +fuse_io_dispatch(struct vnode *vp, struct uio *uio, int flag, + struct ucred *cred) { - int err; + struct fuse_filehandle *fufh; struct fuse_io_data fioda; - int directio; + int err, directio; - RECTIFY_TDCR(td, cred); - ASSERT_VOP_LOCKED__FH(vp); - - if (fufh) - fufh->useco++; - else if ((err = fuse_get_filehandle(vp, NULL, cred, flag, &fufh, NULL))) { - DEBUG2G("no filehandle for vnode #%llu\n", VTOILLU(vp)); + err = fuse_io_filehandle_get(vp, (uio->uio_rw == UIO_READ), + cred, &fufh); + if (!err) return (err); - } bzero(&fioda, sizeof(fioda)); fioda.vp = vp; fioda.fufh = fufh; fioda.uio = uio; fioda.cred = cred; - fioda.td = td; + fioda.td = curthread; /* * Ideally, when the daemon asks for direct io at open time, the @@ -95,7 +132,7 @@ * we hardwire it into the file's private data (similarly to Linux, * btw.). */ - directio = (flag & O_DIRECT) || (fufh->flags & FOPEN_DIRECT_IO); + directio = (flag & O_DIRECT); switch (uio->uio_rw) { case UIO_READ: @@ -125,62 +162,15 @@ panic("uninterpreted mode passed to fuse_io_dispatch"); } - if (VTOFUD(vp)) - fufh->useco--; - else - DEBUG2G("poor nasty nasty vnode %p...\n", vp); fuse_invalidate_attr(vp); return (err); } -/* dispatch routine for file based I/O */ -int -fuse_io_file(struct file *fp, struct uio *uio, struct ucred *cred, int flags, - struct thread *td) -{ - struct fuse_filehandle *fufh; - struct vattr va; - struct vnode *vp, *ovl_vp = fp->f_vnode; - int err = 0; - - vn_lock(ovl_vp, LK_EXCLUSIVE | LK_RETRY); - - if (_file_is_bad(fp) || ! _file_is_fat(fp)) { - err = EBADF; - goto out; - } - fufh = FTOFH(fp); - vp = fufh->fh_vp; - ASSERT_VOP_LOCKED__FH(vp); - - if (uio->uio_resid == 0) - goto out; - - if (uio->uio_rw == UIO_WRITE && fp->f_flag & O_APPEND) { - if ((err = VOP_GETATTR(vp, &va, cred))) - goto out; - uio->uio_offset = va.va_size; - } else if ((flags & FOF_OFFSET) == 0) - uio->uio_offset = fp->f_offset; - - err = fuse_io_dispatch(vp, fufh->op == FUSE_OPEN ? fufh : NULL, uio, - cred, fp->f_flag, td); - - if ((flags & FOF_OFFSET) == 0) - fp->f_offset = uio->uio_offset; - fp->f_nextoff = uio->uio_offset; - -out: - VOP_UNLOCK(ovl_vp, 0); - DEBUG("leaving with %d\n", err); - return (err); -} - /* dispatch routine for vnode based I/O */ int -fuse_io_vnode(struct vnode *vp, struct ucred *cred, struct uio *uio, - int ioflag) +fuse_io_vnode(struct vnode *vp, struct uio *uio, + int ioflag, struct ucred *cred) { int fflag = (uio->uio_rw == UIO_READ) ? FREAD : FWRITE; int err; @@ -196,7 +186,7 @@ if (ioflag & IO_SYNC) fflag |= O_SYNC; - err = fuse_io_dispatch(vp, NULL, uio, cred, fflag, NULL); + err = fuse_io_dispatch(vp, uio, fflag, cred); DEBUG("return with %d\n", err); return (err); @@ -258,7 +248,7 @@ if ((bp->b_flags & B_CACHE) == 0) { bp->b_iocmd = BIO_READ; vfs_busy_pages(bp, 0); - err = fuse_strategy_i(vp, bp, fufh, op); + err = fuse_io_strategy(vp, bp, fufh, op); #if _DEBUG prettyprint(bp->b_data, 48); printf("\n"); @@ -305,7 +295,7 @@ return ((err == -1) ? 0 : err); } -int +static int fuse_read_directbackend(struct fuse_io_data *fioda) { struct vnode *vp = fioda->vp; @@ -652,7 +642,7 @@ if ((bp->b_flags & B_CACHE) == 0) { bp->b_iocmd = BIO_READ; vfs_busy_pages(bp, 0); - fuse_strategy_i(vp, bp, NULL, 0); + fuse_io_strategy(vp, bp, NULL, 0); if ((err = bp->b_error)) { brelse(bp); break; @@ -742,7 +732,7 @@ bp->b_dirtyoff = on; bp->b_dirtyend = on + n; } - vfs_bio_set_validclean(bp, on, n); + vfs_bio_set_valid(bp, on, n); } bwrite(bp); @@ -755,7 +745,7 @@ /* core strategy like routine */ int -fuse_strategy_i(struct vnode *vp, struct buf *bp, struct fuse_filehandle *fufh, +fuse_io_strategy(struct vnode *vp, struct buf *bp, struct fuse_filehandle *fufh, enum fuse_opcode op) { struct fuse_dispatcher fdi; @@ -793,22 +783,13 @@ cred = bp->b_iocmd == BIO_READ ? bp->b_rcred : bp->b_wcred; -#if _DEBUG - DEBUG2G("reading from block #%d at vnode:\n", (int)bp->b_blkno); - vn_printf(vp, " * "); -#endif - if (fufh) { - DEBUG2G("we have a useable filehandle passed on\n"); - fufh->useco++; - } else - err = fuse_get_filehandle(vp, NULL, cred, - bp->b_iocmd == BIO_READ ? FREAD : FWRITE, - &fufh, NULL); - + err = fuse_io_filehandle_get(vp, (bp->b_iocmd == BIO_READ), + cred, &fufh); if (err) { DEBUG2G("fetching filehandle failed\n"); goto out; } + fufh->fufh_flags |= FUFH_STRATEGY; DEBUG2G("vp #%llu, fufh #%llu\n", VTOILLU(vp), (unsigned long long)fufh->fh_id); @@ -952,9 +933,6 @@ DEBUG("no ticket on leave\n"); out: - if (fufh) - fufh->useco--; - if (err) { bp->b_ioflags |= BIO_ERROR; bp->b_error = err; ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#4 (text+ko) ==== @@ -1,3 +1,5 @@ +#ifndef _FUSE_IO_H_ +#define _FUSE_IO_H_ /* prototype for processing an input data buffer and an uio for reading related acivities */ @@ -15,15 +17,12 @@ void *param; }; -int fuse_io_dispatch(struct vnode *vp, struct fuse_filehandle *fufh, - struct uio *uio, struct ucred *cred, int flag, - struct thread *td); -int fuse_io_file(struct file *fp, struct uio *uio, struct ucred *cred, - int flags, struct thread *td); -int fuse_io_vnode(struct vnode *vp, struct ucred *cred, struct uio *uio, - int ioflag); -int fuse_strategy_i(struct vnode *vp, struct buf *bp, - struct fuse_filehandle *fufh, enum fuse_opcode op); +int fuse_io_dispatch(struct vnode *vp, struct uio *uio, int flag, + struct ucred *cred); +int fuse_io_vnode(struct vnode *vp, struct uio *uio, int ioflag, + struct ucred *cred); +int fuse_io_strategy(struct vnode *vp, struct buf *bp, + struct fuse_filehandle *fufh, enum fuse_opcode op); /* * XXX for blocking vnode usage, it seems that changing vnops to dead ones @@ -60,3 +59,5 @@ { return (fp->f_vnode && fp->f_data != fp->f_vnode); } + +#endif /* _FUSE_IO_H_ */ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#13 (text+ko) ==== @@ -374,30 +374,17 @@ struct fuse_dispatcher fdi; struct fuse_filehandle *fufh; struct fuse_vnode_data *fvdat = VTOFUD(vp); - int type; -#if 0 - int err = 0; - int waitfor = ap->a_waitfor; - struct timeval tv; - int wait = (waitfor == MNT_WAIT); -#endif + int err, type; + fuse_trace_printf_vnop(); if (fuse_isdeadfs_nop(vp)) { return 0; } - cluster_push(vp, 0); + if ((err = vop_stdfsync(ap))) + return (err); -#if 0 - buf_flushdirtyblks(vp, wait, 0, (char *)"fuse_fsync"); - microtime(&tv); -#endif - - // vnode and ubc are in lock-step. - // can call vnode_isinuse(). - // can call ubc_sync_range(). - if (!(fusefs_get_data(vnode_mount(vp))->dataflag & (vnode_vtype(vp) == VDIR ? FSESS_NOFSYNCDIR : FSESS_NOFSYNC))) { goto out; @@ -1186,6 +1173,7 @@ * Doing this here because when a vnode goes inactive, no-cache and * no-readahead are cleared by the kernel. */ +#ifdef XXXIP int dataflag = fusefs_get_data(vnode_mount(vp))->dataflag; if (dataflag & FSESS_NO_READAHEAD) { vnode_setnoreadahead(vp); @@ -1193,6 +1181,7 @@ if (dataflag & FSESS_NO_UBC) { vnode_setnocache(vp); } +#endif } return 0; @@ -1209,66 +1198,18 @@ static int fuse_vnop_read(struct vop_read_args *ap) { - int err; struct vnode *vp = ap->a_vp; + struct ucred *cred = ap->a_cred; struct uio *uio = ap->a_uio; -#ifdef XXXIP int ioflag = ap->a_ioflag; - struct ucred *cred = ap->a_cred; -#endif - off_t orig_resid; - off_t orig_offset; - - struct fuse_vnode_data *fvdat; fuse_trace_printf_vnop(); if (fuse_isdeadfs_nop(vp)) { - if (vnode_vtype(vp) != VCHR) { - return EIO; - } else { - return 0; - } + return EIO; } - if (uio_offset(uio) < 0) { - return EINVAL; - } - - /* - * if (uio_offset(uio) > SOME_MAXIMUM_SIZE) { - * return 0; - * } - */ - - orig_resid = uio_resid(uio); - if (orig_resid == 0) { - return 0; - } - - orig_offset = uio_offset(uio); - if (orig_offset < 0) { - return EINVAL; - } - - fvdat = VTOFUD(vp); - if (!fvdat) { - return EINVAL; - } - - /* Protect against size change here. */ - - if (vnode_isreg(vp)) { -#ifdef XXXIP - err = cluster_read(vp, uio, fvdat->filesize, 0); -#endif - } else if (vnode_isdir(vp)) { - err = EISDIR; - } else { - err = EPERM; - } - - return err; + return fuse_io_vnode(vp, uio, ioflag, cred); } /* @@ -1727,17 +1668,29 @@ static int fuse_vnop_strategy(struct vop_strategy_args *ap) { - (void)fuse_strategy_i(ap->a_vp, ap->a_bp, NULL, 0); + struct vnode *vp = ap->a_vp; + struct buf *bp = ap->a_bp; + + fuse_trace_printf_vnop(); + + if ((vp == NULL) || (fuse_isdeadfs(vp))) { + bp->b_ioflags |= BIO_ERROR; + bp->b_error = EIO; + bufdone(bp); + return EIO; + } + + (void)fuse_io_strategy(vp, bp, NULL, 0); - /* - * This is a dangerous function. If returns error, that might mean a - * panic. We prefer pretty much anything over being forced to panic by - * a malicious daemon (a demon?). So we just return 0 anyway. You - * should never mind this: this function has its own error propagation - * mechanism via the argument buffer, so not-that-melodramatic - * residents of the call chain still will be able to know what to do. - */ - return (0); + /* + * This is a dangerous function. If returns error, that might mean a + * panic. We prefer pretty much anything over being forced to panic by + * a malicious daemon (a demon?). So we just return 0 anyway. You + * should never mind this: this function has its own error propagation + * mechanism via the argument buffer, so not-that-melodramatic + * residents of the call chain still will be able to know what to do. + */ + return 0; } @@ -1798,166 +1751,14 @@ struct ucred *cred = ap->a_cred; struct uio *uio = ap->a_uio; int ioflag = ap->a_ioflag; - struct fuse_vnode_data *fvdat; - int error; - int lflag; - off_t offset; - off_t zero_off; - off_t filesize; - off_t original_offset; - off_t original_size; - ssize_t original_resid; - - /* - * XXX: Locking - * - * lock_shared(truncatelock) - * lock(nodelock) - * if (file is being extended) { - * unlock(nodelock) - * unlock(truncatelock) - * lock_exclusive(truncatelock) - * lock(nodelock) - * current_size = the file's current size - * } - * if (file is being extended) { // check again - * // do whatever needs to be done to allocate storage - * } - * // We are always block-aligned - * unlock(nodelock) - * call the cluster layer - * adjust ubc - * lock(nodelock) - * do cleanup - * unlock(nodelock) - * unlock(truncatelock) - */ - fuse_trace_printf_vnop(); if (fuse_isdeadfs_nop(vp)) { return EIO; } - fvdat = VTOFUD(vp); - - switch (vnode_vtype(vp)) { - case VREG: - break; - - case VDIR: - return EISDIR; - - default: - // Wanna panic here? - return EPERM; // or EINVAL? - } - - original_resid = uio_resid(uio); - original_size = fvdat->filesize; - original_offset = uio_offset(uio); - offset = original_offset; - - if (original_resid == 0) { - return 0; - } - - if (original_offset < 0) { - return EINVAL; - } - - // Be wary of a size change here. - - if (ioflag & IO_APPEND) { - debug_printf("WRITE: arranging for append\n"); - uio_setoffset(uio, fvdat->filesize); - offset = fvdat->filesize; - } - - if (offset < 0) - return EFBIG; - -#if 0 - if (original_resid == 0) { - return 0; - } - - if (offset + original_resid > /* some maximum file size */) { - return EFBIG; - } -#endif - - if (offset + original_resid > original_size) { - /* Need to extend the file. */ - debug_printf("WRITE: need to extend the file\n"); - filesize = offset + original_resid; - fvdat->newfilesize = filesize; - } else { - debug_printf("WRITE: original size OK\n"); - filesize = original_size; - fvdat->newfilesize = filesize; - } - - lflag = (ioflag & IO_SYNC); - - if (offset > original_size) { - zero_off = original_size; -#ifdef XXXIP - lflag |= IO_HEADZEROFILL; -#endif - debug_printf("WRITE: zero filling enabled\n"); - } else - zero_off = 0; - -#ifdef XXXIP - error = cluster_write(vp, uio, original_size, filesize, - zero_off, 0, lflag); -#endif - - if (uio_offset(uio) > fvdat->filesize) { - debug_printf("WRITE: updating to new size\n"); - fvdat->filesize = uio_offset(uio); - vnode_pager_setsize(vp, fvdat->filesize); - fuse_invalidate_attr(vp); - } - fvdat->newfilesize = fvdat->filesize; - -#if 0 - if (original_resid > uio_resid(uio)) { - dep->de_flag |= DE_UPDATE; - } -#endif - - /* - * If the write failed and they want us to, truncate the file back - * to the size it was before the write was attempted. - */ -errexit: - if (error) { - debug_printf("WRITE: we had a failed write (%d)\n", error); - if (ioflag & IO_UNIT) { -#if 0 - detrunc(dep, original_size, ioflag & IO_SYNC, context); -#endif - uio_setoffset(uio, original_offset); - uio_setresid(uio, original_resid); - } else { -#if 0 - detrunc(dep, dep->de_FileSize, ioflag & IO_SYNC, context); -#endif - if (uio_resid(uio) != original_resid) { - error = 0; - } - } - } else if (ioflag & IO_SYNC) { -#if 0 - error = deupdat(dep, 1, context); -#endif - ; - } - - return error; + return fuse_io_vnode(vp, uio, ioflag, cred); } /* @@ -1973,7 +1774,6 @@ #define FUSE_PAGEOPS_RESID bp->b_resid #endif -#ifdef XXXIP /* struct vnop_getpages_args { struct vnode *a_vp; @@ -2057,9 +1857,9 @@ uio.uio_rw = UIO_READ; uio.uio_td = td; - error = fuse_io_dispatch(vp, NULL, &uio, cred, FREAD | O_DIRECT, td); + error = fuse_io_dispatch(vp, &uio, FREAD | O_DIRECT, cred); #else - error = fuse_strategy_i(vp, bp, NULL, 0); + error = fuse_io_strategy(vp, bp); #endif pmap_qremove(kva, npages); @@ -2223,9 +2023,9 @@ uio.uio_rw = UIO_WRITE; uio.uio_td = td; - error = fuse_io_dispatch(vp, NULL, &uio, cred, FWRITE | O_DIRECT, td); + error = fuse_io_dispatch(vp, &uio, FWRITE | O_DIRECT, cred); #else - error = fuse_strategy_i(vp, bp, NULL, 0); + error = fuse_io_strategy(vp, bp); #endif pmap_qremove(kva, npages); @@ -2241,7 +2041,6 @@ return rtvals[0]; } #undef FUSE_PAGEOPS_RESID -#endif /* struct vnop_print_args { From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:41:25 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6B28E1065756; Mon, 13 Jun 2011 15:41:25 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0AFCC106567E for ; Mon, 13 Jun 2011 15:41:25 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id ED8888FC15 for ; Mon, 13 Jun 2011 15:41:24 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFfOKW076357 for ; Mon, 13 Jun 2011 15:41:24 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFfOMG076354 for perforce@freebsd.org; Mon, 13 Jun 2011 15:41:24 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:41:24 GMT Message-Id: <201106131541.p5DFfOMG076354@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194690 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:41:25 -0000 http://p4web.freebsd.org/@@194690?ac=10 Change 194690 by ilya@ilya_triton2011 on 2011/06/13 15:41:03 Remove unused functions Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#7 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#9 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#5 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_main.c#4 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#7 (text+ko) ==== @@ -511,10 +511,6 @@ /* strategy */ - - - - /* entity creation */ void ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.h#9 (text+ko) ==== @@ -80,14 +80,6 @@ uio->uio_resid = resid; } -/* XXX */ -void cluster_push(struct vnode *vp, int a); - -struct fuse_pidcred { - pid_t pid; - struct ucred cred; -}; - /* access */ #define FVP_ACCESS_NOOP 0x01 @@ -224,9 +216,6 @@ /* strategy */ - - - /* entity creation */ static __inline ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#5 (text+ko) ==== @@ -24,40 +24,4 @@ int fuse_io_strategy(struct vnode *vp, struct buf *bp, struct fuse_filehandle *fufh, enum fuse_opcode op); -/* - * XXX for blocking vnode usage, it seems that changing vnops to dead ones - * is not enough: file ops don't look at the vnode... - * so as an ad hoc solution we'll test against this macro to the top of file - * specific ops. - * Tell me if there is an "official" way to handle this. - */ - -static __inline int -_file_is_bad(struct file *fp) -{ - return (fp->f_ops == &badfileops || - fp->f_ops == &vnops || - fp->f_vnode->v_type == VBAD || - fp->f_vnode->v_op == &dead_vnodeops || - fp->f_vnode->v_data == NULL || - fp->f_data == NULL); -} - -/* - * In kern_open() of vfs_syscalls.c, if the f_data slot is not set - * up at open time, the vnode of the file will be put there. - * So "f_data == f_vnode" means someting like "the file is not - * initialized". I don't know how stable this convention is, so relying - * on it might be somewhat bogus; yet this saves us from on more locking - * for nothing (when allocating a dummy data field). - * As a compromise, the respective test is wrapped into a macro, to provide - * some abstraction... - */ - -static __inline int -_file_is_fat(struct file *fp) -{ - return (fp->f_vnode && fp->f_data != fp->f_vnode); -} - #endif /* _FUSE_IO_H_ */ ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_main.c#4 (text+ko) ==== @@ -37,17 +37,8 @@ extern struct vfsops fuse_vfsops; extern struct cdevsw fuse_cdevsw; extern struct vop_vector fuse_vnops; -extern struct fileops fuse_fileops; extern struct clonedevs *fuseclones; -#if FMASTER -extern struct cdevsw fmaster_cdevsw[5]; -static struct cdev *fmaster_dev[5]; -#endif extern int fuse_pbuf_freecnt; -#if FUSE_HAS_CREATE -extern struct vop_vector fuse_germ_vnops; -extern vop_access_t fuse_germ_access; -#endif static struct vfsconf fuse_vfsconf = { .vfc_version = VFS_VERSION, @@ -71,9 +62,6 @@ static void fuse_bringdown(eventhandler_tag eh_tag) { -#if FMASTER - int i; -#endif EVENTHANDLER_DEREGISTER(dev_clone, eh_tag); @@ -81,12 +69,6 @@ #if USE_FUSE_LOCK mtx_destroy(&fuse_mtx); #endif -#if FMASTER - for (i = 0; i < 5; i++) { - DEBUG("destroying fmaster%d\n", i); - destroy_dev(fmaster_dev[i]); - } -#endif } static int @@ -94,32 +76,12 @@ { static eventhandler_tag eh_tag = NULL; int err = 0; -#if FMASTER - int i; - char *fmaster_name = "fmasterx"; -#endif GIANT_REQUIRED; switch (what) { case MOD_LOAD: /* kldload */ - -#if __FreeBSD_version > 800009 - fuse_fileops.fo_truncate = vnops.fo_truncate; -#endif - fuse_fileops.fo_ioctl = vnops.fo_ioctl; - fuse_fileops.fo_poll = vnops.fo_poll; - fuse_fileops.fo_kqfilter = vnops.fo_kqfilter; - fuse_fileops.fo_stat = vnops.fo_stat; - fuse_pbuf_freecnt = nswbuf / 2 + 1; - -#if FUSE_HAS_CREATE - memcpy(&fuse_germ_vnops, &dead_vnodeops, sizeof(struct vop_vector)); - fuse_germ_vnops.vop_access = fuse_germ_access; - fuse_germ_vnops.vop_open = fuse_vnops.vop_open; -#endif - clone_setup(&fuseclones); #ifdef USE_FUSE_LOCK mtx_init(&fuse_mtx, "fuse_mtx", NULL, MTX_DEF); @@ -133,14 +95,6 @@ #endif return (ENOMEM); } -#if FMASTER - for (i=0; i<5; i++) { - fmaster_name[7] = i + '0'; - fmaster_dev[i] = make_dev(&fmaster_cdevsw[i], 0, - UID_ROOT, GID_WHEEL, - S_IWUSR, fmaster_name); - } -#endif /* Duh, it's static... */ /* vfs_register(&fuse_vfsconf); */ From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:42:31 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 73CFF106567D; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 358E91065670 for ; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 219F18FC0A for ; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFgVe8076394 for ; Mon, 13 Jun 2011 15:42:31 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFgUAN076391 for perforce@freebsd.org; Mon, 13 Jun 2011 15:42:30 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:42:30 GMT Message-Id: <201106131542.p5DFgUAN076391@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194691 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:42:31 -0000 http://p4web.freebsd.org/@@194691?ac=10 Change 194691 by ilya@ilya_triton2011 on 2011/06/13 15:41:32 Format fuse_io like other files Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.c#8 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.h#6 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_io.c#8 (text+ko) ==== @@ -53,46 +53,46 @@ fuse_io_filehandle_get(struct vnode *vp, int rdonly, struct ucred *cred, struct fuse_filehandle **fufhp) { - struct fuse_vnode_data *fvdat = VTOFUD(vp); - struct fuse_filehandle *fufh; - fufh_type_t fufh_type; - int err = 0; + struct fuse_vnode_data *fvdat = VTOFUD(vp); + struct fuse_filehandle *fufh; + fufh_type_t fufh_type; + int err = 0; - if (rdonly) { - fufh_type = FUFH_RDONLY; // FUFH_RDWR will also do - } else { - fufh_type = FUFH_WRONLY; // FUFH_RDWR will also do - } + if (rdonly) { + fufh_type = FUFH_RDONLY; // FUFH_RDWR will also do + } else { + fufh_type = FUFH_WRONLY; // FUFH_RDWR will also do + } - fufh = &(fvdat->fufh[fufh_type]); - if (!(fufh->fufh_flags & FUFH_VALID)) { - fufh_type = FUFH_RDWR; - fufh = &(fvdat->fufh[fufh_type]); - if (!(fufh->fufh_flags & FUFH_VALID)) { - fufh = NULL; - } else { - debug_printf("strategy falling back to FUFH_RDWR ... OK\n"); - } - } + fufh = &(fvdat->fufh[fufh_type]); + if (!(fufh->fufh_flags & FUFH_VALID)) { + fufh_type = FUFH_RDWR; + fufh = &(fvdat->fufh[fufh_type]); + if (!(fufh->fufh_flags & FUFH_VALID)) { + fufh = NULL; + } else { + debug_printf("strategy falling back to FUFH_RDWR ... OK\n"); + } + } - if (fufh == NULL) { - if (rdonly) { - fufh_type = FUFH_RDONLY; - } else { - fufh_type = FUFH_RDWR; - } - err = fuse_filehandle_get(vp, NULL, cred, fufh_type); - if (!err) { - fufh = &(fvdat->fufh[fufh_type]); - debug_printf("STRATEGY: created *new* fufh of type %d\n", - fufh_type); - } - } else { - debug_printf("STRATEGY: using existing fufh of type %d\n", fufh_type); - } + if (fufh == NULL) { + if (rdonly) { + fufh_type = FUFH_RDONLY; + } else { + fufh_type = FUFH_RDWR; + } + err = fuse_filehandle_get(vp, NULL, cred, fufh_type); + if (!err) { + fufh = &(fvdat->fufh[fufh_type]); + debug_printf("STRATEGY: created *new* fufh of type %d\n", + fufh_type); + } + } else { + debug_printf("STRATEGY: using existing fufh of type %d\n", fufh_type); + } - *fufhp = fufh; - return (err); + *fufhp = fufh; + return (err); } /**************** @@ -106,421 +106,421 @@ fuse_io_dispatch(struct vnode *vp, struct uio *uio, int flag, struct ucred *cred) { - struct fuse_filehandle *fufh; - struct fuse_io_data fioda; - int err, directio; + struct fuse_filehandle *fufh; + struct fuse_io_data fioda; + int err, directio; - err = fuse_io_filehandle_get(vp, (uio->uio_rw == UIO_READ), - cred, &fufh); - if (!err) - return (err); + err = fuse_io_filehandle_get(vp, (uio->uio_rw == UIO_READ), + cred, &fufh); + if (!err) + return (err); - bzero(&fioda, sizeof(fioda)); - fioda.vp = vp; - fioda.fufh = fufh; - fioda.uio = uio; - fioda.cred = cred; - fioda.td = curthread; + bzero(&fioda, sizeof(fioda)); + fioda.vp = vp; + fioda.fufh = fufh; + fioda.uio = uio; + fioda.cred = cred; + fioda.td = curthread; - /* - * Ideally, when the daemon asks for direct io at open time, the - * standard file flag should be set according to this, so that would - * just change the default mode, which later on could be changed via - * fcntl(2). - * But this doesn't work, the O_DIRECT flag gets cleared at some point - * (don't know where). So to make any use of the Fuse direct_io option, - * we hardwire it into the file's private data (similarly to Linux, - * btw.). - */ - directio = (flag & O_DIRECT); + /* + * Ideally, when the daemon asks for direct io at open time, the + * standard file flag should be set according to this, so that would + * just change the default mode, which later on could be changed via + * fcntl(2). + * But this doesn't work, the O_DIRECT flag gets cleared at some point + * (don't know where). So to make any use of the Fuse direct_io option, + * we hardwire it into the file's private data (similarly to Linux, + * btw.). + */ + directio = (flag & O_DIRECT); - switch (uio->uio_rw) { - case UIO_READ: - fioda.opcode = FUSE_READ; - fioda.buffeater = fuse_std_buffeater; + switch (uio->uio_rw) { + case UIO_READ: + fioda.opcode = FUSE_READ; + fioda.buffeater = fuse_std_buffeater; - if (directio) { - DEBUG2G("direct read of vnode %llu via file handle %llu\n", - VTOILLU(vp), (unsigned long long)fufh->fh_id); - err = fuse_read_directbackend(&fioda); - } else { - DEBUG2G("buffered read of vnode %llu\n", VTOILLU(vp)); - err = fuse_read_biobackend(&fioda); - } - break; - case UIO_WRITE: - if (directio) { - DEBUG2G("direct write of vnode %llu via file handle %llu\n", - VTOILLU(vp), (unsigned long long)fufh->fh_id); - err = fuse_write_directbackend(&fioda); - } else { - DEBUG2G("buffered write of vnode %llu\n", VTOILLU(vp)); - err = fuse_write_biobackend(&fioda); - } - break; - default: - panic("uninterpreted mode passed to fuse_io_dispatch"); - } + if (directio) { + DEBUG2G("direct read of vnode %llu via file handle %llu\n", + VTOILLU(vp), (unsigned long long)fufh->fh_id); + err = fuse_read_directbackend(&fioda); + } else { + DEBUG2G("buffered read of vnode %llu\n", VTOILLU(vp)); + err = fuse_read_biobackend(&fioda); + } + break; + case UIO_WRITE: + if (directio) { + DEBUG2G("direct write of vnode %llu via file handle %llu\n", + VTOILLU(vp), (unsigned long long)fufh->fh_id); + err = fuse_write_directbackend(&fioda); + } else { + DEBUG2G("buffered write of vnode %llu\n", VTOILLU(vp)); + err = fuse_write_biobackend(&fioda); + } + break; + default: + panic("uninterpreted mode passed to fuse_io_dispatch"); + } - fuse_invalidate_attr(vp); + fuse_invalidate_attr(vp); - return (err); + return (err); } /* dispatch routine for vnode based I/O */ int fuse_io_vnode(struct vnode *vp, struct uio *uio, - int ioflag, struct ucred *cred) + int ioflag, struct ucred *cred) { - int fflag = (uio->uio_rw == UIO_READ) ? FREAD : FWRITE; - int err; + int fflag = (uio->uio_rw == UIO_READ) ? FREAD : FWRITE; + int err; - if (ioflag & IO_DIRECT) - fflag |= O_DIRECT; - if (ioflag & IO_NDELAY) - fflag |= FNONBLOCK; - if (ioflag & IO_APPEND) - fflag |= O_APPEND; - if (ioflag & IO_ASYNC) - fflag |= O_ASYNC; - if (ioflag & IO_SYNC) - fflag |= O_SYNC; + if (ioflag & IO_DIRECT) + fflag |= O_DIRECT; + if (ioflag & IO_NDELAY) + fflag |= FNONBLOCK; + if (ioflag & IO_APPEND) + fflag |= O_APPEND; + if (ioflag & IO_ASYNC) + fflag |= O_ASYNC; + if (ioflag & IO_SYNC) + fflag |= O_SYNC; - err = fuse_io_dispatch(vp, uio, fflag, cred); + err = fuse_io_dispatch(vp, uio, fflag, cred); - DEBUG("return with %d\n", err); - return (err); + DEBUG("return with %d\n", err); + return (err); } int fuse_read_biobackend(struct fuse_io_data *fioda) { - struct vnode *vp = fioda->vp; - struct fuse_filehandle *fufh = fioda->fufh; - struct uio *uio = fioda->uio; - enum fuse_opcode op = fioda->opcode; - fuse_buffeater_t *buffe = fioda->buffeater; - void *param = fioda->param; + struct vnode *vp = fioda->vp; + struct fuse_filehandle *fufh = fioda->fufh; + struct uio *uio = fioda->uio; + enum fuse_opcode op = fioda->opcode; + fuse_buffeater_t *buffe = fioda->buffeater; + void *param = fioda->param; - int biosize; - struct buf *bp; - daddr_t lbn; - int bcount; - int bbcount; - int err = 0, n = 0, on = 0; + int biosize; + struct buf *bp; + daddr_t lbn; + int bcount; + int bbcount; + int err = 0, n = 0, on = 0; - if (uio->uio_resid == 0) - return (0); + if (uio->uio_resid == 0) + return (0); - biosize = vp->v_mount->mnt_stat.f_iosize; - bcount = MIN(MAXBSIZE, biosize); + biosize = vp->v_mount->mnt_stat.f_iosize; + bcount = MIN(MAXBSIZE, biosize); - DEBUG2G("entering loop\n"); - do { - lbn = uio->uio_offset / biosize; - on = uio->uio_offset & (biosize - 1); + DEBUG2G("entering loop\n"); + do { + lbn = uio->uio_offset / biosize; + on = uio->uio_offset & (biosize - 1); - DEBUG2G("biosize %d, lbn %d, on %d\n", biosize, (int)lbn, on); + DEBUG2G("biosize %d, lbn %d, on %d\n", biosize, (int)lbn, on); - /* - * Obtain the buffer cache block. Figure out the buffer size - * when we are at EOF. If we are modifying the size of the - * buffer based on an EOF condition we need to hold - * nfs_rslock() through obtaining the buffer to prevent - * a potential writer-appender from messing with n_size. - * Otherwise we may accidently truncate the buffer and - * lose dirty data. - * - * Note that bcount is *not* DEV_BSIZE aligned. - */ + /* + * Obtain the buffer cache block. Figure out the buffer size + * when we are at EOF. If we are modifying the size of the + * buffer based on an EOF condition we need to hold + * nfs_rslock() through obtaining the buffer to prevent + * a potential writer-appender from messing with n_size. + * Otherwise we may accidently truncate the buffer and + * lose dirty data. + * + * Note that bcount is *not* DEV_BSIZE aligned. + */ - bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); + bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); - if (!bp) - return (EINTR); + if (!bp) + return (EINTR); - /* - * If B_CACHE is not set, we must issue the read. If this - * fails, we return an error. - */ + /* + * If B_CACHE is not set, we must issue the read. If this + * fails, we return an error. + */ - if ((bp->b_flags & B_CACHE) == 0) { - bp->b_iocmd = BIO_READ; - vfs_busy_pages(bp, 0); - err = fuse_io_strategy(vp, bp, fufh, op); + if ((bp->b_flags & B_CACHE) == 0) { + bp->b_iocmd = BIO_READ; + vfs_busy_pages(bp, 0); + err = fuse_io_strategy(vp, bp, fufh, op); #if _DEBUG - prettyprint(bp->b_data, 48); - printf("\n"); - prettyprint(bp->b_data + PAGE_SIZE, 48); - printf("\n"); + prettyprint(bp->b_data, 48); + printf("\n"); + prettyprint(bp->b_data + PAGE_SIZE, 48); + printf("\n"); #endif - if (err) { - brelse(bp); - return (err); - } - } + if (err) { + brelse(bp); + return (err); + } + } - /* - * on is the offset into the current bp. Figure out how many - * bytes we can copy out of the bp. Note that bcount is - * NOT DEV_BSIZE aligned. - * - * Then figure out how many bytes we can copy into the uio. - */ + /* + * on is the offset into the current bp. Figure out how many + * bytes we can copy out of the bp. Note that bcount is + * NOT DEV_BSIZE aligned. + * + * Then figure out how many bytes we can copy into the uio. + */ - n = 0; - /* - * If we zero pad the buf, bp->b_resid will be 0, so then - * just ignore it - */ - bbcount = bcount - bp->b_resid; - if (on < bbcount) - n = bbcount - on; - if (n > 0) { - DEBUG2G("feeding buffeater with %d bytes of buffer %p, saying %d was asked for\n", - n, bp->b_data + on, n + (int)bp->b_resid); + n = 0; + /* + * If we zero pad the buf, bp->b_resid will be 0, so then + * just ignore it + */ + bbcount = bcount - bp->b_resid; + if (on < bbcount) + n = bbcount - on; + if (n > 0) { + DEBUG2G("feeding buffeater with %d bytes of buffer %p, saying %d was asked for\n", + n, bp->b_data + on, n + (int)bp->b_resid); #if 0 && _DEBUG - prettyprint(bp->b_data + on, n); - printf("\n"); + prettyprint(bp->b_data + on, n); + printf("\n"); #endif - err = buffe(uio, n + bp->b_resid, bp->b_data + on, n, - param); - } - brelse(bp); - DEBUG2G("end of turn, err %d, uio->uio_resid %d, n %d\n", - err, uio->uio_resid, n); - } while (err == 0 && uio->uio_resid > 0 && n > 0); + err = buffe(uio, n + bp->b_resid, bp->b_data + on, n, + param); + } + brelse(bp); + DEBUG2G("end of turn, err %d, uio->uio_resid %d, n %d\n", + err, uio->uio_resid, n); + } while (err == 0 && uio->uio_resid > 0 && n > 0); - return ((err == -1) ? 0 : err); + return ((err == -1) ? 0 : err); } static int fuse_read_directbackend(struct fuse_io_data *fioda) { - struct vnode *vp = fioda->vp; - struct fuse_filehandle *fufh = fioda->fufh; - struct uio *uio = fioda->uio; - struct ucred *cred = fioda->cred; - struct thread *td = fioda->td; - enum fuse_opcode op = fioda->opcode; - fuse_buffeater_t *buffe = fioda->buffeater; - void *param = fioda->param; + struct vnode *vp = fioda->vp; + struct fuse_filehandle *fufh = fioda->fufh; + struct uio *uio = fioda->uio; + struct ucred *cred = fioda->cred; + struct thread *td = fioda->td; + enum fuse_opcode op = fioda->opcode; + fuse_buffeater_t *buffe = fioda->buffeater; + void *param = fioda->param; + + struct fuse_dispatcher fdi; + struct fuse_read_in *fri; + int err = 0; + + if (uio->uio_resid == 0) + return (0); - struct fuse_dispatcher fdi; - struct fuse_read_in *fri; - int err = 0; + DEBUG("bug daemon for food\n"); - if (uio->uio_resid == 0) - return (0); + fdisp_init(&fdi, 0); - DEBUG("bug daemon for food\n"); + /* + * XXX In "normal" case we use an intermediate kernel buffer for + * transmitting data from daemon's context to ours. Eventually, we should + * get rid of this. Anyway, if the target uio lives in sysspace (we are + * called from pageops), and the input data doesn't need kernel-side + * processing (we are not called from readdir) we can already invoke + * an optimized, "peer-to-peer" I/O routine. + */ + if (buffe == fuse_std_buffeater && uio->uio_segflg == UIO_SYSSPACE) { + if ((err = fuse_io_p2p(fioda, &fdi))) + goto out; + else + goto done; + } - fdisp_init(&fdi, 0); + while (uio->uio_resid > 0) { + fdi.iosize = sizeof(*fri); + fdisp_make_vp(&fdi, op, vp, td, cred); + fri = fdi.indata; + fri->fh = fufh->fh_id; + fri->offset = uio->uio_offset; + fri->size = MIN(uio->uio_resid, + fusefs_get_data(vp->v_mount)->max_read); - /* - * XXX In "normal" case we use an intermediate kernel buffer for - * transmitting data from daemon's context to ours. Eventually, we should - * get rid of this. Anyway, if the target uio lives in sysspace (we are - * called from pageops), and the input data doesn't need kernel-side - * processing (we are not called from readdir) we can already invoke - * an optimized, "peer-to-peer" I/O routine. - */ - if (buffe == fuse_std_buffeater && uio->uio_segflg == UIO_SYSSPACE) { - if ((err = fuse_io_p2p(fioda, &fdi))) - goto out; - else - goto done; - } + DEBUG2G("fri->fh %llu, fri->offset %d, fri->size %d\n", + (unsigned long long)fri->fh, (int)fri->offset, fri->size); + if ((err = fdisp_wait_answ(&fdi))) + goto out; - while (uio->uio_resid > 0) { - fdi.iosize = sizeof(*fri); - fdisp_make_vp(&fdi, op, vp, td, cred); - fri = fdi.indata; - fri->fh = fufh->fh_id; - fri->offset = uio->uio_offset; - fri->size = MIN(uio->uio_resid, - fusefs_get_data(vp->v_mount)->max_read); - - DEBUG2G("fri->fh %llu, fri->offset %d, fri->size %d\n", - (unsigned long long)fri->fh, (int)fri->offset, fri->size); - if ((err = fdisp_wait_answ(&fdi))) - goto out; - - DEBUG2G("%d bytes asked for from offset %d, passing on the %d we got\n", - uio->uio_resid, (int)uio->uio_offset, (int)fdi.iosize); + DEBUG2G("%d bytes asked for from offset %d, passing on the %d we got\n", + uio->uio_resid, (int)uio->uio_offset, (int)fdi.iosize); - if ((err = buffe(uio, fri->size, fdi.answ, fdi.iosize, param))) - break; - } + if ((err = buffe(uio, fri->size, fdi.answ, fdi.iosize, param))) + break; + } done: - fuse_ticket_drop(fdi.tick); + fuse_ticket_drop(fdi.tick); out: - return ((err == -1) ? 0 : err); + return ((err == -1) ? 0 : err); } /* direct I/O routine with no intermediate buffer */ static int fuse_io_p2p(struct fuse_io_data *fioda, struct fuse_dispatcher *fdip) { - struct vnode *vp = fioda->vp; - struct fuse_filehandle *fufh = fioda->fufh; - struct uio *uio = fioda->uio; - struct ucred *cred = fioda->cred; - struct thread *td = fioda->td; - enum fuse_opcode op; + struct vnode *vp = fioda->vp; + struct fuse_filehandle *fufh = fioda->fufh; + struct uio *uio = fioda->uio; + struct ucred *cred = fioda->cred; + struct thread *td = fioda->td; + enum fuse_opcode op; - int err = 0; - int chunksize = 0; - struct iovec *iov; - int nmax = (uio->uio_rw == UIO_READ) ? - fusefs_get_data(vp->v_mount)->max_read : - fusefs_get_data(vp->v_mount)->max_write; + int err = 0; + int chunksize = 0; + struct iovec *iov; + int nmax = (uio->uio_rw == UIO_READ) ? + fusefs_get_data(vp->v_mount)->max_read : + fusefs_get_data(vp->v_mount)->max_write; - op = fioda->opcode ?: - ((uio->uio_rw == UIO_READ) ? FUSE_READ : FUSE_WRITE); + op = fioda->opcode ?: + ((uio->uio_rw == UIO_READ) ? FUSE_READ : FUSE_WRITE); - iov = uio->uio_iov; - while (uio->uio_resid > 0) { - int transfersize; + iov = uio->uio_iov; + while (uio->uio_resid > 0) { + int transfersize; - chunksize = MIN(iov->iov_len, nmax); + chunksize = MIN(iov->iov_len, nmax); - if (uio->uio_rw == UIO_READ) { - struct fuse_read_in *fri; + if (uio->uio_rw == UIO_READ) { + struct fuse_read_in *fri; - fdip->iosize = sizeof(struct fuse_read_in); - fdisp_make_vp(fdip, op, vp, td, cred); - fri = fdip->indata; - fri->fh = fufh->fh_id; - fri->offset = uio->uio_offset; - fri->size = chunksize; - fdip->tick->tk_aw_type = FT_A_BUF; - fdip->tick->tk_aw_bufdata = iov->iov_base; - } else { - struct fuse_write_in *fwi; + fdip->iosize = sizeof(struct fuse_read_in); + fdisp_make_vp(fdip, op, vp, td, cred); + fri = fdip->indata; + fri->fh = fufh->fh_id; + fri->offset = uio->uio_offset; + fri->size = chunksize; + fdip->tick->tk_aw_type = FT_A_BUF; + fdip->tick->tk_aw_bufdata = iov->iov_base; + } else { + struct fuse_write_in *fwi; - fdip->iosize = sizeof(struct fuse_write_in) + chunksize; - fdisp_make_vp(fdip, op, vp, td, cred); - fwi = fdip->indata; - fwi->fh = fufh->fh_id; - fwi->offset = uio->uio_offset; - fwi->size = chunksize; - fdip->tick->tk_ms_type = FT_M_BUF; - fdip->tick->tk_ms_bufdata = iov->iov_base; - fdip->tick->tk_ms_bufsize = chunksize; - } + fdip->iosize = sizeof(struct fuse_write_in) + chunksize; + fdisp_make_vp(fdip, op, vp, td, cred); + fwi = fdip->indata; + fwi->fh = fufh->fh_id; + fwi->offset = uio->uio_offset; + fwi->size = chunksize; + fdip->tick->tk_ms_type = FT_M_BUF; + fdip->tick->tk_ms_bufdata = iov->iov_base; + fdip->tick->tk_ms_bufsize = chunksize; + } - DEBUG2G("chunksize %d\n", chunksize); - fdip->finh->len = (sizeof *fdip->finh) + chunksize; - err = fdisp_wait_answ(fdip); + DEBUG2G("chunksize %d\n", chunksize); + fdip->finh->len = (sizeof *fdip->finh) + chunksize; + err = fdisp_wait_answ(fdip); - if (err) - return (err); + if (err) + return (err); - transfersize = (uio->uio_rw == UIO_READ) ? - fdip->tick->tk_aw_ohead.len - sizeof(struct fuse_out_header) : - ((struct fuse_write_out *)fdip->answ)->size; + transfersize = (uio->uio_rw == UIO_READ) ? + fdip->tick->tk_aw_ohead.len - sizeof(struct fuse_out_header) : + ((struct fuse_write_out *)fdip->answ)->size; - uio->uio_resid -= transfersize; - uio->uio_offset += transfersize; - iov->iov_len -= transfersize; - iov->iov_base = (char *)iov->iov_base + transfersize; + uio->uio_resid -= transfersize; + uio->uio_offset += transfersize; + iov->iov_len -= transfersize; + iov->iov_base = (char *)iov->iov_base + transfersize; - if (iov->iov_len == 0) { - iov++; - uio->uio_iovcnt--; - } - DEBUG2G("resid %d, offset %llu, iovcnt %d, iov_len %d, " - "transfersize %d\n", - uio->uio_resid, (long long unsigned)uio->uio_offset, - uio->uio_iovcnt, iov->iov_len, transfersize); + if (iov->iov_len == 0) { + iov++; + uio->uio_iovcnt--; + } + DEBUG2G("resid %d, offset %llu, iovcnt %d, iov_len %d, " + "transfersize %d\n", + uio->uio_resid, (long long unsigned)uio->uio_offset, + uio->uio_iovcnt, iov->iov_len, transfersize); - if (transfersize < chunksize) - break; - } + if (transfersize < chunksize) + break; + } - return (0); + return (0); } /* Simple standard way for transmitting input */ static int fuse_std_buffeater(struct uio *uio, size_t reqsize, void *buf, size_t bufsize, void *param) { - int err; + int err; - if ((err = uiomove(buf, MIN(reqsize, bufsize), uio))) - return (err); + if ((err = uiomove(buf, MIN(reqsize, bufsize), uio))) + return (err); - if (bufsize < reqsize) - return (-1); + if (bufsize < reqsize) + return (-1); - return (0); + return (0); } static int fuse_write_directbackend(struct fuse_io_data *fioda) { - struct vnode *vp = fioda->vp; - uint64_t fh_id = fioda->fufh->fh_id; - struct uio *uio = fioda->uio; - struct ucred *cred = fioda->cred; - struct thread *td = fioda->td; + struct vnode *vp = fioda->vp; + uint64_t fh_id = fioda->fufh->fh_id; + struct uio *uio = fioda->uio; + struct ucred *cred = fioda->cred; + struct thread *td = fioda->td; + + size_t chunksize; + int diff; + struct fuse_write_in *fwi; + struct fuse_dispatcher fdi; + int err = 0; + + if (! uio->uio_resid) + return (0); - size_t chunksize; - int diff; - struct fuse_write_in *fwi; - struct fuse_dispatcher fdi; - int err = 0; + fdisp_init(&fdi, 0); - if (! uio->uio_resid) - return (0); + if (uio->uio_segflg == UIO_SYSSPACE) { + if ((err = fuse_io_p2p(fioda, &fdi))) + return (err); + else + goto out; + } - fdisp_init(&fdi, 0); + while (uio->uio_resid > 0) { + chunksize = MIN(uio->uio_resid, + fusefs_get_data(vp->v_mount)->max_write); - if (uio->uio_segflg == UIO_SYSSPACE) { - if ((err = fuse_io_p2p(fioda, &fdi))) - return (err); - else - goto out; - } + fdi.iosize = sizeof(*fwi) + chunksize; + fdisp_make_vp(&fdi, FUSE_WRITE, vp, td, cred); - while (uio->uio_resid > 0) { - chunksize = MIN(uio->uio_resid, - fusefs_get_data(vp->v_mount)->max_write); + fwi = fdi.indata; + fwi->fh = fh_id; + fwi->offset = uio->uio_offset; + fwi->size = chunksize; - fdi.iosize = sizeof(*fwi) + chunksize; - fdisp_make_vp(&fdi, FUSE_WRITE, vp, td, cred); - - fwi = fdi.indata; - fwi->fh = fh_id; - fwi->offset = uio->uio_offset; - fwi->size = chunksize; + if ((err = uiomove((char *)fdi.indata + sizeof(*fwi), + chunksize, uio))) + break; - if ((err = uiomove((char *)fdi.indata + sizeof(*fwi), - chunksize, uio))) - break; - - if ((err = fdisp_wait_answ(&fdi))) - return(err); + if ((err = fdisp_wait_answ(&fdi))) + return(err); - diff = chunksize - ((struct fuse_write_out *)fdi.answ)->size; - if (diff < 0) { - err = EINVAL; - break; - } + diff = chunksize - ((struct fuse_write_out *)fdi.answ)->size; + if (diff < 0) { + err = EINVAL; + break; + } - uio->uio_resid += diff; - uio->uio_offset -= diff; - } + uio->uio_resid += diff; + uio->uio_offset -= diff; + } out: - fuse_ticket_drop(fdi.tick); + fuse_ticket_drop(fdi.tick); - return (err); + return (err); } /* @@ -529,416 +529,416 @@ static int fuse_write_biobackend(struct fuse_io_data *fioda) { - struct vnode *vp = fioda->vp; - struct uio *uio = fioda->uio; - struct ucred *cred = fioda->cred; + struct vnode *vp = fioda->vp; + struct uio *uio = fioda->uio; + struct ucred *cred = fioda->cred; + + int biosize; - int biosize; + struct buf *bp; + daddr_t lbn; + int bcount; + int n, on, err = 0; + vm_ooffset_t fsize = vp->v_object->un_pager.vnp.vnp_size; - struct buf *bp; - daddr_t lbn; - int bcount; - int n, on, err = 0; - vm_ooffset_t fsize = vp->v_object->un_pager.vnp.vnp_size; + DEBUG2G("fsize %lld\n", (long long int)fsize); - DEBUG2G("fsize %lld\n", (long long int)fsize); + biosize = vp->v_mount->mnt_stat.f_iosize; - biosize = vp->v_mount->mnt_stat.f_iosize; + /* + * Find all of this file's B_NEEDCOMMIT buffers. If our writes + * would exceed the local maximum per-file write commit size when + * combined with those, we must decide whether to flush, + * go synchronous, or return err. We don't bother checking + * IO_UNIT -- we just make all writes atomic anyway, as there's + * no point optimizing for something that really won't ever happen. + */ + do { + lbn = uio->uio_offset / biosize; + on = uio->uio_offset & (biosize-1); + n = MIN((unsigned)(biosize - on), uio->uio_resid); - /* - * Find all of this file's B_NEEDCOMMIT buffers. If our writes - * would exceed the local maximum per-file write commit size when - * combined with those, we must decide whether to flush, - * go synchronous, or return err. We don't bother checking - * IO_UNIT -- we just make all writes atomic anyway, as there's - * no point optimizing for something that really won't ever happen. - */ - do { - lbn = uio->uio_offset / biosize; - on = uio->uio_offset & (biosize-1); - n = MIN((unsigned)(biosize - on), uio->uio_resid); - - DEBUG2G("lbn %d, on %d, n %d, uio offset %d, uio resid %d\n", - (int)lbn, on, n, (int)uio->uio_offset, uio->uio_resid); + DEBUG2G("lbn %d, on %d, n %d, uio offset %d, uio resid %d\n", + (int)lbn, on, n, (int)uio->uio_offset, uio->uio_resid); again: - /* - * Handle direct append and file extension cases, calculate - * unaligned buffer size. - */ + /* + * Handle direct append and file extension cases, calculate + * unaligned buffer size. + */ - if (uio->uio_offset == fsize && n) { - /* - * Get the buffer (in its pre-append state to maintain - * B_CACHE if it was previously set). Resize the - * nfsnode after we have locked the buffer to prevent - * readers from reading garbage. - */ - bcount = on; - DEBUG("getting block from OS, bcount %d\n", bcount); - bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); + if (uio->uio_offset == fsize && n) { + /* + * Get the buffer (in its pre-append state to maintain + * B_CACHE if it was previously set). Resize the + * nfsnode after we have locked the buffer to prevent + * readers from reading garbage. + */ + bcount = on; + DEBUG("getting block from OS, bcount %d\n", bcount); + bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); - if (bp != NULL) { - long save; + if (bp != NULL) { + long save; - fsize = uio->uio_offset + n; - vnode_pager_setsize(vp, fsize); + fsize = uio->uio_offset + n; + vnode_pager_setsize(vp, fsize); - save = bp->b_flags & B_CACHE; - bcount += n; - allocbuf(bp, bcount); - bp->b_flags |= save; - } - } else { - /* - * Obtain the locked cache block first, and then - * adjust the file's size as appropriate. - */ - bcount = on + n; - if ((off_t)lbn * biosize + bcount < fsize) { - if ((off_t)(lbn + 1) * biosize < fsize) - bcount = biosize; - else - bcount = fsize - (off_t)lbn * biosize; - } - DEBUG("getting block from OS, bcount %d\n", bcount); - bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); - if (uio->uio_offset + n > fsize) { - fsize = uio->uio_offset + n; - vnode_pager_setsize(vp, fsize); - } - } + save = bp->b_flags & B_CACHE; + bcount += n; + allocbuf(bp, bcount); + bp->b_flags |= save; + } + } else { + /* + * Obtain the locked cache block first, and then + * adjust the file's size as appropriate. + */ + bcount = on + n; + if ((off_t)lbn * biosize + bcount < fsize) { + if ((off_t)(lbn + 1) * biosize < fsize) + bcount = biosize; + else + bcount = fsize - (off_t)lbn * biosize; + } + DEBUG("getting block from OS, bcount %d\n", bcount); + bp = getblk(vp, lbn, bcount, PCATCH, 0, 0); + if (uio->uio_offset + n > fsize) { + fsize = uio->uio_offset + n; + vnode_pager_setsize(vp, fsize); + } + } - if (!bp) { - err = EINTR; - break; - } + if (!bp) { + err = EINTR; + break; + } - /* - * Issue a READ if B_CACHE is not set. In special-append - * mode, B_CACHE is based on the buffer prior to the write - * op and is typically set, avoiding the read. If a read - * is required in special append mode, the server will - * probably send us a short-read since we extended the file - * on our end, resulting in b_resid == 0 and, thusly, - * B_CACHE getting set. >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Mon Jun 13 15:42:31 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BE50E1065751; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5475C106567B for ; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) (envelope-from ilya@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 433F18FC13 for ; Mon, 13 Jun 2011 15:42:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DFgV5V076400 for ; Mon, 13 Jun 2011 15:42:31 GMT (envelope-from ilya@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DFgVrZ076397 for perforce@freebsd.org; Mon, 13 Jun 2011 15:42:31 GMT (envelope-from ilya@FreeBSD.org) Date: Mon, 13 Jun 2011 15:42:31 GMT Message-Id: <201106131542.p5DFgVrZ076397@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to ilya@FreeBSD.org using -f From: Ilya Putsikau To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194692 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 15:42:32 -0000 http://p4web.freebsd.org/@@194692?ac=10 Change 194692 by ilya@ilya_triton2011 on 2011/06/13 15:42:00 Makefile Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/Makefile#10 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/Makefile#10 (text+ko) ==== @@ -2,29 +2,26 @@ .include "../Makefile.common" -SRCS = fuse_main.c \ - fuse_ipc.c \ - fuse_device.c \ - fuse_vfsops.c \ - fuse_vnops.c \ - fuse_io.c \ - fuse_subr.c \ - fuse.h \ - fuse_ipc.h \ - fuse_file.h \ - fuse_internal.h \ - fuse_internal.c \ - fuse_io.h \ - fuse_node.h \ - vnode_if.h +SRCS= fuse.h \ + fuse_kernel.h \ + fuse_device.c \ + fuse_file.c \ + fuse_file.h \ + fuse_internal.c \ + fuse_internal.h \ + fuse_io.c \ + fuse_io.h \ + fuse_ipc.c \ + fuse_ipc.h \ + fuse_main.c \ + fuse_node.c \ + fuse_node.h \ + fuse_vfsops.c \ + fuse_vnops.c \ + vnode_if.h CFLAGS+= -I../include -.if defined(FMASTER) -SRCS+= fmaster.c -CFLAGS+= -DFMASTER -.endif - .if defined(KERNCONF) KERNCONF1!= echo ${KERNCONF} | sed -e 's/ .*//g' KRNLOBJDIR!= make -C /usr/src -f /usr/src/Makefile.inc1 -V KRNLOBJDIR @@ -39,20 +36,6 @@ DEBUG_FLAGS+= -D_DEBUG_MSG .endif -.if defined(FMASTER) || defined(DEBUG) || defined(DEBUG2G) || \ - defined(DEBUG3G) || defined(DEBUG_MSG) -SRCS+= fuse_opnames.c -.endif - KMOD=fuse -CLEANFILES+= fuse_opnames.c fuse_opnames.o fuse_subr.o fmaster.o vnode_if.h \ - vnode_if_typedef.h vnode_if_newproto.h fuse.ko.debug \ - fuse.ko.symbols - -fuse.ko: fuse_kernel.h - -fuse_opnames.c: - env OUTF=fuse_opnames.c ${AWK} -f ../tools/genopnames.awk fuse_kernel.h - .include From owner-p4-projects@FreeBSD.ORG Mon Jun 13 22:55:12 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 945131065680; Mon, 13 Jun 2011 22:55:12 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5625D1065678 for ; Mon, 13 Jun 2011 22:55:12 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 0E3578FC12 for ; Mon, 13 Jun 2011 22:55:04 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DMt3Wa061765 for ; Mon, 13 Jun 2011 22:55:03 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DMt3Lw061762 for perforce@freebsd.org; Mon, 13 Jun 2011 22:55:03 GMT (envelope-from syuu@FreeBSD.org) Date: Mon, 13 Jun 2011 22:55:03 GMT Message-Id: <201106132255.p5DMt3Lw061762@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to syuu@FreeBSD.org using -f From: Takuya ASADA To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194710 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 22:55:13 -0000 http://p4web.freebsd.org/@@194710?ac=10 Change 194710 by syuu@x200 on 2011/06/13 22:54:53 Reverted changes for if_tap. RSS ported from rwatson/tcp branch, SOFTRSS implemented(Refactored version of RPS, part of Kazuya GODA's GSoC project). Implemented bpf multiqueue emulation on SOFTRSS. Affected files ... .. //depot/projects/soc2011/mq_bpf/src/sys/amd64/conf/RSS#1 add .. //depot/projects/soc2011/mq_bpf/src/sys/amd64/conf/SOFTRSS#1 add .. //depot/projects/soc2011/mq_bpf/src/sys/conf/files#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/conf/options#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_em.c#3 edit .. //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#5 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#7 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.h#4 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/bpfdesc.h#3 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/if.h#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/if_ethersubr.c#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/if_tap.c#4 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#5 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/netisr.c#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/netisr.h#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/net/netisr_internal.h#2 edit .. //depot/projects/soc2011/mq_bpf/src/sys/netinet/in_rss.c#1 add .. //depot/projects/soc2011/mq_bpf/src/sys/netinet/in_rss.h#1 add .. //depot/projects/soc2011/mq_bpf/src/sys/netinet/toeplitz.c#1 add .. //depot/projects/soc2011/mq_bpf/src/sys/netinet/toeplitz.h#1 add .. //depot/projects/soc2011/mq_bpf/tests/packet_trace.d#1 add .. //depot/projects/soc2011/mq_bpf/tests/queue_affinity.c#2 edit Differences ... ==== //depot/projects/soc2011/mq_bpf/src/sys/conf/files#2 (text+ko) ==== @@ -2713,6 +2713,7 @@ netinet/in_proto.c optional inet | inet6 \ compile-with "${NORMAL_C} -I$S/contrib/pf" netinet/in_rmx.c optional inet +netinet/in_rss.c optional inet rss | inet6 rss | inet softrss | inet6 softrss netinet/ip_divert.c optional inet ipdivert ipfirewall netinet/ipfw/dn_heap.c optional inet dummynet netinet/ipfw/dn_sched_fifo.c optional inet dummynet @@ -2772,6 +2773,7 @@ netinet/tcp_timewait.c optional inet | inet6 netinet/tcp_usrreq.c optional inet | inet6 netinet/udp_usrreq.c optional inet | inet6 +netinet/toeplitz.c optional inet rss | inet6 rss | inet softrss | inet6 softrss netinet/libalias/alias.c optional libalias inet | netgraph_nat inet netinet/libalias/alias_db.c optional libalias inet | netgraph_nat inet netinet/libalias/alias_mod.c optional libalias | netgraph_nat ==== //depot/projects/soc2011/mq_bpf/src/sys/conf/options#2 (text+ko) ==== @@ -421,6 +421,8 @@ NFSLOCKD RADIX_MPATH opt_mpath.h ROUTETABLES opt_route.h +RSS opt_rss.h +SOFTRSS opt_rss.h SLIP_IFF_OPTS opt_slip.h TCPDEBUG TCP_OFFLOAD_DISABLE opt_inet.h #Disable code to dispatch tcp offloading @@ -895,4 +897,3 @@ # that "lies" about the amount of RAM it has. Until a cleaner method is # defined, this option will suffice in overriding what Redboot says. AR71XX_REALMEM opt_global.h - ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_em.c#3 (text+ko) ==== ==== //depot/projects/soc2011/mq_bpf/src/sys/dev/e1000/if_igb.c#5 (text+ko) ==== @@ -2779,6 +2779,7 @@ ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM; ifp->if_capabilities |= IFCAP_TSO4; ifp->if_capabilities |= IFCAP_JUMBO_MTU; + ifp->if_capabilities |= IFCAP_MULTIQUEUE; ifp->if_capenable = ifp->if_capabilities; /* Don't enable LRO by default */ ==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.c#7 (text+ko) ==== @@ -40,6 +40,8 @@ #include "opt_bpf.h" #include "opt_compat.h" #include "opt_netgraph.h" +#include "opt_kdtrace.h" +#include "opt_rss.h" #include #include @@ -65,7 +67,6 @@ #include #include -#include #include #include @@ -76,11 +77,14 @@ #include #include #include - +#ifdef SOFTRSS +#include +#endif #include #include #include #include +#include #include @@ -199,6 +203,29 @@ .f_event = filt_bpfread, }; +SDT_PROVIDER_DECLARE(bpf); +SDT_PROVIDER_DEFINE(bpf); +SDT_PROBE_DEFINE2(bpf, functions, bpf_tap, entry, entry, "void*", "boolean_t"); +SDT_PROBE_DEFINE3(bpf, functions, bpf_mtap_rx, entry, entry, "void *", "uint32_t", "uint32_t"); +SDT_PROBE_DEFINE3(bpf, functions, bpf_mtap_tx, entry, entry, "void *", "uint32_t", "uint32_t"); +SDT_PROBE_DEFINE3(bpf, functions, bpf_mtap2_rx, entry, entry, "void *", "uint32_t", "uint32_t"); +SDT_PROBE_DEFINE3(bpf, functions, bpf_mtap2_tx, entry, entry, "void *", "uint32_t", "uint32_t"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocrxqlen, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_bioctxqlen, entry, entry, "int"); +SDT_PROBE_DEFINE2(bpf, functions, bpfioctl_biocrxqaffinity, entry, entry, "int", "int"); +SDT_PROBE_DEFINE2(bpf, functions, bpfioctl_bioctxqaffinity, entry, entry, "int", "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocenaqmask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocdisqmask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocstrxqmask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_bioccrrxqmask, entry, entry, "int"); +SDT_PROBE_DEFINE2(bpf, functions, bpfioctl_biocgtrxqmask, entry, entry, "int", "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocsttxqmask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_bioccrtxqmask, entry, entry, "int"); +SDT_PROBE_DEFINE2(bpf, functions, bpfioctl_biocgttxqmask, entry, entry, "int", "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocstothermask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_bioccrothermask, entry, entry, "int"); +SDT_PROBE_DEFINE1(bpf, functions, bpfioctl_biocgtothermask, entry, entry, "int"); + /* * Wrapper functions for various buffering methods. If the set of buffer * modes expands, we will probably want to introduce a switch data structure @@ -1519,318 +1546,388 @@ case BIOCRXQLEN: { - log(LOG_DEBUG, "BIOCRXQLEN\n"); - struct ifnet *const ifp = d->bd_bif->bif_ifp; + struct ifnet *ifp; + + if (d->bd_bif == NULL) { + /* + * No interface attached yet. + */ + error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocrxqlen, entry, -1); + break; + } + ifp = d->bd_bif->bif_ifp; *(int *)addr = ifp->if_rxq_num; + SDT_PROBE1(bpf, functions, bpfioctl_biocrxqlen, entry, ifp->if_rxq_num); break; } case BIOCTXQLEN: { - log(LOG_DEBUG, "BIOCTXQLEN\n"); - struct ifnet *const ifp = d->bd_bif->bif_ifp; + struct ifnet *ifp; + + if (d->bd_bif == NULL) { + /* + * No interface attached yet. + */ + error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioctxqlen, entry, -1); + break; + } + ifp = d->bd_bif->bif_ifp; *(int *)addr = ifp->if_txq_num; + SDT_PROBE1(bpf, functions, bpfioctl_bioctxqlen, entry, ifp->if_txq_num); break; } case BIOCRXQAFFINITY: { u_long index; - log(LOG_DEBUG, "BIOCRXQAFFINITY\n"); + struct ifnet *ifp; + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocrxqaffinity, entry, -1, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + ifp = d->bd_bif->bif_ifp; index = *(u_long *)addr; if (index > ifp->if_rxq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCRXQAFFINITY: index too large index:%lx rxq_num:%d\n", index, ifp->if_rxq_num); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocrxqaffinity, entry, -1, -1); break; } if (!ifp->if_rxq_affinity) { - log(LOG_DEBUG, "!ifp->if_rxq_affinity\n"); + log(LOG_ERR, "!ifp->if_rxq_affinity\n"); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocrxqaffinity, entry, -1, -1); break; } *(u_long *)addr = ifp->if_rxq_affinity[index]; - log(LOG_DEBUG, "index:%lu result:%lu\n", index, *(u_long *)addr); + SDT_PROBE2(bpf, functions, bpfioctl_biocrxqaffinity, entry, index, ifp->if_rxq_affinity[index]); break; } case BIOCTXQAFFINITY: { u_long index; - log(LOG_DEBUG, "BIOCTXQAFFINITY\n"); if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_bioctxqaffinity, entry, -1, -1); break; } struct ifnet *const ifp = d->bd_bif->bif_ifp; index = *(u_long *)addr; if (index > ifp->if_txq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCTXQAFFINITY: index too large index:%lx txq_num:%x\n", index, ifp->if_txq_num); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_bioctxqaffinity, entry, -1, -1); break; } if (!ifp->if_txq_affinity) { - log(LOG_DEBUG, "!ifp->if_txq_affinity\n"); + log(LOG_ERR, "!ifp->if_txq_affinity\n"); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_bioctxqaffinity, entry, -1, -1); break; } *(u_long *)addr = ifp->if_txq_affinity[index]; - log(LOG_DEBUG, "index:%lu result:%lu\n", index, *(u_long *)addr); + SDT_PROBE2(bpf, functions, bpfioctl_bioctxqaffinity, entry, index, ifp->if_txq_affinity[index]); break; } case BIOCENAQMASK: { - log(LOG_DEBUG, "BIOCENAQMASK\n"); + struct ifnet *ifp; + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocenaqmask, entry, -1); break; } if (d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "d->bd_qmask.qm_enabled\n"); + error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocenaqmask, entry, -1); + break; + } + ifp = d->bd_bif->bif_ifp; +#ifdef SOFTRSS + if (!(ifp->if_capenable & IFCAP_MULTIQUEUE)) { + ifp->if_rxq_num = netisr_get_cpucount(); + ifp->if_capabilities |= IFCAP_MULTIQUEUE; + ifp->if_capenable |= IFCAP_MULTIQUEUE; + } +#else + if (!(ifp->if_capenable & IFCAP_MULTIQUEUE)) { + log(LOG_ERR, "if doesn't support multiqueue"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocenaqmask, entry, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; +#endif + log(LOG_DEBUG, "if_rxq_num:%d\n", ifp->if_rxq_num); + log(LOG_DEBUG, "if_txq_num:%d\n", ifp->if_txq_num); d->bd_qmask.qm_enabled = TRUE; - log(LOG_DEBUG, "ifp->if_rxq_num:%d\n", ifp->if_rxq_num); d->bd_qmask.qm_rxq_mask = malloc(ifp->if_rxq_num * sizeof(boolean_t), M_BPF, M_WAITOK | M_ZERO); - log(LOG_DEBUG, "ifp->if_txq_num:%d\n", ifp->if_txq_num); d->bd_qmask.qm_txq_mask = malloc(ifp->if_txq_num * sizeof(boolean_t), M_BPF, M_WAITOK | M_ZERO); d->bd_qmask.qm_other_mask = FALSE; + SDT_PROBE1(bpf, functions, bpfioctl_biocenaqmask, entry, ifp->if_rxq_num); break; } case BIOCDISQMASK: { - log(LOG_DEBUG, "BIOCDISQMASK\n"); if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocdisqmask, entry, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocdisqmask, entry, -1); break; } d->bd_qmask.qm_enabled = FALSE; free(d->bd_qmask.qm_rxq_mask, M_BPF); free(d->bd_qmask.qm_txq_mask, M_BPF); + SDT_PROBE1(bpf, functions, bpfioctl_biocdisqmask, entry, 0); break; } case BIOCSTRXQMASK: { + struct ifnet *ifp; int index; - log(LOG_DEBUG, "BIOCSTRXQMASK\n"); + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ - error = EINVAL; + error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocstrxqmask, entry, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocstrxqmask, entry, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_rxq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCSTRXQMASK: index too large index:%x rxq_num:%x\n", index, ifp->if_rxq_num); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocstrxqmask, entry, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); d->bd_qmask.qm_rxq_mask[index] = TRUE; + SDT_PROBE1(bpf, functions, bpfioctl_biocstrxqmask, entry, index); break; } case BIOCCRRXQMASK: { int index; - log(LOG_DEBUG, "BIOCCRRXQMASK\n"); + struct ifnet *ifp; + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrrxqmask, entry, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrrxqmask, entry, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_rxq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCCRRXQMASK: index too large index:%x rxq_num:%x\n", index, ifp->if_rxq_num); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrrxqmask, entry, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); d->bd_qmask.qm_rxq_mask[index] = FALSE; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrrxqmask, entry, index); break; } case BIOCGTRXQMASK: { int index; - log(LOG_DEBUG, "BIOCGTRXQMASK\n"); + struct ifnet *ifp; + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocgtrxqmask, entry, -1, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocgtrxqmask, entry, -1, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_rxq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCGTRXQMASK: index too large index:%x rxq_num:%x\n", index, ifp->if_rxq_num); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocgtrxqmask, entry, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); *(uint32_t *)addr = d->bd_qmask.qm_rxq_mask[index]; + SDT_PROBE2(bpf, functions, bpfioctl_biocgtrxqmask, entry, index, d->bd_qmask.qm_rxq_mask[index]); break; } case BIOCSTTXQMASK: { + struct ifnet *ifp; int index; - log(LOG_DEBUG, "BIOCSTTXQMASK\n"); + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocsttxqmask, entry, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocsttxqmask, entry, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_txq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCSTTXQMASK: index too large index:%x txq_num:%x\n", index, ifp->if_txq_num); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_biocsttxqmask, entry, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); d->bd_qmask.qm_txq_mask[index] = TRUE; + SDT_PROBE1(bpf, functions, bpfioctl_biocsttxqmask, entry, index); break; } case BIOCCRTXQMASK: { + struct ifnet *ifp; int index; - log(LOG_DEBUG, "BIOCCRTXQMASK\n"); + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrtxqmask, entry, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrtxqmask, entry, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_txq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCCRTXQMASK: index too large index:%x txq_num:%x\n", index, ifp->if_txq_num); error = EINVAL; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrtxqmask, entry, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); d->bd_qmask.qm_txq_mask[index] = FALSE; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrtxqmask, entry, index); break; } case BIOCGTTXQMASK: { int index; - log(LOG_DEBUG, "BIOCGTTXQMASK\n"); + struct ifnet *ifp; + if (d->bd_bif == NULL) { - log(LOG_DEBUG, "d->bd_bif == NULL\n"); + log(LOG_ERR, "d->bd_bif == NULL\n"); /* * No interface attached yet. */ error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocgttxqmask, entry, -1, -1); break; } if (!d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "!d->bd_qmask.qm_enabled\n"); + log(LOG_ERR, "!d->bd_qmask.qm_enabled\n"); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocgttxqmask, entry, -1, -1); break; } - struct ifnet *const ifp = d->bd_bif->bif_ifp; + ifp = d->bd_bif->bif_ifp; index = *(uint32_t *)addr; if (index > ifp->if_txq_num) { - log(LOG_DEBUG, "index too large\n"); + log(LOG_ERR, "BIOCGTTXQMASK: index too large index:%x txq_num:%x\n", index, ifp->if_txq_num); error = EINVAL; + SDT_PROBE2(bpf, functions, bpfioctl_biocgttxqmask, entry, -1, -1); break; } - log(LOG_DEBUG, "index:%d\n", index); *(uint32_t *)addr = d->bd_qmask.qm_txq_mask[index]; + SDT_PROBE2(bpf, functions, bpfioctl_biocgttxqmask, entry, index, d->bd_qmask.qm_txq_mask[index]); break; } case BIOCSTOTHERMASK: - log(LOG_DEBUG, "BIOSTOTHERMASK\n"); d->bd_qmask.qm_other_mask = TRUE; + SDT_PROBE1(bpf, functions, bpfioctl_biocstothermask, entry, 1); break; case BIOCCROTHERMASK: - log(LOG_DEBUG, "BIOCCROTHERMASK\n"); d->bd_qmask.qm_other_mask = FALSE; + SDT_PROBE1(bpf, functions, bpfioctl_bioccrothermask, entry, 0); break; case BIOCGTOTHERMASK: - log(LOG_DEBUG, "BIOCGTOTHERMASK\n"); - log(LOG_DEBUG, "mask:%d\n", d->bd_qmask.qm_other_mask); *(uint32_t *)addr = (uint32_t)d->bd_qmask.qm_other_mask; + SDT_PROBE1(bpf, functions, bpfioctl_biocgtothermask, entry, d->bd_qmask.qm_other_mask); break; } CURVNET_RESTORE(); @@ -2144,8 +2241,7 @@ BPFIF_LOCK(bp); LIST_FOREACH(d, &bp->bif_dlist, bd_next) { if (d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "bpf_tap other_mask:%d\n", - d->bd_qmask.qm_other_mask); + SDT_PROBE2(bpf, functions, bpf_tap, entry, d, d->bd_qmask.qm_other_mask); if (!d->bd_qmask.qm_other_mask) continue; } @@ -2195,13 +2291,6 @@ u_int pktlen, slen; int gottime; -#if 0 - if (m->m_pkthdr.txqid != (uint32_t)-1 && m->m_pkthdr.txqid != PCPU_GET(cpuid)) - log(LOG_DEBUG, "txqid:%d cpuid:%d\n", m->m_pkthdr.txqid, PCPU_GET(cpuid)); -#endif - if (m->m_pkthdr.rxqid != (uint32_t)-1 && m->m_pkthdr.rxqid != PCPU_GET(cpuid)) - log(LOG_DEBUG, "rxqid:%d cpuid:%d\n", m->m_pkthdr.rxqid, PCPU_GET(cpuid)); - /* Skip outgoing duplicate packets. */ if ((m->m_flags & M_PROMISC) != 0 && m->m_pkthdr.rcvif == NULL) { m->m_flags &= ~M_PROMISC; @@ -2214,18 +2303,30 @@ BPFIF_LOCK(bp); LIST_FOREACH(d, &bp->bif_dlist, bd_next) { if (d->bd_qmask.qm_enabled) { -/* - log(LOG_DEBUG, "bpf_mtap rxqid:%x txqid:%x rxqmask:%x txqmask:%x\n", - m->m_pkthdr.rxqid, m->m_pkthdr.txqid, - d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid], - d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqid]); -*/ - if (m->m_pkthdr.rxqid != (uint32_t)-1 && - !d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid]) - continue; - if (m->m_pkthdr.txqid != (uint32_t)-1 && - !d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqid]) - continue; + if (!(m->m_flags & M_FLOWID)) { + log(LOG_DEBUG, "m:%p ifp:%p !(m->flags & M_FLOWID)\n", + m, m->m_pkthdr.rcvif); + if (!d->bd_qmask.qm_other_mask) + continue; + } else { + if (m->m_pkthdr.rxqid != (uint32_t)-1) + KASSERT(m->m_pkthdr.rxqid < bp->bif_ifp->if_rxq_num, + ("rxqid is not vaild rxqid:%x rxq_num:%x", + m->m_pkthdr.rxqid, bp->bif_ifp->if_rxq_num)); + if (m->m_pkthdr.txqid != (uint32_t)-1) + KASSERT(m->m_pkthdr.txqid < bp->bif_ifp->if_txq_num, + ("txqid is not vaild txqid:%x txq_num:%x", + m->m_pkthdr.txqid, bp->bif_ifp->if_txq_num)); + + SDT_PROBE3(bpf, functions, bpf_mtap_rx, entry, d, m->m_pkthdr.rxqid, bp->bif_ifp->if_rxq_num); + SDT_PROBE3(bpf, functions, bpf_mtap_tx, entry, d, m->m_pkthdr.txqid, bp->bif_ifp->if_txq_num); + if (m->m_pkthdr.rxqid != (uint32_t)-1 && + !d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid]) + continue; + if (m->m_pkthdr.txqid != (uint32_t)-1 && + !d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqid]) + continue; + } } if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp)) continue; @@ -2267,13 +2368,6 @@ u_int pktlen, slen; int gottime; -#if 0 - if (m->m_pkthdr.txqid != (uint32_t)-1 && m->m_pkthdr.txqid != PCPU_GET(cpuid)) - log(LOG_DEBUG, "txqid:%d cpuid:%d\n", m->m_pkthdr.txqid, PCPU_GET(cpuid)); -#endif - if (m->m_pkthdr.rxqid != (uint32_t)-1 && m->m_pkthdr.rxqid != PCPU_GET(cpuid)) - log(LOG_DEBUG, "rxqid:%d cpuid:%d\n", m->m_pkthdr.rxqid, PCPU_GET(cpuid)); - /* Skip outgoing duplicate packets. */ if ((m->m_flags & M_PROMISC) != 0 && m->m_pkthdr.rcvif == NULL) { m->m_flags &= ~M_PROMISC; @@ -2295,10 +2389,8 @@ BPFIF_LOCK(bp); LIST_FOREACH(d, &bp->bif_dlist, bd_next) { if (d->bd_qmask.qm_enabled) { - log(LOG_DEBUG, "bpf_mtap2 rxqid:%x txqid:%x rxqmask:%x txqmask:%x\n", - m->m_pkthdr.rxqid, m->m_pkthdr.txqid, - d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid], - d->bd_qmask.qm_txq_mask[m->m_pkthdr.txqid]); + SDT_PROBE3(bpf, functions, bpf_mtap2_rx, entry, d, m->m_pkthdr.rxqid, bp->bif_ifp->if_rxq_num); + SDT_PROBE3(bpf, functions, bpf_mtap2_tx, entry, d, m->m_pkthdr.txqid, bp->bif_ifp->if_txq_num); if (m->m_pkthdr.rxqid != (uint32_t)-1 && !d->bd_qmask.qm_rxq_mask[m->m_pkthdr.rxqid]) ==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.h#4 (text+ko) ==== ==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpfdesc.h#3 (text+ko) ==== ==== //depot/projects/soc2011/mq_bpf/src/sys/net/if.h#2 (text+ko) ==== @@ -220,6 +220,7 @@ #define IFCAP_POLLING_NOCOUNT 0x20000 /* polling ticks cannot be fragmented */ #define IFCAP_VLAN_HWTSO 0x40000 /* can do IFCAP_TSO on VLANs */ #define IFCAP_LINKSTATE 0x80000 /* the runtime link state is dynamic */ +#define IFCAP_MULTIQUEUE 0x100000 #define IFCAP_HWCSUM (IFCAP_RXCSUM | IFCAP_TXCSUM) #define IFCAP_TSO (IFCAP_TSO4 | IFCAP_TSO6) ==== //depot/projects/soc2011/mq_bpf/src/sys/net/if_ethersubr.c#2 (text+ko) ==== @@ -36,6 +36,7 @@ #include "opt_ipx.h" #include "opt_netgraph.h" #include "opt_mbuf_profiling.h" +#include "opt_rss.h" #include #include @@ -69,6 +70,7 @@ #include #include #include +#include #include #include #include @@ -106,6 +108,9 @@ CTASSERT(sizeof (struct ether_addr) == ETHER_ADDR_LEN); #endif +SYSCTL_DECL(_net_link); +SYSCTL_NODE(_net_link, IFT_ETHER, ether, CTLFLAG_RW, 0, "Ethernet"); + /* netgraph node hooks for ng_ether(4) */ void (*ng_ether_input_p)(struct ifnet *ifp, struct mbuf **mp); void (*ng_ether_input_orphan_p)(struct ifnet *ifp, struct mbuf *m); @@ -561,7 +566,7 @@ * mbuf chain m with the ethernet header at the front. */ static void -ether_input(struct ifnet *ifp, struct mbuf *m) +ether_input_internal(struct ifnet *ifp, struct mbuf *m) { struct ether_header *eh; u_short etype; @@ -754,6 +759,77 @@ CURVNET_RESTORE(); } +#if defined(RSS) || defined(SOFTRSS) +/* + * Ethernet input dispatch; by default, direct dispatch here regardless of + * global configuration. However, if RSS is enabled, hook up RSS affinity + * so that when deferred or hybrid dispatch is enabled, we can redistribute + * load based on RSS. + * + * XXXRW: Would be nice if the ifnet passed up a flag indicating whether or + * not it had already done work distribution via multi-queue. Then we could + * direct dispatch in the event load balancing was already complete and + * handle the case of interfaces with different capabilities better. + * + * XXXRW: Sort of want an M_DISTRIBUTED flag to avoid multiple distributions + * at multiple layers? + * + * XXXRW: For now, enable all this only if RSS is compiled in, although it + * works fine without RSS. Need to characterise the performance overhead + * of the detour through the netisr code in the event the result is always + * direct dispatch. + */ +static void +ether_nh_input(struct mbuf *m) +{ + + ether_input_internal(m->m_pkthdr.rcvif, m); +} + +static struct netisr_handler ether_nh = { + .nh_name = "ether", + .nh_handler = ether_nh_input, + .nh_proto = NETISR_ETHER, +#if defined(RSS) || defined(SOFTRSS) + .nh_policy = NETISR_POLICY_CPU, +#if defined(RSS) + .nh_dispatch = NETISR_DISPATCH_DIRECT, +#else + .nh_dispatch = NETISR_DISPATCH_HYBRID, +#endif + .nh_m2cpuid = rss_m2cpuid, +#else + .nh_policy = NETISR_POLICY_SOURCE, + .nh_dispatch = NETISR_DISPATCH_DIRECT, +#endif +}; + +static void +ether_init(__unused void *arg) +{ + + netisr_register(ðer_nh); +} +SYSINIT(ether, SI_SUB_INIT_IF, SI_ORDER_ANY, ether_init, NULL); +#endif /* RSS || SOFTRSS */ +#include +static void +ether_input(struct ifnet *ifp, struct mbuf *m) +{ + log(LOG_DEBUG, "%s ifp:%p m:%p\n", __func__, ifp, m); +#if defined(RSS) || defined(SOFTRSS) + /* + * We will rely on rcvif being set properly in the deferred context, + * so assert it is correct here. + */ + KASSERT(m->m_pkthdr.rcvif == ifp, ("%s: ifnet mismatch", __func__)); + + netisr_dispatch(NETISR_ETHER, m); +#else + ether_input_internal(ifp, m); +#endif +} + /* * Upper layer processing for a received Ethernet packet. */ @@ -1008,8 +1084,6 @@ } #endif -SYSCTL_DECL(_net_link); -SYSCTL_NODE(_net_link, IFT_ETHER, ether, CTLFLAG_RW, 0, "Ethernet"); #if defined(INET) || defined(INET6) SYSCTL_VNET_INT(_net_link_ether, OID_AUTO, ipfw, CTLFLAG_RW, &VNET_NAME(ether_ipfw), 0, "Pass ether pkts through firewall"); ==== //depot/projects/soc2011/mq_bpf/src/sys/net/if_tap.c#4 (text+ko) ==== @@ -54,7 +54,6 @@ #include #include #include -#include #include #include #include @@ -870,10 +869,6 @@ } while (m == NULL); mtx_unlock(&tp->tap_mtx); - m->m_pkthdr.rxqid = (uint32_t)-1; - m->m_pkthdr.txqid = PCPU_GET(cpuid); - log(LOG_DEBUG, "%s rxqid:%x txqid:%x\n", __func__, m->m_pkthdr.rxqid, m->m_pkthdr.txqid); - /* feed packet to bpf */ BPF_MTAP(ifp, m); @@ -948,10 +943,6 @@ return (0); } - m->m_pkthdr.rxqid = PCPU_GET(cpuid); - m->m_pkthdr.txqid = (uint32_t)-1; - log(LOG_DEBUG, "%s rxqid:%x txqid:%x\n", __func__, m->m_pkthdr.rxqid, m->m_pkthdr.txqid); - /* Pass packet up to parent. */ (*ifp->if_input)(ifp, m); ifp->if_ipackets ++; /* ibytes are counted in parent */ @@ -1090,3 +1081,4 @@ knlist_remove(&tp->tap_rsel.si_note, kn, 0); } /* tapkqdetach */ + ==== //depot/projects/soc2011/mq_bpf/src/sys/net/if_var.h#5 (text+ko) ==== ==== //depot/projects/soc2011/mq_bpf/src/sys/net/netisr.c#2 (text+ko) ==== @@ -1,6 +1,6 @@ /*- * Copyright (c) 2007-2009 Robert N. M. Watson - * Copyright (c) 2010 Juniper Networks, Inc. + * Copyright (c) 2010-2011 Juniper Networks, Inc. * All rights reserved. * * This software was developed by Robert N. M. Watson under contract @@ -65,6 +65,7 @@ #include "opt_ddb.h" #include "opt_device_polling.h" +#include "opt_kdtrace.h" #include #include @@ -82,6 +83,8 @@ #include #include #include +#include +#include #ifdef DDB #include @@ -94,6 +97,31 @@ #include #include +/* + * Locking strategy: three types of locks protect netisr processing: + * + * netisr configuration lock - serializes "rethreading" events, in which the + * number of worker threads is changed. + * + * netisr_rmlock - stabilizes the netisr system for network processing, + * almost always acquired as a read lock (except during configuration + * changes). + * + * nws_mtx - per-workstream lock that serializes access to queues. + */ + +/* + * netisr configuration lock: serialize rethread events, in which the thread + * count may be increased and decreased, to avoid interlacing of these + * events, which might expose incompletely started or stopped threads, etc. + * This is a sleep lock so that it can be held over ithread start/stop. + */ +static struct sx netisr_config_sx; +#define NETISR_CONFIG_LOCK_INIT() sx_init(&netisr_config_sx, \ + "netisr_config_sx") +#define NETISR_CONFIG_LOCK() sx_xlock(&netisr_config_sx) +#define NETISR_CONFIG_UNLOCK() sx_xunlock(&netisr_config_sx) + /*- * Synchronize use and modification of the registered netisr data structures; * acquire a read lock while modifying the set of registered protocols to @@ -114,51 +142,74 @@ * * XXXRW: rmlocks don't support assertions. */ +#define NETISR_RMLOCKING + +#ifdef NETISR_RMLOCKING static struct rmlock netisr_rmlock; #define NETISR_LOCK_INIT() rm_init_flags(&netisr_rmlock, "netisr", \ - RM_NOWITNESS) + RM_NOWITNESS | RM_RECURSE) #define NETISR_LOCK_ASSERT() #define NETISR_RLOCK(tracker) rm_rlock(&netisr_rmlock, (tracker)) #define NETISR_RUNLOCK(tracker) rm_runlock(&netisr_rmlock, (tracker)) #define NETISR_WLOCK() rm_wlock(&netisr_rmlock) #define NETISR_WUNLOCK() rm_wunlock(&netisr_rmlock) -/* #define NETISR_LOCKING */ +#else +#define NETISR_LOCK_INIT() +#define NETISR_LOCK_ASSERT() +#define NETISR_RLOCK(x) +#define NETISR_RUNLOCK(x) +#define NETISR_WLOCK() +#define NETISR_WUNLOCK() +#endif SYSCTL_NODE(_net, OID_AUTO, isr, CTLFLAG_RW, 0, "netisr"); /*- - * Three direct dispatch policies are supported: + * Three global direct dispatch policies are supported: * - * - Always defer: all work is scheduled for a netisr, regardless of context. - * (!direct) + * NETISR_DISPATCH_QUEUED: All work is deferred for a netisr, regardless of + * context (may be overriden by protocols). * - * - Hybrid: if the executing context allows direct dispatch, and we're - * running on the CPU the work would be done on, then direct dispatch if it - * wouldn't violate ordering constraints on the workstream. - * (direct && !direct_force) + * NETISR_DISPATCH_HYBRID: If the executing context allows direct dispatch, + * and we're running on the CPU the work would be performed on, then direct + * dispatch it if it wouldn't violate ordering constraints on the workstream. * - * - Always direct: if the executing context allows direct dispatch, always - * direct dispatch. (direct && direct_force) + * NETISR_DISPATCH_DIRECT: If the executing context allows direct dispatch, + * always direct dispatch. (The default.) * * Notice that changing the global policy could lead to short periods of * misordered processing, but this is considered acceptable as compared to - * the complexity of enforcing ordering during policy changes. + * the complexity of enforcing ordering during policy changes. Protocols can + * override the global policy (when they're not doing that, they select + * NETISR_DISPATCH_DEFAULT). + */ +#define NETISR_DISPATCH_POLICY_DEFAULT NETISR_DISPATCH_DIRECT +#define NETISR_DISPATCH_POLICY_MAXSTR 20 /* Used for temporary buffers. */ +static u_int netisr_dispatch_policy = NETISR_DISPATCH_POLICY_DEFAULT; +static int sysctl_netisr_dispatch_policy(SYSCTL_HANDLER_ARGS); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Mon Jun 13 22:58:22 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5DF741065673; Mon, 13 Jun 2011 22:58:22 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 20B9D1065670 for ; Mon, 13 Jun 2011 22:58:22 +0000 (UTC) (envelope-from syuu@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id EA33B8FC14 for ; Mon, 13 Jun 2011 22:58:21 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DMwLMK062028 for ; Mon, 13 Jun 2011 22:58:21 GMT (envelope-from syuu@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DMwLbw062025 for perforce@freebsd.org; Mon, 13 Jun 2011 22:58:21 GMT (envelope-from syuu@FreeBSD.org) Date: Mon, 13 Jun 2011 22:58:21 GMT Message-Id: <201106132258.p5DMwLbw062025@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to syuu@FreeBSD.org using -f From: Takuya ASADA To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194711 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 22:58:22 -0000 http://p4web.freebsd.org/@@194711?ac=10 Change 194711 by syuu@x200 on 2011/06/13 22:57:26 Just for getting hi-rezo console Affected files ... .. //depot/projects/soc2011/mq_bpf/src/sys/amd64/conf/VESA#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Tue Jun 14 17:25:21 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 406921065672; Tue, 14 Jun 2011 17:25:21 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 02E4A106564A for ; Tue, 14 Jun 2011 17:25:21 +0000 (UTC) (envelope-from cnicutar@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id E388F8FC08 for ; Tue, 14 Jun 2011 17:25:20 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5EHPKWR090894 for ; Tue, 14 Jun 2011 17:25:20 GMT (envelope-from cnicutar@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5EHPKpe090890 for perforce@freebsd.org; Tue, 14 Jun 2011 17:25:20 GMT (envelope-from cnicutar@freebsd.org) Date: Tue, 14 Jun 2011 17:25:20 GMT Message-Id: <201106141725.p5EHPKpe090890@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to cnicutar@freebsd.org using -f From: Catalin Nicutar To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194756 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jun 2011 17:25:21 -0000 http://p4web.freebsd.org/@@194756?ac=10 Change 194756 by cnicutar@cnicutar_cronos on 2011/06/14 17:24:19 Add the TCP_SNDUTO_TIMEOUT and TCP_RCVUTO_TIMEOUT user-settable options. Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp.h#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_usrreq.c#2 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_var.h#2 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp.h#3 (text+ko) ==== @@ -96,6 +96,8 @@ #define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ #define TCPOPT_SIGNATURE 19 /* Keyed MD5: RFC 2385 */ #define TCPOLEN_SIGNATURE 18 +#define TCPOPT_UTO 28 +#define TCPOLEN_UTO 4 /* Miscellaneous constants */ #define MAX_SACK_BLKS 6 /* Max # SACK blocks stored at receiver side */ @@ -151,14 +153,16 @@ /* * User-settable options (used with setsockopt). */ -#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ #if __BSD_VISIBLE -#define TCP_MAXSEG 0x02 /* set maximum segment size */ -#define TCP_NOPUSH 0x04 /* don't push last block of write */ -#define TCP_NOOPT 0x08 /* don't use TCP options */ -#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */ -#define TCP_INFO 0x20 /* retrieve tcp_info structure */ -#define TCP_CONGESTION 0x40 /* get/set congestion control algorithm */ +#define TCP_MAXSEG 0x02 /* set maximum segment size */ +#define TCP_NOPUSH 0x04 /* don't push last block of write */ +#define TCP_NOOPT 0x08 /* don't use TCP options */ +#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */ +#define TCP_INFO 0x20 /* retrieve tcp_info structure */ +#define TCP_CONGESTION 0x40 /* get/set congestion control algorithm */ +#define TCP_SNDUTO_TIMEOUT 0x80 /* get/set sent UTO value */ +#define TCP_RCVUTO_TIMEOUT 0x100 /* accept UTO suggestion */ #define TCP_CA_NAME_MAX 16 /* max congestion control name length */ ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_usrreq.c#2 (text+ko) ==== @@ -1296,6 +1296,52 @@ INP_WUNLOCK(inp); break; #endif /* TCP_SIGNATURE */ + case TCP_SNDUTO_TIMEOUT: + INP_WUNLOCK(inp); + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + return (error); + + INP_WLOCK_RECHECK(inp); + if (optval == 0) { + /* disable sending the option */ + tp->t_flags &= ~TF_SND_UTO; + tp->snd_uto = 0; + } + else if (optval >= V_uto_min_timeout && + optval <= V_uto_max_timeout) { + /* acceptable timeout */ + /* + * TODO set granularity + */ + tp->t_flags |= TF_SND_UTO; + tp->snd_uto = optval; + } + else { + error = EINVAL; + } + INP_WUNLOCK(inp); + break; + + case TCP_RCVUTO_TIMEOUT: + INP_WUNLOCK(inp); + error = sooptcopyin(sopt, &optval, sizeof optval, + sizeof optval); + if (error) + return (error); + + INP_WLOCK_RECHECK(inp); + if (optval <= 0) { + /* this connection will disregard suggestions */ + tp->t_flags &= ~TF_RCV_UTO; + } + else { + tp->t_flags |= TF_RCV_UTO; + } + INP_WUNLOCK(inp); + break; + case TCP_NODELAY: case TCP_NOOPT: INP_WUNLOCK(inp); @@ -1381,6 +1427,16 @@ break; #endif + case TCP_SNDUTO_TIMEOUT: + optval = tp->snd_uto; + INP_WUNLOCK(inp); + error = sooptcopyout(sopt, &optval, sizeof optval); + break; + case TCP_RCVUTO_TIMEOUT: + optval = tp->rcv_uto; + INP_WUNLOCK(inp); + error = sooptcopyout(sopt, &optval, sizeof optval); + break; case TCP_NODELAY: optval = tp->t_flags & TF_NODELAY; INP_WUNLOCK(inp); ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_var.h#2 (text+ko) ==== @@ -198,8 +198,11 @@ int t_sndzerowin; /* zero-window updates sent */ + uint32_t snd_uto; /* sent timeout */ + uint32_t rcv_uto; /* received suggestion from peer */ + void *t_pspare2[6]; /* 2 CC / 4 TBD */ - uint64_t _pad[10]; /* 7 UTO, 3 TBD (1-2 CC/RTT?) */ + uint64_t _pad[9]; /* 6 UTO, 3 TBD (1-2 CC/RTT?) */ uint64_t t_sndrexmitpack;/* retransmit packets sent */ uint64_t t_rcvoopack; /* out-of-order packets received */ @@ -234,6 +237,8 @@ #define TF_ECN_PERMIT 0x4000000 /* connection ECN-ready */ #define TF_ECN_SND_CWR 0x8000000 /* ECN CWR in queue */ #define TF_ECN_SND_ECE 0x10000000 /* ECN ECE in queue */ +#define TF_SND_UTO 0x20000000 /* send UTO option */ +#define TF_RCV_UTO 0x40000000 /* accept UTO suggestions */ #define IN_FASTRECOVERY(tp) (tp->t_flags & TF_FASTRECOVERY) #define ENTER_FASTRECOVERY(tp) tp->t_flags |= TF_FASTRECOVERY @@ -276,7 +281,8 @@ #define TOF_TS 0x0010 /* timestamp */ #define TOF_SIGNATURE 0x0040 /* TCP-MD5 signature option (RFC2385) */ #define TOF_SACK 0x0080 /* Peer sent SACK option */ -#define TOF_MAXOPT 0x0100 +#define TOF_UTO 0x0100 /* user timeout option */ +#define TOF_MAXOPT 0x0200 u_int32_t to_tsval; /* new timestamp */ u_int32_t to_tsecr; /* reflected timestamp */ u_char *to_sacks; /* pointer to the first SACK blocks */ @@ -284,6 +290,7 @@ u_int16_t to_mss; /* maximum segment size */ u_int8_t to_wscale; /* window scaling */ u_int8_t to_nsacks; /* number of SACK blocks */ + u_int16_t to_uto; /* sent user timeout */ }; /* @@ -568,6 +575,11 @@ VNET_DECLARE(int, path_mtu_discovery); VNET_DECLARE(int, ss_fltsz); VNET_DECLARE(int, ss_fltsz_local); +VNET_DECLARE(int, uto_min_timeout); +VNET_DECLARE(int, uto_max_timeout); +VNET_DECLARE(int, uto_def_timeout); + + #define V_tcb VNET(tcb) #define V_tcbinfo VNET(tcbinfo) #define V_tcpstat VNET(tcpstat) @@ -579,6 +591,9 @@ #define V_path_mtu_discovery VNET(path_mtu_discovery) #define V_ss_fltsz VNET(ss_fltsz) #define V_ss_fltsz_local VNET(ss_fltsz_local) +#define V_uto_min_timeout VNET(uto_min_timeout) +#define V_uto_max_timeout VNET(uto_max_timeout) +#define V_uto_def_timeout VNET(uto_def_timeout) VNET_DECLARE(int, tcp_do_sack); /* SACK enabled/disabled */ VNET_DECLARE(int, tcp_sc_rst_sock_fail); /* RST on sock alloc failure */ From owner-p4-projects@FreeBSD.ORG Tue Jun 14 17:25:22 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 01CEF1065772; Tue, 14 Jun 2011 17:25:21 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 247E0106566B for ; Tue, 14 Jun 2011 17:25:21 +0000 (UTC) (envelope-from cnicutar@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 12AF18FC0A for ; Tue, 14 Jun 2011 17:25:21 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5EHPKPm090900 for ; Tue, 14 Jun 2011 17:25:20 GMT (envelope-from cnicutar@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5EHPK74090897 for perforce@freebsd.org; Tue, 14 Jun 2011 17:25:20 GMT (envelope-from cnicutar@freebsd.org) Date: Tue, 14 Jun 2011 17:25:20 GMT Message-Id: <201106141725.p5EHPK74090897@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to cnicutar@freebsd.org using -f From: Catalin Nicutar To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194757 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jun 2011 17:25:22 -0000 http://p4web.freebsd.org/@@194757?ac=10 Change 194757 by cnicutar@cnicutar_cronos on 2011/06/14 17:25:06 Send UTO on first SYN Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_output.c#2 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/sys/netinet/tcp_output.c#2 (text+ko) ==== @@ -704,6 +704,11 @@ to.to_sacks = (u_char *)tp->sackblks; } } + /* UTO */ + if ((flags & TH_SYN) && (tp->t_flags & TF_SND_UTO)) { + to.to_uto = tp->snd_uto; + to.to_flags |= TOF_UTO; + } #ifdef TCP_SIGNATURE /* TCP-MD5 (RFC2385). */ if (tp->t_flags & TF_SIGNATURE) @@ -1370,6 +1375,21 @@ bcopy((u_char *)&to->to_mss, optp, sizeof(to->to_mss)); optp += sizeof(to->to_mss); break; + case TOF_UTO: + while (optlen % 4) { + optlen += TCPOLEN_NOP; + *optp++ = TCPOPT_NOP; + } + if (TCP_MAXOLEN - optlen < TCPOLEN_UTO) + continue; + optlen += TCPOLEN_UTO; + *optp++ = TCPOPT_UTO; + *optp++ = TCPOLEN_UTO; + + to->to_uto = htons(to->to_uto); + bcopy((u_char *)&to->to_uto, optp, sizeof(to->to_uto)); + optp += sizeof(to->to_uto); + break; case TOF_SCALE: while (!optlen || optlen % 2 != 1) { optlen += TCPOLEN_NOP; From owner-p4-projects@FreeBSD.ORG Wed Jun 15 18:46:57 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 365A4106564A; Wed, 15 Jun 2011 18:46:57 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D489A1065670 for ; Wed, 15 Jun 2011 18:46:56 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id C28E48FC08 for ; Wed, 15 Jun 2011 18:46:56 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5FIkuN5095613 for ; Wed, 15 Jun 2011 18:46:56 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5FIkuAl095610 for perforce@freebsd.org; Wed, 15 Jun 2011 18:46:56 GMT (envelope-from jhb@freebsd.org) Date: Wed, 15 Jun 2011 18:46:56 GMT Message-Id: <201106151846.p5FIkuAl095610@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194802 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jun 2011 18:46:57 -0000 http://p4web.freebsd.org/@@194802?ac=10 Change 194802 by jhb@jhb_jhbbsd on 2011/06/15 18:46:29 Don't create ACPI device_t objects for ACPI devices that don't have a _HID or _CID. Affected files ... .. //depot/projects/pci/sys/dev/acpica/acpi.c#4 edit .. //depot/projects/pci/sys/dev/acpica/acpi_pci.c#3 edit Differences ... ==== //depot/projects/pci/sys/dev/acpica/acpi.c#4 (text+ko) ==== @@ -149,6 +149,7 @@ static ACPI_STATUS acpi_EnterSleepState(struct acpi_softc *sc, int state); static void acpi_shutdown_final(void *arg, int howto); static void acpi_enable_fixed_events(struct acpi_softc *sc); +static BOOLEAN acpi_has_hid(ACPI_HANDLE handle); static int acpi_wake_sleep_prep(ACPI_HANDLE handle, int sstate); static int acpi_wake_run_prep(ACPI_HANDLE handle, int sstate); static int acpi_wake_prep_walk(int sstate); @@ -1841,6 +1842,13 @@ break; if (acpi_parse_prw(handle, &prw) == 0) AcpiSetupGpeForWake(handle, prw.gpe_handle, prw.gpe_bit); + + /* + * Ignore devices that do not have a _HID or _CID. They should + * be discovered by other buses (e.g. the PCI bus driver). + */ + if (!acpi_has_hid(handle)) + break; /* FALLTHROUGH */ case ACPI_TYPE_PROCESSOR: case ACPI_TYPE_THERMAL: @@ -2029,6 +2037,30 @@ } /* + * Returns true if a device has at least one valid device ID. + */ +static BOOLEAN +acpi_has_hid(ACPI_HANDLE h) +{ + ACPI_DEVICE_INFO *devinfo; + BOOLEAN ret; + + if (h == NULL || + ACPI_FAILURE(AcpiGetObjectInfo(h, &devinfo))) + return (FALSE); + + ret = FALSE; + if ((devinfo->Valid & ACPI_VALID_HID) != 0) + ret = TRUE; + else if ((devinfo->Valid & ACPI_VALID_CID) != 0) + if (devinfo->CompatibleIdList.Count > 0) + ret = TRUE; + + AcpiOsFree(devinfo); + return (ret); +} + +/* * Match a HID string against a handle */ BOOLEAN ==== //depot/projects/pci/sys/dev/acpica/acpi_pci.c#3 (text+ko) ==== @@ -210,38 +210,24 @@ device_t child; /* - * Lookup and remove the unused device that acpi0 creates when it walks - * the namespace creating devices. + * Occasionally a PCI device may show up as an ACPI device + * with a _HID. (For example, the TabletPC TC1000 has a + * second PCI-ISA bridge that has a _HID for an + * acpi_sysresource device.) In that case, leave ACPI-CA's + * device data pointing at the ACPI-enumerated device. */ child = acpi_get_device(handle); if (child != NULL) { - if (device_is_alive(child)) { - /* - * The TabletPC TC1000 has a second PCI-ISA bridge - * that has a _HID for an acpi_sysresource device. - * In that case, leave ACPI-CA's device data pointing - * at the ACPI-enumerated device. - */ - device_printf(child, - "Conflicts with PCI device %d:%d:%d\n", - pci_get_bus(pci_child), pci_get_slot(pci_child), - pci_get_function(pci_child)); - return; - } KASSERT(device_get_parent(child) == devclass_get_device(devclass_find("acpi"), 0), ("%s: child (%s)'s parent is not acpi0", __func__, acpi_name(handle))); - device_delete_child(device_get_parent(child), child); + return; } /* * Update ACPI-CA to use the PCI enumerated device_t for this handle. */ - status = AcpiDetachData(handle, acpi_fake_objhandler); - if (ACPI_FAILURE(status)) - printf("WARNING: Unable to detach object data from %s - %s\n", - acpi_name(handle), AcpiFormatException(status)); status = AcpiAttachData(handle, acpi_fake_objhandler, pci_child); if (ACPI_FAILURE(status)) printf("WARNING: Unable to attach object data to %s - %s\n", From owner-p4-projects@FreeBSD.ORG Fri Jun 17 21:23:54 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DF6261065678; Fri, 17 Jun 2011 21:23:53 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A077E106566C for ; Fri, 17 Jun 2011 21:23:53 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 8CAE08FC0A for ; Fri, 17 Jun 2011 21:23:53 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5HLNrBK030768 for ; Fri, 17 Jun 2011 21:23:53 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5HLNotv030764 for perforce@freebsd.org; Fri, 17 Jun 2011 21:23:50 GMT (envelope-from jhb@freebsd.org) Date: Fri, 17 Jun 2011 21:23:50 GMT Message-Id: <201106172123.p5HLNotv030764@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194889 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jun 2011 21:23:54 -0000 http://p4web.freebsd.org/@@194889?ac=10 Change 194889 by jhb@jhb_jhbbsd on 2011/06/17 21:22:55 IFC @194887 Affected files ... .. //depot/projects/pci/sys/Makefile#2 integrate .. //depot/projects/pci/sys/amd64/acpica/acpi_wakeup.c#2 integrate .. //depot/projects/pci/sys/amd64/amd64/identcpu.c#4 integrate .. //depot/projects/pci/sys/amd64/amd64/intr_machdep.c#2 integrate .. //depot/projects/pci/sys/amd64/amd64/legacy.c#3 integrate .. //depot/projects/pci/sys/amd64/amd64/machdep.c#4 integrate .. //depot/projects/pci/sys/amd64/amd64/mp_machdep.c#3 integrate .. //depot/projects/pci/sys/amd64/amd64/pmap.c#3 integrate .. //depot/projects/pci/sys/amd64/amd64/vm_machdep.c#2 integrate .. //depot/projects/pci/sys/amd64/conf/GENERIC#4 integrate .. //depot/projects/pci/sys/amd64/include/_types.h#2 integrate .. //depot/projects/pci/sys/amd64/include/clock.h#4 integrate .. //depot/projects/pci/sys/amd64/include/pmap.h#4 integrate .. //depot/projects/pci/sys/amd64/include/smp.h#3 integrate .. //depot/projects/pci/sys/amd64/include/specialreg.h#3 integrate .. //depot/projects/pci/sys/amd64/include/vmparam.h#2 integrate .. //depot/projects/pci/sys/arm/arm/pmap.c#2 integrate .. //depot/projects/pci/sys/arm/include/_types.h#2 integrate .. //depot/projects/pci/sys/arm/include/pmap.h#2 integrate .. //depot/projects/pci/sys/arm/include/vmparam.h#2 integrate .. //depot/projects/pci/sys/boot/Makefile#2 integrate .. //depot/projects/pci/sys/boot/common/Makefile.inc#3 integrate .. //depot/projects/pci/sys/boot/common/interp.c#2 integrate .. //depot/projects/pci/sys/boot/common/loader.8#2 integrate .. //depot/projects/pci/sys/boot/forth/beastie.4th#2 integrate .. //depot/projects/pci/sys/boot/forth/beastie.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/brand.4th#1 branch .. //depot/projects/pci/sys/boot/forth/brand.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/check-password.4th#1 branch .. //depot/projects/pci/sys/boot/forth/check-password.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/color.4th#1 branch .. //depot/projects/pci/sys/boot/forth/color.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/delay.4th#1 branch .. //depot/projects/pci/sys/boot/forth/delay.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/loader.4th#2 integrate .. //depot/projects/pci/sys/boot/forth/loader.conf.5#2 integrate .. //depot/projects/pci/sys/boot/forth/loader.rc#2 integrate .. //depot/projects/pci/sys/boot/forth/menu-commands.4th#1 branch .. //depot/projects/pci/sys/boot/forth/menu.4th#1 branch .. //depot/projects/pci/sys/boot/forth/menu.4th.8#1 branch .. //depot/projects/pci/sys/boot/forth/menu.rc#1 branch .. //depot/projects/pci/sys/boot/forth/shortcuts.4th#1 branch .. //depot/projects/pci/sys/boot/forth/support.4th#2 integrate .. //depot/projects/pci/sys/boot/forth/version.4th#1 branch .. //depot/projects/pci/sys/boot/forth/version.4th.8#1 branch .. //depot/projects/pci/sys/boot/i386/boot2/Makefile#5 integrate .. //depot/projects/pci/sys/boot/i386/loader/Makefile#2 integrate .. //depot/projects/pci/sys/boot/i386/zfsboot/Makefile#4 integrate .. //depot/projects/pci/sys/boot/ia64/common/Makefile#2 integrate .. //depot/projects/pci/sys/boot/ia64/common/exec.c#4 integrate .. //depot/projects/pci/sys/boot/ia64/common/icache.c#1 branch .. //depot/projects/pci/sys/boot/ia64/common/libia64.h#3 integrate .. //depot/projects/pci/sys/boot/ia64/efi/efimd.c#4 integrate .. //depot/projects/pci/sys/boot/ia64/efi/main.c#3 integrate .. //depot/projects/pci/sys/boot/ia64/efi/version#3 integrate .. //depot/projects/pci/sys/boot/pc98/loader/Makefile#2 integrate .. //depot/projects/pci/sys/boot/powerpc/ofw/Makefile#2 integrate .. //depot/projects/pci/sys/boot/powerpc/ps3/Makefile#2 integrate .. //depot/projects/pci/sys/boot/sparc64/loader/Makefile#2 integrate .. //depot/projects/pci/sys/boot/sparc64/loader/main.c#3 integrate .. //depot/projects/pci/sys/cam/ata/ata_all.c#3 integrate .. //depot/projects/pci/sys/cam/ata/ata_da.c#3 integrate .. //depot/projects/pci/sys/cam/ata/ata_xpt.c#3 integrate .. //depot/projects/pci/sys/cam/cam_ccb.h#3 integrate .. //depot/projects/pci/sys/cam/cam_periph.c#3 integrate .. //depot/projects/pci/sys/cam/cam_periph.h#2 integrate .. //depot/projects/pci/sys/cam/cam_xpt.c#4 integrate .. //depot/projects/pci/sys/cam/cam_xpt.h#3 integrate .. //depot/projects/pci/sys/cam/cam_xpt_internal.h#2 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_all.c#2 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_all.h#2 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_cd.c#3 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_da.c#3 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_pass.c#3 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_ses.h#2 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_xpt.c#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/kern/opensolaris.c#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/kern/opensolaris_sysevent.c#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/sys/atomic.h#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/sys/kstat.h#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/sys/systm.h#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/sys/taskq.h#2 integrate .. //depot/projects/pci/sys/cddl/compat/opensolaris/sys/time.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#3 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c#2 integrate .. //depot/projects/pci/sys/cddl/dev/cyclic/cyclic.c#2 integrate .. //depot/projects/pci/sys/cddl/dev/cyclic/i386/cyclic_machdep.c#2 integrate .. //depot/projects/pci/sys/cddl/dev/dtrace/amd64/dtrace_subr.c#3 integrate .. //depot/projects/pci/sys/cddl/dev/dtrace/i386/dtrace_subr.c#3 integrate .. //depot/projects/pci/sys/compat/freebsd32/freebsd32_misc.c#4 integrate .. //depot/projects/pci/sys/compat/freebsd32/freebsd32_proto.h#4 integrate .. //depot/projects/pci/sys/compat/freebsd32/freebsd32_syscall.h#4 integrate .. //depot/projects/pci/sys/compat/freebsd32/freebsd32_syscalls.c#4 integrate .. //depot/projects/pci/sys/compat/freebsd32/freebsd32_sysent.c#4 integrate .. //depot/projects/pci/sys/compat/freebsd32/syscalls.master#4 integrate .. //depot/projects/pci/sys/compat/linprocfs/linprocfs.c#4 integrate .. //depot/projects/pci/sys/compat/linux/linux_ioctl.c#2 integrate .. //depot/projects/pci/sys/compat/linux/linux_ioctl.h#2 integrate .. //depot/projects/pci/sys/compat/linux/linux_videodev.h#2 integrate .. //depot/projects/pci/sys/compat/linux/linux_videodev2.h#1 branch .. //depot/projects/pci/sys/compat/linux/linux_videodev2_compat.h#1 branch .. //depot/projects/pci/sys/conf/Makefile.arm#2 integrate .. //depot/projects/pci/sys/conf/Makefile.powerpc#2 integrate .. //depot/projects/pci/sys/conf/Makefile.sun4v#2 delete .. //depot/projects/pci/sys/conf/NOTES#4 integrate .. //depot/projects/pci/sys/conf/files#5 integrate .. //depot/projects/pci/sys/conf/files.i386#3 integrate .. //depot/projects/pci/sys/conf/files.powerpc#3 integrate .. //depot/projects/pci/sys/conf/files.sun4v#4 delete .. //depot/projects/pci/sys/conf/kern.mk#3 integrate .. //depot/projects/pci/sys/conf/kern.post.mk#2 integrate .. //depot/projects/pci/sys/conf/kmod.mk#3 integrate .. //depot/projects/pci/sys/conf/newvers.sh#2 integrate .. //depot/projects/pci/sys/conf/options#6 integrate .. //depot/projects/pci/sys/conf/options.sun4v#2 delete .. //depot/projects/pci/sys/contrib/dev/acpica/changes.txt#4 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/debugger/dbexec.c#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/debugger/dbinput.c#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/debugger/dbutils.c#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/debugger/dbxface.c#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acconfig.h#3 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acdebug.h#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acglobal.h#3 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/aclocal.h#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acpiosxf.h#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acpixf.h#4 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/include/acpredef.h#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/osunixxf.c#2 integrate .. //depot/projects/pci/sys/contrib/dev/acpica/tables/tbinstal.c#2 integrate .. //depot/projects/pci/sys/contrib/pf/net/pf.c#3 integrate .. //depot/projects/pci/sys/contrib/pf/net/pf_ioctl.c#3 integrate .. //depot/projects/pci/sys/contrib/pf/net/pf_norm.c#2 integrate .. //depot/projects/pci/sys/ddb/db_command.c#3 integrate .. //depot/projects/pci/sys/dev/aac/aac.c#2 integrate .. //depot/projects/pci/sys/dev/aac/aacvar.h#2 integrate .. //depot/projects/pci/sys/dev/acpica/Osd/OsdDebug.c#2 integrate .. //depot/projects/pci/sys/dev/acpica/acpi.c#5 integrate .. //depot/projects/pci/sys/dev/acpica/acpi_hpet.c#2 integrate .. //depot/projects/pci/sys/dev/acpica/acpi_timer.c#4 integrate .. //depot/projects/pci/sys/dev/ae/if_ae.c#3 integrate .. //depot/projects/pci/sys/dev/age/if_age.c#3 integrate .. //depot/projects/pci/sys/dev/ahci/ahci.c#4 integrate .. //depot/projects/pci/sys/dev/ahci/ahci.h#3 integrate .. //depot/projects/pci/sys/dev/alc/if_alc.c#3 integrate .. //depot/projects/pci/sys/dev/alc/if_alcreg.h#2 integrate .. //depot/projects/pci/sys/dev/ale/if_ale.c#3 integrate .. //depot/projects/pci/sys/dev/ale/if_alereg.h#2 integrate .. //depot/projects/pci/sys/dev/amdsbwd/amdsbwd.c#2 integrate .. //depot/projects/pci/sys/dev/ata/ata-pci.h#3 integrate .. //depot/projects/pci/sys/dev/ata/ata-sata.c#2 integrate .. //depot/projects/pci/sys/dev/ata/chipsets/ata-intel.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ah_osdep.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_dfs/null/dfs_null.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ah.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_debug.h#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_desc.h#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_devid.h#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom.h#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_9287.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_9287.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_v1.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_v14.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_v14.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_v3.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_eeprom_v4k.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_internal.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212.h#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212reg.h#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar2133.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_power.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416desc.h#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416phy.h#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416reg.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9280_olc.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285.h#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_cal.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_diversity.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_phy.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_phy.h#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_reset.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285an.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287.ini#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_cal.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_cal.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_olc.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_olc.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_reset.c#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_reset.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287an.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287phy.h#1 branch .. //depot/projects/pci/sys/dev/ath/ath_rate/sample/sample.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_rate/sample/tx_schedules.h#2 integrate .. //depot/projects/pci/sys/dev/ath/if_ath.c#4 integrate .. //depot/projects/pci/sys/dev/ath/if_ath_ahb.c#3 integrate .. //depot/projects/pci/sys/dev/ath/if_ath_sysctl.c#4 integrate .. //depot/projects/pci/sys/dev/ath/if_ath_tx_ht.c#3 integrate .. //depot/projects/pci/sys/dev/ath/if_athdfs.h#1 branch .. //depot/projects/pci/sys/dev/ath/if_athioctl.h#4 integrate .. //depot/projects/pci/sys/dev/ath/if_athvar.h#4 integrate .. //depot/projects/pci/sys/dev/atkbdc/atkbd.c#2 integrate .. //depot/projects/pci/sys/dev/atkbdc/atkbdreg.h#2 integrate .. //depot/projects/pci/sys/dev/bce/if_bce.c#3 integrate .. //depot/projects/pci/sys/dev/bfe/if_bfe.c#2 integrate .. //depot/projects/pci/sys/dev/bge/if_bge.c#5 integrate .. //depot/projects/pci/sys/dev/bge/if_bgereg.h#3 integrate .. //depot/projects/pci/sys/dev/bm/if_bm.c#2 integrate .. //depot/projects/pci/sys/dev/bxe/bxe_debug.h#4 integrate .. //depot/projects/pci/sys/dev/bxe/bxe_link.c#2 integrate .. //depot/projects/pci/sys/dev/bxe/if_bxe.c#4 integrate .. //depot/projects/pci/sys/dev/bxe/if_bxe.h#4 integrate .. //depot/projects/pci/sys/dev/cardbus/cardbus_cis.c#4 integrate .. //depot/projects/pci/sys/dev/cfi/cfi_dev.c#2 integrate .. //depot/projects/pci/sys/dev/coretemp/coretemp.c#3 integrate .. //depot/projects/pci/sys/dev/cxgbe/adapter.h#4 integrate .. //depot/projects/pci/sys/dev/cxgbe/common/common.h#3 integrate .. //depot/projects/pci/sys/dev/cxgbe/common/jhash.h#1 branch .. //depot/projects/pci/sys/dev/cxgbe/common/t4fw_interface.h#3 integrate .. //depot/projects/pci/sys/dev/cxgbe/offload.h#2 integrate .. //depot/projects/pci/sys/dev/cxgbe/osdep.h#3 integrate .. //depot/projects/pci/sys/dev/cxgbe/t4_ioctl.h#3 integrate .. //depot/projects/pci/sys/dev/cxgbe/t4_l2t.c#1 branch .. //depot/projects/pci/sys/dev/cxgbe/t4_l2t.h#1 branch .. //depot/projects/pci/sys/dev/cxgbe/t4_main.c#4 integrate .. //depot/projects/pci/sys/dev/cxgbe/t4_sge.c#4 integrate .. //depot/projects/pci/sys/dev/dc/dcphy.c#2 integrate .. //depot/projects/pci/sys/dev/dc/pnphy.c#2 integrate .. //depot/projects/pci/sys/dev/e1000/if_em.c#3 integrate .. //depot/projects/pci/sys/dev/e1000/if_igb.c#4 integrate .. //depot/projects/pci/sys/dev/e1000/if_igb.h#4 integrate .. //depot/projects/pci/sys/dev/ed/if_ed_pccard.c#2 integrate .. //depot/projects/pci/sys/dev/et/if_et.c#3 integrate .. //depot/projects/pci/sys/dev/fxp/if_fxp.c#3 integrate .. //depot/projects/pci/sys/dev/gem/if_gem.c#3 integrate .. //depot/projects/pci/sys/dev/glxiic/glxiic.c#1 branch .. //depot/projects/pci/sys/dev/hme/if_hme.c#3 integrate .. //depot/projects/pci/sys/dev/hwpmc/hwpmc_mod.c#2 integrate .. //depot/projects/pci/sys/dev/ichsmb/ichsmb_pci.c#2 integrate .. //depot/projects/pci/sys/dev/ichwd/ichwd.c#3 integrate .. //depot/projects/pci/sys/dev/ichwd/ichwd.h#3 integrate .. //depot/projects/pci/sys/dev/iicbus/ad7417.c#1 branch .. //depot/projects/pci/sys/dev/iicbus/ds1775.c#2 integrate .. //depot/projects/pci/sys/dev/iicbus/max6690.c#2 integrate .. //depot/projects/pci/sys/dev/ipw/if_ipw.c#2 integrate .. //depot/projects/pci/sys/dev/iwi/if_iwi.c#2 integrate .. //depot/projects/pci/sys/dev/iwn/if_iwn.c#4 integrate .. //depot/projects/pci/sys/dev/iwn/if_iwnreg.h#3 integrate .. //depot/projects/pci/sys/dev/iwn/if_iwnvar.h#3 integrate .. //depot/projects/pci/sys/dev/ixgbe/LICENSE#2 integrate .. //depot/projects/pci/sys/dev/ixgbe/README#2 integrate .. //depot/projects/pci/sys/dev/ixgbe/ixgbe.c#3 integrate .. //depot/projects/pci/sys/dev/ixgbe/ixv.c#3 integrate .. //depot/projects/pci/sys/dev/jme/if_jme.c#3 integrate .. //depot/projects/pci/sys/dev/lge/if_lge.c#2 integrate .. //depot/projects/pci/sys/dev/md/md.c#3 integrate .. //depot/projects/pci/sys/dev/mfi/mfi.c#2 integrate .. //depot/projects/pci/sys/dev/mfi/mfireg.h#2 integrate .. //depot/projects/pci/sys/dev/mii/acphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/amphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/atphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/axphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/bmtphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/brgphy.c#3 integrate .. //depot/projects/pci/sys/dev/mii/ciphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/e1000phy.c#3 integrate .. //depot/projects/pci/sys/dev/mii/exphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/gentbi.c#2 integrate .. //depot/projects/pci/sys/dev/mii/icsphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/inphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/ip1000phy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/jmphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/lxtphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/mii.c#2 integrate .. //depot/projects/pci/sys/dev/mii/mii.h#2 integrate .. //depot/projects/pci/sys/dev/mii/mii_physubr.c#3 integrate .. //depot/projects/pci/sys/dev/mii/miidevs#3 integrate .. //depot/projects/pci/sys/dev/mii/miivar.h#3 integrate .. //depot/projects/pci/sys/dev/mii/mlphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/nsgphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/nsphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/nsphyter.c#2 integrate .. //depot/projects/pci/sys/dev/mii/pnaphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/qsphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/rdcphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/rgephy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/rlphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/rlswitch.c#2 integrate .. //depot/projects/pci/sys/dev/mii/ruephy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/smcphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/tdkphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/tlphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/truephy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/ukphy.c#2 integrate .. //depot/projects/pci/sys/dev/mii/xmphy.c#2 integrate .. //depot/projects/pci/sys/dev/mk48txx/mk48txx.c#2 integrate .. //depot/projects/pci/sys/dev/mk48txx/mk48txxreg.h#2 integrate .. //depot/projects/pci/sys/dev/mmc/mmc.c#2 integrate .. //depot/projects/pci/sys/dev/mmc/mmcvar.h#2 integrate .. //depot/projects/pci/sys/dev/msk/if_msk.c#4 integrate .. //depot/projects/pci/sys/dev/msk/if_mskreg.h#2 integrate .. //depot/projects/pci/sys/dev/mvs/mvs.c#3 integrate .. //depot/projects/pci/sys/dev/nfe/if_nfe.c#3 integrate .. //depot/projects/pci/sys/dev/nge/if_nge.c#3 integrate .. //depot/projects/pci/sys/dev/null/null.c#2 integrate .. //depot/projects/pci/sys/dev/nve/if_nve.c#2 integrate .. //depot/projects/pci/sys/dev/pccard/pccard.c#2 integrate .. //depot/projects/pci/sys/dev/pci/isa_pci.c#2 integrate .. //depot/projects/pci/sys/dev/pci/pci.c#20 integrate .. //depot/projects/pci/sys/dev/pci/pci_pci.c#23 integrate .. //depot/projects/pci/sys/dev/pci/pcireg.h#4 integrate .. //depot/projects/pci/sys/dev/pcn/if_pcn.c#2 integrate .. //depot/projects/pci/sys/dev/puc/puc.c#2 integrate .. //depot/projects/pci/sys/dev/puc/puc_bfe.h#2 integrate .. //depot/projects/pci/sys/dev/puc/puc_pccard.c#2 integrate .. //depot/projects/pci/sys/dev/puc/puc_pci.c#2 integrate .. //depot/projects/pci/sys/dev/puc/pucdata.c#3 integrate .. //depot/projects/pci/sys/dev/safe/safe.c#2 integrate .. //depot/projects/pci/sys/dev/scc/scc_bfe_ebus.c#2 integrate .. //depot/projects/pci/sys/dev/sdhci/sdhci.c#2 integrate .. //depot/projects/pci/sys/dev/sf/if_sf.c#2 integrate .. //depot/projects/pci/sys/dev/sge/if_sge.c#2 integrate .. //depot/projects/pci/sys/dev/siis/siis.c#3 integrate .. //depot/projects/pci/sys/dev/sis/if_sis.c#3 integrate .. //depot/projects/pci/sys/dev/sound/pci/hda/hdac.c#2 integrate .. //depot/projects/pci/sys/dev/sound/pcm/dsp.c#3 integrate .. //depot/projects/pci/sys/dev/sound/pcm/sound.c#2 integrate .. //depot/projects/pci/sys/dev/sound/usb/uaudio.c#3 integrate .. //depot/projects/pci/sys/dev/ste/if_ste.c#3 integrate .. //depot/projects/pci/sys/dev/syscons/syscons.c#2 integrate .. //depot/projects/pci/sys/dev/syscons/syscons.h#2 integrate .. //depot/projects/pci/sys/dev/tx/if_tx.c#2 integrate .. //depot/projects/pci/sys/dev/uart/uart_cpu_sparc64.c#2 integrate .. //depot/projects/pci/sys/dev/uart/uart_dev_ns8250.c#2 integrate .. //depot/projects/pci/sys/dev/usb/controller/xhci_pci.c#2 integrate .. //depot/projects/pci/sys/dev/usb/controller/xhcireg.h#2 integrate .. //depot/projects/pci/sys/dev/usb/input/uhid.c#2 integrate .. //depot/projects/pci/sys/dev/usb/input/ukbd.c#2 integrate .. //depot/projects/pci/sys/dev/usb/input/ums.c#3 integrate .. //depot/projects/pci/sys/dev/usb/net/if_aue.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_axe.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_rue.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_udav.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/umcs.c#1 branch .. //depot/projects/pci/sys/dev/usb/serial/umcs.h#1 branch .. //depot/projects/pci/sys/dev/usb/storage/umass.c#3 integrate .. //depot/projects/pci/sys/dev/usb/storage/ustorage_fs.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_device.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_device.h#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_freebsd.h#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_generic.c#3 integrate .. //depot/projects/pci/sys/dev/usb/usb_hub.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_process.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_request.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_request.h#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_transfer.c#3 integrate .. //depot/projects/pci/sys/dev/usb/usbdevs#3 integrate .. //depot/projects/pci/sys/dev/usb/usbdi.h#3 integrate .. //depot/projects/pci/sys/dev/vge/if_vge.c#3 integrate .. //depot/projects/pci/sys/dev/vr/if_vr.c#3 integrate .. //depot/projects/pci/sys/dev/vte/if_vte.c#3 integrate .. //depot/projects/pci/sys/dev/wb/if_wb.c#2 integrate .. //depot/projects/pci/sys/dev/wpi/if_wpi.c#3 integrate .. //depot/projects/pci/sys/dev/xen/balloon/balloon.c#2 integrate .. //depot/projects/pci/sys/dev/xen/blkback/blkback.c#2 integrate .. //depot/projects/pci/sys/dev/xen/blkfront/blkfront.c#2 integrate .. //depot/projects/pci/sys/dev/xen/control/control.c#2 integrate .. //depot/projects/pci/sys/dev/xen/netfront/netfront.c#3 integrate .. //depot/projects/pci/sys/dev/xl/if_xl.c#3 integrate .. //depot/projects/pci/sys/dev/xl/if_xlreg.h#2 integrate .. //depot/projects/pci/sys/fs/cd9660/cd9660_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/ext2fs/ext2_lookup.c#3 integrate .. //depot/projects/pci/sys/fs/ext2fs/ext2_vfsops.c#3 integrate .. //depot/projects/pci/sys/fs/hpfs/hpfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/msdosfs/msdosfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/nfs/nfs.h#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfs_commonkrpc.c#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfs_commonport.c#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfs_commonsubs.c#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfs_var.h#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfsproto.h#2 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clbio.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clcomsubs.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clkrpc.c#2 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clnfsiod.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clport.c#4 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clrpcops.c#4 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clstate.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clsubs.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clvfsops.c#3 integrate .. //depot/projects/pci/sys/fs/nfsclient/nfs_clvnops.c#3 integrate .. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdkrpc.c#2 integrate .. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdport.c#3 integrate .. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdsocket.c#2 integrate .. //depot/projects/pci/sys/fs/nfsserver/nfs_nfsdstate.c#3 integrate .. //depot/projects/pci/sys/fs/ntfs/ntfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/nullfs/null_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/nwfs/nwfs_io.c#2 integrate .. //depot/projects/pci/sys/fs/smbfs/smbfs_io.c#2 integrate .. //depot/projects/pci/sys/fs/tmpfs/tmpfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/udf/udf_vfsops.c#2 integrate .. //depot/projects/pci/sys/fs/unionfs/union_vfsops.c#2 integrate .. //depot/projects/pci/sys/geom/cache/g_cache.c#2 integrate .. //depot/projects/pci/sys/geom/concat/g_concat.c#3 integrate .. //depot/projects/pci/sys/geom/eli/g_eli.c#4 integrate .. //depot/projects/pci/sys/geom/eli/g_eli.h#3 integrate .. //depot/projects/pci/sys/geom/eli/g_eli_ctl.c#3 integrate .. //depot/projects/pci/sys/geom/eli/g_eli_integrity.c#3 integrate .. //depot/projects/pci/sys/geom/eli/g_eli_key_cache.c#2 integrate .. //depot/projects/pci/sys/geom/gate/g_gate.c#3 integrate .. //depot/projects/pci/sys/geom/geom.h#4 integrate .. //depot/projects/pci/sys/geom/geom_dev.c#4 integrate .. //depot/projects/pci/sys/geom/geom_disk.c#3 integrate .. //depot/projects/pci/sys/geom/geom_disk.h#2 integrate .. //depot/projects/pci/sys/geom/geom_dump.c#2 integrate .. //depot/projects/pci/sys/geom/geom_event.c#2 integrate .. //depot/projects/pci/sys/geom/geom_kern.c#2 integrate .. //depot/projects/pci/sys/geom/geom_map.c#2 integrate .. //depot/projects/pci/sys/geom/geom_subr.c#3 integrate .. //depot/projects/pci/sys/geom/journal/g_journal.c#3 integrate .. //depot/projects/pci/sys/geom/label/g_label.c#2 integrate .. //depot/projects/pci/sys/geom/mountver/g_mountver.c#2 integrate .. //depot/projects/pci/sys/geom/multipath/g_multipath.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part_apm.c#3 integrate .. //depot/projects/pci/sys/geom/part/g_part_bsd.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part_ebr.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part_mbr.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part_pc98.c#2 integrate .. //depot/projects/pci/sys/geom/part/g_part_vtoc8.c#2 integrate .. //depot/projects/pci/sys/geom/sched/g_sched.c#2 integrate .. //depot/projects/pci/sys/geom/shsec/g_shsec.c#3 integrate .. //depot/projects/pci/sys/geom/stripe/g_stripe.c#3 integrate .. //depot/projects/pci/sys/geom/vinum/geom_vinum_drive.c#2 integrate .. //depot/projects/pci/sys/geom/vinum/geom_vinum_events.c#2 integrate .. //depot/projects/pci/sys/gnu/fs/reiserfs/reiserfs_vfsops.c#2 integrate .. //depot/projects/pci/sys/gnu/fs/xfs/FreeBSD/support/kdb.c#2 integrate .. //depot/projects/pci/sys/gnu/fs/xfs/FreeBSD/xfs_mountops.c#2 integrate .. //depot/projects/pci/sys/i386/conf/GENERIC#4 integrate .. //depot/projects/pci/sys/i386/conf/NOTES#2 integrate .. //depot/projects/pci/sys/i386/i386/identcpu.c#4 integrate .. //depot/projects/pci/sys/i386/i386/intr_machdep.c#2 integrate .. //depot/projects/pci/sys/i386/i386/legacy.c#3 integrate .. //depot/projects/pci/sys/i386/i386/machdep.c#4 integrate .. //depot/projects/pci/sys/i386/i386/mp_machdep.c#2 integrate .. //depot/projects/pci/sys/i386/i386/pmap.c#3 integrate .. //depot/projects/pci/sys/i386/i386/vm_machdep.c#2 integrate .. //depot/projects/pci/sys/i386/include/_types.h#2 integrate .. //depot/projects/pci/sys/i386/include/clock.h#4 integrate .. //depot/projects/pci/sys/i386/include/pmap.h#3 integrate .. //depot/projects/pci/sys/i386/include/sf_buf.h#2 integrate .. //depot/projects/pci/sys/i386/include/smp.h#2 integrate .. //depot/projects/pci/sys/i386/include/specialreg.h#3 integrate .. //depot/projects/pci/sys/i386/include/vmparam.h#3 integrate .. //depot/projects/pci/sys/i386/include/xen/xenvar.h#2 integrate .. //depot/projects/pci/sys/i386/pci/pci_cfgreg.c#2 integrate .. //depot/projects/pci/sys/i386/xen/clock.c#2 integrate .. //depot/projects/pci/sys/i386/xen/mp_machdep.c#2 integrate .. //depot/projects/pci/sys/i386/xen/pmap.c#2 integrate .. //depot/projects/pci/sys/ia64/acpica/acpi_machdep.c#2 integrate .. //depot/projects/pci/sys/ia64/ia64/busdma_machdep.c#2 integrate .. //depot/projects/pci/sys/ia64/ia64/exception.S#4 integrate .. //depot/projects/pci/sys/ia64/ia64/machdep.c#4 integrate .. //depot/projects/pci/sys/ia64/ia64/mp_machdep.c#3 integrate .. //depot/projects/pci/sys/ia64/ia64/pal.S#3 integrate .. //depot/projects/pci/sys/ia64/ia64/pmap.c#4 integrate .. //depot/projects/pci/sys/ia64/ia64/syscall.S#2 integrate .. //depot/projects/pci/sys/ia64/include/_types.h#2 integrate .. //depot/projects/pci/sys/ia64/include/ia64_cpu.h#3 integrate .. //depot/projects/pci/sys/ia64/include/pcpu.h#2 integrate .. //depot/projects/pci/sys/ia64/include/smp.h#3 integrate .. //depot/projects/pci/sys/ia64/include/vmparam.h#5 integrate .. //depot/projects/pci/sys/ia64/isa/isa.c#2 integrate .. //depot/projects/pci/sys/isa/isa_common.c#2 integrate .. //depot/projects/pci/sys/isa/isa_common.h#2 integrate .. //depot/projects/pci/sys/isa/syscons_isa.c#2 integrate .. //depot/projects/pci/sys/kern/device_if.m#2 integrate .. //depot/projects/pci/sys/kern/imgact_aout.c#4 integrate .. //depot/projects/pci/sys/kern/kern_clocksource.c#2 integrate .. //depot/projects/pci/sys/kern/kern_conf.c#2 integrate .. //depot/projects/pci/sys/kern/kern_cpuset.c#3 integrate .. //depot/projects/pci/sys/kern/kern_descrip.c#4 integrate .. //depot/projects/pci/sys/kern/kern_environment.c#2 integrate .. //depot/projects/pci/sys/kern/kern_exit.c#4 integrate .. //depot/projects/pci/sys/kern/kern_idle.c#2 integrate .. //depot/projects/pci/sys/kern/kern_ktr.c#2 integrate .. //depot/projects/pci/sys/kern/kern_pmc.c#2 integrate .. //depot/projects/pci/sys/kern/kern_proc.c#3 integrate .. //depot/projects/pci/sys/kern/kern_racct.c#4 integrate .. //depot/projects/pci/sys/kern/kern_rctl.c#4 integrate .. //depot/projects/pci/sys/kern/kern_rmlock.c#2 integrate .. //depot/projects/pci/sys/kern/kern_shutdown.c#3 integrate .. //depot/projects/pci/sys/kern/kern_sig.c#4 integrate .. //depot/projects/pci/sys/kern/kern_synch.c#2 integrate .. //depot/projects/pci/sys/kern/kern_sysctl.c#3 integrate .. //depot/projects/pci/sys/kern/ksched.c#2 integrate .. //depot/projects/pci/sys/kern/link_elf.c#3 integrate .. //depot/projects/pci/sys/kern/sched_4bsd.c#4 integrate .. //depot/projects/pci/sys/kern/sched_ule.c#3 integrate .. //depot/projects/pci/sys/kern/subr_devstat.c#2 integrate .. //depot/projects/pci/sys/kern/subr_kdb.c#2 integrate .. //depot/projects/pci/sys/kern/subr_msgbuf.c#2 integrate .. //depot/projects/pci/sys/kern/subr_pcpu.c#2 integrate .. //depot/projects/pci/sys/kern/subr_prf.c#2 integrate .. //depot/projects/pci/sys/kern/subr_rman.c#9 integrate .. //depot/projects/pci/sys/kern/subr_sbuf.c#2 integrate .. //depot/projects/pci/sys/kern/subr_smp.c#2 integrate .. //depot/projects/pci/sys/kern/sys_process.c#2 integrate .. //depot/projects/pci/sys/kern/uipc_socket.c#2 integrate .. //depot/projects/pci/sys/kern/uipc_syscalls.c#3 integrate .. //depot/projects/pci/sys/kern/vfs_bio.c#2 integrate .. //depot/projects/pci/sys/kern/vfs_default.c#3 integrate .. //depot/projects/pci/sys/kern/vfs_mount.c#4 integrate .. //depot/projects/pci/sys/kern/vfs_subr.c#4 integrate .. //depot/projects/pci/sys/kern/vfs_syscalls.c#4 integrate .. //depot/projects/pci/sys/kern/vfs_vnops.c#2 integrate .. //depot/projects/pci/sys/kern/vnode_if.src#3 integrate .. //depot/projects/pci/sys/mips/atheros/ar71xx_gpio.c#2 integrate .. //depot/projects/pci/sys/mips/atheros/ar71xx_gpiovar.h#2 integrate .. //depot/projects/pci/sys/mips/atheros/ar724xreg.h#4 integrate .. //depot/projects/pci/sys/mips/atheros/ar91xxreg.h#2 integrate .. //depot/projects/pci/sys/mips/atheros/if_arge.c#4 integrate .. //depot/projects/pci/sys/mips/cavium/octe/octe.c#2 integrate .. //depot/projects/pci/sys/mips/cavium/octeon_ebt3000_cf.c#2 integrate .. //depot/projects/pci/sys/mips/cavium/octeon_mp.c#2 integrate .. //depot/projects/pci/sys/mips/conf/ADM5120#2 integrate .. //depot/projects/pci/sys/mips/conf/ALCHEMY#2 integrate .. //depot/projects/pci/sys/mips/conf/AR71XX#4 integrate .. //depot/projects/pci/sys/mips/conf/AR91XX_BASE#3 integrate .. //depot/projects/pci/sys/mips/conf/IDT#3 integrate .. //depot/projects/pci/sys/mips/conf/MALTA#3 integrate .. //depot/projects/pci/sys/mips/conf/MALTA64#3 integrate .. //depot/projects/pci/sys/mips/conf/OCTEON1#4 integrate .. //depot/projects/pci/sys/mips/conf/PB92#2 integrate .. //depot/projects/pci/sys/mips/conf/PB92.hints#2 integrate .. //depot/projects/pci/sys/mips/conf/QEMU#2 integrate .. //depot/projects/pci/sys/mips/conf/RT305X#2 integrate .. //depot/projects/pci/sys/mips/conf/SENTRY5#3 integrate .. //depot/projects/pci/sys/mips/conf/XLR#2 integrate .. //depot/projects/pci/sys/mips/conf/XLR64#2 integrate .. //depot/projects/pci/sys/mips/conf/XLRN32#2 integrate .. //depot/projects/pci/sys/mips/conf/std.SWARM#3 integrate .. //depot/projects/pci/sys/mips/idt/if_kr.c#2 integrate .. //depot/projects/pci/sys/mips/include/_types.h#2 integrate .. //depot/projects/pci/sys/mips/include/atomic.h#2 integrate .. //depot/projects/pci/sys/mips/include/hwfunc.h#2 integrate .. //depot/projects/pci/sys/mips/include/pmap.h#2 integrate .. //depot/projects/pci/sys/mips/include/smp.h#2 integrate .. //depot/projects/pci/sys/mips/include/vmparam.h#2 integrate .. //depot/projects/pci/sys/mips/mips/mp_machdep.c#2 integrate .. //depot/projects/pci/sys/mips/mips/pmap.c#2 integrate .. //depot/projects/pci/sys/mips/rmi/xlr_machdep.c#2 integrate .. //depot/projects/pci/sys/mips/sibyte/sb_scd.c#2 integrate .. //depot/projects/pci/sys/modules/Makefile#4 integrate .. //depot/projects/pci/sys/modules/ath/Makefile#4 integrate .. //depot/projects/pci/sys/modules/cxgbe/if_cxgbe/Makefile#2 integrate .. //depot/projects/pci/sys/modules/glxiic/Makefile#1 branch .. //depot/projects/pci/sys/modules/mem/Makefile#2 integrate .. //depot/projects/pci/sys/modules/mii/Makefile#2 integrate .. //depot/projects/pci/sys/modules/uart/Makefile#2 integrate .. //depot/projects/pci/sys/modules/usb/Makefile#2 integrate .. //depot/projects/pci/sys/modules/usb/umcs/Makefile#1 branch .. //depot/projects/pci/sys/modules/wlan/Makefile#2 integrate .. //depot/projects/pci/sys/net/bridgestp.c#2 integrate .. //depot/projects/pci/sys/net/bridgestp.h#2 integrate .. //depot/projects/pci/sys/net/if.h#2 integrate .. //depot/projects/pci/sys/net/if_epair.c#2 integrate .. //depot/projects/pci/sys/net/if_ethersubr.c#2 integrate .. //depot/projects/pci/sys/net/if_llatbl.c#2 integrate .. //depot/projects/pci/sys/net/if_llatbl.h#3 integrate .. //depot/projects/pci/sys/net/if_media.h#2 integrate .. //depot/projects/pci/sys/net/if_tun.c#2 integrate .. //depot/projects/pci/sys/net/netisr.c#2 integrate .. //depot/projects/pci/sys/net/netisr.h#2 integrate .. //depot/projects/pci/sys/net/netisr_internal.h#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_acl.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_adhoc.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_alq.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_hostap.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_ht.c#3 integrate .. //depot/projects/pci/sys/net80211/ieee80211_input.h#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_ioctl.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_ioctl.h#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_mesh.c#2 integrate .. //depot/projects/pci/sys/net80211/ieee80211_output.c#4 integrate .. //depot/projects/pci/sys/net80211/ieee80211_sta.c#3 integrate .. //depot/projects/pci/sys/net80211/ieee80211_var.h#3 integrate .. //depot/projects/pci/sys/net80211/ieee80211_wds.c#2 integrate .. //depot/projects/pci/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#2 integrate .. //depot/projects/pci/sys/netgraph/ng_eiface.c#3 integrate .. //depot/projects/pci/sys/netgraph/ng_nat.c#3 integrate .. //depot/projects/pci/sys/netgraph/ng_pipe.c#3 integrate .. //depot/projects/pci/sys/netinet/icmp6.h#2 integrate .. //depot/projects/pci/sys/netinet/in.c#3 integrate .. //depot/projects/pci/sys/netinet/in_pcb.c#4 integrate .. //depot/projects/pci/sys/netinet/in_pcb.h#4 integrate .. //depot/projects/pci/sys/netinet/in_pcbgroup.c#1 branch .. //depot/projects/pci/sys/netinet/in_proto.c#3 integrate .. //depot/projects/pci/sys/netinet/in_var.h#2 integrate .. //depot/projects/pci/sys/netinet/ip_divert.c#2 integrate .. //depot/projects/pci/sys/netinet/ip_input.c#3 integrate .. //depot/projects/pci/sys/netinet/ip_ipsec.c#2 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_dn_glue.c#3 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_dummynet.c#4 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_fw2.c#4 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_fw_dynamic.c#2 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_fw_nat.c#3 integrate .. //depot/projects/pci/sys/netinet/ipfw/ip_fw_sockopt.c#2 integrate .. //depot/projects/pci/sys/netinet/libalias/alias.h#2 integrate .. //depot/projects/pci/sys/netinet/libalias/alias_sctp.h#2 integrate .. //depot/projects/pci/sys/netinet/raw_ip.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp.h#3 integrate .. //depot/projects/pci/sys/netinet/sctp_asconf.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp_auth.c#2 integrate .. //depot/projects/pci/sys/netinet/sctp_auth.h#2 integrate .. //depot/projects/pci/sys/netinet/sctp_cc_functions.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp_indata.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp_indata.h#2 integrate .. //depot/projects/pci/sys/netinet/sctp_input.c#4 integrate .. //depot/projects/pci/sys/netinet/sctp_input.h#2 integrate .. //depot/projects/pci/sys/netinet/sctp_output.c#4 integrate .. //depot/projects/pci/sys/netinet/sctp_output.h#2 integrate .. //depot/projects/pci/sys/netinet/sctp_pcb.c#4 integrate .. //depot/projects/pci/sys/netinet/sctp_structs.h#3 integrate .. //depot/projects/pci/sys/netinet/sctp_sysctl.h#3 integrate .. //depot/projects/pci/sys/netinet/sctp_timer.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp_uio.h#2 integrate .. //depot/projects/pci/sys/netinet/sctp_usrreq.c#3 integrate .. //depot/projects/pci/sys/netinet/sctp_var.h#3 integrate .. //depot/projects/pci/sys/netinet/sctputil.c#5 integrate .. //depot/projects/pci/sys/netinet/sctputil.h#3 integrate .. //depot/projects/pci/sys/netinet/siftr.c#3 integrate .. //depot/projects/pci/sys/netinet/tcp_input.c#5 integrate .. //depot/projects/pci/sys/netinet/tcp_output.c#4 integrate .. //depot/projects/pci/sys/netinet/tcp_subr.c#3 integrate .. //depot/projects/pci/sys/netinet/tcp_syncache.c#3 integrate .. //depot/projects/pci/sys/netinet/tcp_timer.c#3 integrate .. //depot/projects/pci/sys/netinet/tcp_timewait.c#4 integrate .. //depot/projects/pci/sys/netinet/tcp_usrreq.c#3 integrate .. //depot/projects/pci/sys/netinet/udp_usrreq.c#3 integrate .. //depot/projects/pci/sys/netinet6/in6.c#3 integrate .. //depot/projects/pci/sys/netinet6/in6.h#3 integrate .. //depot/projects/pci/sys/netinet6/in6_pcb.c#4 integrate .. //depot/projects/pci/sys/netinet6/in6_pcb.h#2 integrate .. //depot/projects/pci/sys/netinet6/in6_pcbgroup.c#1 branch .. //depot/projects/pci/sys/netinet6/in6_proto.c#3 integrate .. //depot/projects/pci/sys/netinet6/in6_src.c#3 integrate .. //depot/projects/pci/sys/netinet6/ip6_input.c#2 integrate .. //depot/projects/pci/sys/netinet6/ip6_ipsec.c#3 integrate .. //depot/projects/pci/sys/netinet6/ip6_var.h#2 integrate .. //depot/projects/pci/sys/netinet6/nd6.c#3 integrate .. //depot/projects/pci/sys/netinet6/nd6.h#2 integrate .. //depot/projects/pci/sys/netinet6/nd6_nbr.c#4 integrate .. //depot/projects/pci/sys/netinet6/nd6_rtr.c#2 integrate .. //depot/projects/pci/sys/netinet6/sctp6_usrreq.c#3 integrate .. //depot/projects/pci/sys/netinet6/send.h#2 integrate .. //depot/projects/pci/sys/netinet6/udp6_usrreq.c#4 integrate .. //depot/projects/pci/sys/netipsec/key.c#4 integrate .. //depot/projects/pci/sys/nfs/nfs_common.c#2 integrate .. //depot/projects/pci/sys/nfs/nfs_diskless.c#2 integrate .. //depot/projects/pci/sys/nfs/nfs_kdtrace.h#1 branch .. //depot/projects/pci/sys/nfs/nfs_nfssvc.c#2 integrate .. //depot/projects/pci/sys/nfs/nfssvc.h#3 integrate .. //depot/projects/pci/sys/nfsclient/nfs.h#2 integrate .. //depot/projects/pci/sys/nfsclient/nfs_bio.c#2 integrate .. //depot/projects/pci/sys/nfsclient/nfs_kdtrace.c#2 integrate .. //depot/projects/pci/sys/nfsclient/nfs_kdtrace.h#2 delete .. //depot/projects/pci/sys/nfsclient/nfs_krpc.c#2 integrate .. //depot/projects/pci/sys/nfsclient/nfs_nfsiod.c#2 integrate .. //depot/projects/pci/sys/nfsclient/nfs_subs.c#3 integrate .. //depot/projects/pci/sys/nfsclient/nfs_vfsops.c#3 integrate .. //depot/projects/pci/sys/nfsclient/nfs_vnops.c#2 integrate .. //depot/projects/pci/sys/nfsclient/nfsargs.h#3 integrate .. //depot/projects/pci/sys/nfsserver/nfs_srvsubs.c#2 integrate .. //depot/projects/pci/sys/nlm/nlm_prot_impl.c#2 integrate .. //depot/projects/pci/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c#2 integrate .. //depot/projects/pci/sys/ofed/include/linux/list.h#2 integrate .. //depot/projects/pci/sys/pc98/cbus/syscons_cbus.c#2 integrate .. //depot/projects/pci/sys/pc98/conf/GENERIC#4 integrate .. //depot/projects/pci/sys/pc98/pc98/machdep.c#4 integrate .. //depot/projects/pci/sys/powerpc/aim/interrupt.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/locore32.S#2 integrate .. //depot/projects/pci/sys/powerpc/aim/locore64.S#2 integrate .. //depot/projects/pci/sys/powerpc/aim/machdep.c#4 integrate .. //depot/projects/pci/sys/powerpc/aim/mmu_oea.c#3 integrate .. //depot/projects/pci/sys/powerpc/aim/mmu_oea64.c#3 integrate .. //depot/projects/pci/sys/powerpc/aim/moea64_native.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/mp_cpudep.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/ofwmagic.S#2 delete .. //depot/projects/pci/sys/powerpc/aim/slb.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/trap_subr64.S#2 integrate .. //depot/projects/pci/sys/powerpc/booke/locore.S#2 integrate .. //depot/projects/pci/sys/powerpc/booke/machdep.c#2 integrate .. //depot/projects/pci/sys/powerpc/booke/platform_bare.c#2 integrate .. //depot/projects/pci/sys/powerpc/booke/pmap.c#2 integrate .. //depot/projects/pci/sys/powerpc/conf/GENERIC#3 integrate .. //depot/projects/pci/sys/powerpc/conf/GENERIC64#3 integrate .. //depot/projects/pci/sys/powerpc/conf/NOTES#2 integrate .. //depot/projects/pci/sys/powerpc/include/_types.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/atomic.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/openpicvar.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/param.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/pmap.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/rtas.h#1 branch .. //depot/projects/pci/sys/powerpc/include/slb.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/smp.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/spr.h#2 integrate .. //depot/projects/pci/sys/powerpc/include/vmparam.h#2 integrate .. //depot/projects/pci/sys/powerpc/mpc85xx/isa.c#2 integrate .. //depot/projects/pci/sys/powerpc/mpc85xx/mpc85xx.c#2 integrate .. //depot/projects/pci/sys/powerpc/mpc85xx/mpc85xx.h#2 integrate .. //depot/projects/pci/sys/powerpc/mpc85xx/openpic_fdt.c#2 integrate .. //depot/projects/pci/sys/powerpc/ofw/ofw_machdep.c#3 integrate .. //depot/projects/pci/sys/powerpc/ofw/ofw_real.c#2 integrate .. //depot/projects/pci/sys/powerpc/ofw/ofwcall32.S#1 branch .. //depot/projects/pci/sys/powerpc/ofw/ofwcall64.S#1 branch .. //depot/projects/pci/sys/powerpc/ofw/ofwmagic.S#1 branch .. //depot/projects/pci/sys/powerpc/ofw/rtas.c#1 branch .. //depot/projects/pci/sys/powerpc/powermac/fcu.c#2 integrate .. //depot/projects/pci/sys/powerpc/powermac/macio.c#2 integrate .. //depot/projects/pci/sys/powerpc/powermac/maciovar.h#2 integrate .. //depot/projects/pci/sys/powerpc/powermac/powermac_thermal.c#1 branch .. //depot/projects/pci/sys/powerpc/powermac/powermac_thermal.h#1 branch .. //depot/projects/pci/sys/powerpc/powermac/smu.c#3 integrate .. //depot/projects/pci/sys/powerpc/powermac/smusat.c#2 integrate .. //depot/projects/pci/sys/powerpc/powermac/windtunnel.c#1 branch .. //depot/projects/pci/sys/powerpc/powerpc/intr_machdep.c#2 integrate .. //depot/projects/pci/sys/powerpc/powerpc/mp_machdep.c#3 integrate .. //depot/projects/pci/sys/powerpc/powerpc/openpic.c#2 integrate .. //depot/projects/pci/sys/powerpc/powerpc/pic_if.m#2 integrate .. //depot/projects/pci/sys/powerpc/powerpc/platform.c#2 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3bus.c#2 integrate .. //depot/projects/pci/sys/sparc64/conf/GENERIC#4 integrate .. //depot/projects/pci/sys/sparc64/include/_types.h#2 integrate .. //depot/projects/pci/sys/sparc64/include/asmacros.h#2 integrate .. //depot/projects/pci/sys/sparc64/include/ktr.h#2 integrate .. //depot/projects/pci/sys/sparc64/include/pmap.h#2 integrate .. //depot/projects/pci/sys/sparc64/include/smp.h#2 integrate .. //depot/projects/pci/sys/sparc64/include/vmparam.h#3 integrate .. //depot/projects/pci/sys/sparc64/isa/isa.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/autoconf.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/eeprom.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/exception.S#3 integrate .. //depot/projects/pci/sys/sparc64/sparc64/genassym.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/intr_machdep.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/mem.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/mp_exception.S#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/mp_locore.S#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/mp_machdep.c#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/pmap.c#4 integrate .. //depot/projects/pci/sys/sparc64/sparc64/swtch.S#2 integrate .. //depot/projects/pci/sys/sparc64/sparc64/tlb.c#2 integrate .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_diff.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_findname.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_findnodeprop.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_fini.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_getbinsize.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_getgen.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_getpropdata.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_getpropstr.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_getpropval.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_init_intern.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_nodecount.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_rootnode.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/mdesc/mdesc_scandag.c#2 delete .. //depot/projects/pci/sys/sun4v/cddl/t1_copy.S#2 delete .. //depot/projects/pci/sys/sun4v/compile/.cvsignore#2 delete .. //depot/projects/pci/sys/sun4v/conf/.cvsignore#2 delete .. //depot/projects/pci/sys/sun4v/conf/DEFAULTS#2 delete .. //depot/projects/pci/sys/sun4v/conf/GENERIC#4 delete .. //depot/projects/pci/sys/sun4v/conf/GENERIC.hints#2 delete .. //depot/projects/pci/sys/sun4v/conf/Makefile#2 delete .. //depot/projects/pci/sys/sun4v/conf/NOTES#2 delete .. //depot/projects/pci/sys/sun4v/include/_align.h#2 delete .. //depot/projects/pci/sys/sun4v/include/_bus.h#2 delete .. //depot/projects/pci/sys/sun4v/include/_inttypes.h#3 delete .. //depot/projects/pci/sys/sun4v/include/_limits.h#2 delete .. //depot/projects/pci/sys/sun4v/include/_stdint.h#3 delete .. //depot/projects/pci/sys/sun4v/include/_types.h#2 delete .. //depot/projects/pci/sys/sun4v/include/asi.h#2 delete .. //depot/projects/pci/sys/sun4v/include/asm.h#2 delete .. //depot/projects/pci/sys/sun4v/include/asmacros.h#2 delete .. //depot/projects/pci/sys/sun4v/include/atomic.h#2 delete .. //depot/projects/pci/sys/sun4v/include/bus.h#3 delete .. //depot/projects/pci/sys/sun4v/include/bus_dma.h#3 delete .. //depot/projects/pci/sys/sun4v/include/bus_private.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ccr.h#2 delete .. //depot/projects/pci/sys/sun4v/include/cddl/mdesc.h#2 delete .. //depot/projects/pci/sys/sun4v/include/cddl/mdesc_impl.h#3 delete .. //depot/projects/pci/sys/sun4v/include/clock.h#2 delete .. //depot/projects/pci/sys/sun4v/include/cmt.h#2 delete .. //depot/projects/pci/sys/sun4v/include/cpu.h#2 delete .. //depot/projects/pci/sys/sun4v/include/cpufunc.h#3 delete .. //depot/projects/pci/sys/sun4v/include/db_machdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/elf.h#2 delete .. //depot/projects/pci/sys/sun4v/include/endian.h#2 delete .. //depot/projects/pci/sys/sun4v/include/exec.h#2 delete .. //depot/projects/pci/sys/sun4v/include/fireplane.h#2 delete .. //depot/projects/pci/sys/sun4v/include/float.h#2 delete .. //depot/projects/pci/sys/sun4v/include/floatingpoint.h#2 delete .. //depot/projects/pci/sys/sun4v/include/fp.h#2 delete .. //depot/projects/pci/sys/sun4v/include/frame.h#2 delete .. //depot/projects/pci/sys/sun4v/include/fsr.h#2 delete .. //depot/projects/pci/sys/sun4v/include/gdb_machdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/hv_api.h#2 delete .. //depot/projects/pci/sys/sun4v/include/hv_pcivar.h#2 delete .. //depot/projects/pci/sys/sun4v/include/hviommu.h#2 delete .. //depot/projects/pci/sys/sun4v/include/hypervisorvar.h#2 delete .. //depot/projects/pci/sys/sun4v/include/idprom.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ieee.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ieeefp.h#2 delete .. //depot/projects/pci/sys/sun4v/include/in_cksum.h#2 delete .. //depot/projects/pci/sys/sun4v/include/instr.h#2 delete .. //depot/projects/pci/sys/sun4v/include/intr_machdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/jbus.h#2 delete .. //depot/projects/pci/sys/sun4v/include/kdb.h#2 delete .. //depot/projects/pci/sys/sun4v/include/kerneldump.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ktr.h#2 delete .. //depot/projects/pci/sys/sun4v/include/limits.h#2 delete .. //depot/projects/pci/sys/sun4v/include/lsu.h#2 delete .. //depot/projects/pci/sys/sun4v/include/md_var.h#2 delete .. //depot/projects/pci/sys/sun4v/include/mdesc_bus.h#2 delete .. //depot/projects/pci/sys/sun4v/include/mdesc_bus_subr.h#2 delete .. //depot/projects/pci/sys/sun4v/include/memdev.h#2 delete .. //depot/projects/pci/sys/sun4v/include/metadata.h#2 delete .. //depot/projects/pci/sys/sun4v/include/mmu.h#2 delete .. //depot/projects/pci/sys/sun4v/include/nexusvar.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ofw_machdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ofw_mem.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ofw_nexus.h#3 delete .. //depot/projects/pci/sys/sun4v/include/param.h#2 delete .. //depot/projects/pci/sys/sun4v/include/pcb.h#2 delete .. //depot/projects/pci/sys/sun4v/include/pcpu.h#2 delete .. //depot/projects/pci/sys/sun4v/include/pmap.h#2 delete .. //depot/projects/pci/sys/sun4v/include/pmc_mdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/proc.h#2 delete .. //depot/projects/pci/sys/sun4v/include/profile.h#2 delete .. //depot/projects/pci/sys/sun4v/include/pstate.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ptrace.h#2 delete .. //depot/projects/pci/sys/sun4v/include/reg.h#2 delete .. //depot/projects/pci/sys/sun4v/include/reloc.h#2 delete .. //depot/projects/pci/sys/sun4v/include/resource.h#2 delete .. //depot/projects/pci/sys/sun4v/include/runq.h#2 delete .. //depot/projects/pci/sys/sun4v/include/sc_machdep.h#2 delete .. //depot/projects/pci/sys/sun4v/include/setjmp.h#2 delete .. //depot/projects/pci/sys/sun4v/include/sf_buf.h#2 delete .. //depot/projects/pci/sys/sun4v/include/sigframe.h#2 delete .. //depot/projects/pci/sys/sun4v/include/signal.h#2 delete .. //depot/projects/pci/sys/sun4v/include/smp.h#2 delete .. //depot/projects/pci/sys/sun4v/include/stack.h#2 delete .. //depot/projects/pci/sys/sun4v/include/stdarg.h#2 delete .. //depot/projects/pci/sys/sun4v/include/sun4v_cpufunc.h#2 delete .. //depot/projects/pci/sys/sun4v/include/sysarch.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tick.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tlb.h#2 delete .. //depot/projects/pci/sys/sun4v/include/trap.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tsb.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tstate.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tte.h#2 delete .. //depot/projects/pci/sys/sun4v/include/tte_hash.h#2 delete .. //depot/projects/pci/sys/sun4v/include/ucontext.h#2 delete .. //depot/projects/pci/sys/sun4v/include/upa.h#2 delete .. //depot/projects/pci/sys/sun4v/include/utrap.h#2 delete .. //depot/projects/pci/sys/sun4v/include/varargs.h#3 delete .. //depot/projects/pci/sys/sun4v/include/ver.h#2 delete .. //depot/projects/pci/sys/sun4v/include/vm.h#2 delete .. //depot/projects/pci/sys/sun4v/include/vmparam.h#3 delete .. //depot/projects/pci/sys/sun4v/include/watch.h#2 delete .. //depot/projects/pci/sys/sun4v/include/wstate.h#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_bus_if.m#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_bus_subr.c#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_init.c#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_subr.c#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_vdevfindnode.c#2 delete .. //depot/projects/pci/sys/sun4v/mdesc/mdesc_vdevfindval.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/bus_machdep.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/clock.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/db_hwwatch.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/db_interface.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/db_trace.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/dump_machdep.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/exception.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/hcall.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/hv_pci.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/hvcons.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/hviommu.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/interrupt.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/intr_machdep.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/locore.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/machdep.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/mp_exception.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/mp_locore.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/mp_machdep.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/nexus.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/pmap.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/rtc.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/simdisk.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/stack_machdep.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/support.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/swtch.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/tick.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/trap.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/trap_trace.S#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/tsb.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/tte.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/tte_hash.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/uio_machdep.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/vm_machdep.c#3 delete .. //depot/projects/pci/sys/sun4v/sun4v/vnex.c#2 delete .. //depot/projects/pci/sys/sun4v/sun4v/wbuf.S#2 delete .. //depot/projects/pci/sys/sys/_cpuset.h#1 branch .. //depot/projects/pci/sys/sys/_rmlock.h#2 integrate .. //depot/projects/pci/sys/sys/_stdint.h#1 branch .. //depot/projects/pci/sys/sys/conf.h#2 integrate .. //depot/projects/pci/sys/sys/cpuset.h#2 integrate .. //depot/projects/pci/sys/sys/disk.h#2 integrate .. //depot/projects/pci/sys/sys/dtrace_bsd.h#2 integrate .. //depot/projects/pci/sys/sys/elf_common.h#2 integrate .. //depot/projects/pci/sys/sys/kdb.h#2 integrate .. //depot/projects/pci/sys/sys/ktr.h#2 integrate .. //depot/projects/pci/sys/sys/mbuf.h#2 integrate .. //depot/projects/pci/sys/sys/mount.h#2 integrate .. //depot/projects/pci/sys/sys/msgbuf.h#2 integrate .. //depot/projects/pci/sys/sys/param.h#4 integrate .. //depot/projects/pci/sys/sys/pcpu.h#2 integrate .. //depot/projects/pci/sys/sys/pmckern.h#2 integrate .. //depot/projects/pci/sys/sys/priority.h#2 integrate .. //depot/projects/pci/sys/sys/proc.h#4 integrate .. //depot/projects/pci/sys/sys/queue.h#2 integrate .. //depot/projects/pci/sys/sys/racct.h#2 integrate .. //depot/projects/pci/sys/sys/sbuf.h#2 integrate .. //depot/projects/pci/sys/sys/smp.h#2 integrate .. //depot/projects/pci/sys/sys/soundcard.h#2 integrate .. //depot/projects/pci/sys/sys/stddef.h#2 integrate .. //depot/projects/pci/sys/sys/stdint.h#2 integrate .. //depot/projects/pci/sys/sys/systm.h#4 integrate .. //depot/projects/pci/sys/sys/types.h#2 integrate .. //depot/projects/pci/sys/sys/user.h#3 integrate .. //depot/projects/pci/sys/sys/vnode.h#3 integrate .. //depot/projects/pci/sys/teken/Makefile#2 delete .. //depot/projects/pci/sys/teken/demo/Makefile#1 branch .. //depot/projects/pci/sys/teken/demo/teken_demo.c#1 branch .. //depot/projects/pci/sys/teken/libteken/Makefile#1 branch .. //depot/projects/pci/sys/teken/libteken/Symbol.map#1 branch .. //depot/projects/pci/sys/teken/libteken/teken.3#1 branch .. //depot/projects/pci/sys/teken/stress/Makefile#1 branch .. //depot/projects/pci/sys/teken/stress/teken_stress.c#1 branch .. //depot/projects/pci/sys/teken/teken.c#2 integrate .. //depot/projects/pci/sys/teken/teken.h#2 integrate .. //depot/projects/pci/sys/teken/teken_demo.c#2 delete .. //depot/projects/pci/sys/teken/teken_stress.c#2 delete .. //depot/projects/pci/sys/ufs/ffs/ffs_alloc.c#4 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_balloc.c#2 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_extern.h#4 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_inode.c#2 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_snapshot.c#2 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_softdep.c#4 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_vfsops.c#3 integrate .. //depot/projects/pci/sys/ufs/ffs/ffs_vnops.c#3 integrate .. //depot/projects/pci/sys/ufs/ffs/fs.h#2 integrate .. //depot/projects/pci/sys/ufs/ffs/softdep.h#3 integrate .. //depot/projects/pci/sys/ufs/ufs/inode.h#2 integrate .. //depot/projects/pci/sys/ufs/ufs/quota.h#2 integrate .. //depot/projects/pci/sys/ufs/ufs/ufs_extern.h#3 integrate .. //depot/projects/pci/sys/ufs/ufs/ufs_lookup.c#3 integrate .. //depot/projects/pci/sys/ufs/ufs/ufs_quota.c#3 integrate .. //depot/projects/pci/sys/ufs/ufs/ufs_vfsops.c#2 integrate .. //depot/projects/pci/sys/ufs/ufs/ufs_vnops.c#2 integrate >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Fri Jun 17 22:21:59 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 80530106566C; Fri, 17 Jun 2011 22:21:59 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4148B106564A for ; Fri, 17 Jun 2011 22:21:59 +0000 (UTC) (envelope-from peter@wemm.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id E944A8FC12 for ; Fri, 17 Jun 2011 22:21:58 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5HMLwIu042440 for ; Fri, 17 Jun 2011 22:21:58 GMT (envelope-from peter@wemm.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5HMLtBm042436 for perforce@freebsd.org; Fri, 17 Jun 2011 22:21:55 GMT (envelope-from peter@wemm.org) Date: Fri, 17 Jun 2011 22:21:55 GMT Message-Id: <201106172221.p5HMLtBm042436@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to peter@wemm.org using -f From: Peter Wemm To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194892 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jun 2011 22:21:59 -0000 http://p4web.freebsd.org/@@194892?ac=10 Change 194892 by peter@peter_daintree on 2011/06/17 22:21:31 IFC @194891 Affected files ... .. //depot/projects/hammer/Makefile#63 integrate .. //depot/projects/hammer/Makefile.inc1#159 integrate .. //depot/projects/hammer/bin/ps/extern.h#16 integrate .. //depot/projects/hammer/bin/ps/keyword.c#24 integrate .. //depot/projects/hammer/bin/ps/print.c#27 integrate .. //depot/projects/hammer/bin/ps/ps.1#32 integrate .. //depot/projects/hammer/bin/sh/alias.c#12 integrate .. //depot/projects/hammer/bin/sh/alias.h#5 integrate .. //depot/projects/hammer/bin/sh/arith.h#8 integrate .. //depot/projects/hammer/bin/sh/bltin/bltin.h#5 integrate .. //depot/projects/hammer/bin/sh/cd.c#11 integrate .. //depot/projects/hammer/bin/sh/cd.h#4 integrate .. //depot/projects/hammer/bin/sh/eval.c#32 integrate .. //depot/projects/hammer/bin/sh/eval.h#7 integrate .. //depot/projects/hammer/bin/sh/exec.h#10 integrate .. //depot/projects/hammer/bin/sh/expand.c#26 integrate .. //depot/projects/hammer/bin/sh/expand.h#6 integrate .. //depot/projects/hammer/bin/sh/histedit.c#13 integrate .. //depot/projects/hammer/bin/sh/jobs.c#22 integrate .. //depot/projects/hammer/bin/sh/jobs.h#5 integrate .. //depot/projects/hammer/bin/sh/main.c#16 integrate .. //depot/projects/hammer/bin/sh/main.h#4 integrate .. //depot/projects/hammer/bin/sh/mkbuiltins#9 integrate .. //depot/projects/hammer/bin/sh/mktokens#5 integrate .. //depot/projects/hammer/bin/sh/myhistedit.h#5 integrate .. //depot/projects/hammer/bin/sh/nodetypes#4 integrate .. //depot/projects/hammer/bin/sh/options.c#14 integrate .. //depot/projects/hammer/bin/sh/options.h#4 integrate .. //depot/projects/hammer/bin/sh/parser.c#28 integrate .. //depot/projects/hammer/bin/sh/sh.1#41 integrate .. //depot/projects/hammer/bin/sh/trap.c#12 integrate .. //depot/projects/hammer/bin/sh/trap.h#6 integrate .. //depot/projects/hammer/bin/sh/var.c#23 integrate .. //depot/projects/hammer/bin/sh/var.h#10 integrate .. //depot/projects/hammer/contrib/gdb/gdb/ppcfbsd-tdep.c#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm-c/Core.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm-c/Disassembler.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/ADT/FoldingSet.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/ADT/PackedVector.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/ADT/StringRef.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/ADT/Triple.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/AliasAnalysis.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/BranchProbabilityInfo.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/CallGraph.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/DIBuilder.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/DebugInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/FindUsedTypes.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/IVUsers.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/RegionPass.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Analysis/ScalarEvolution.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Argument.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Attributes.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/CallingConvLower.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/FastISel.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/ISDOpcodes.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/LiveInterval.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/MachineInstr.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/MachineInstrBuilder.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/MachineOperand.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/PseudoSourceValue.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/RegAllocPBQP.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/ScheduleDAG.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/SelectionDAG.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/CompilerDriver/Common.td#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/DefaultPasses.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Function.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/InitializePasses.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/IntrinsicInst.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Intrinsics.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/IntrinsicsARM.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/IntrinsicsX86.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/IntrinsicsXCore.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/LinkAllPasses.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCAsmInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCDwarf.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCELFSymbolFlags.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCExpr.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCInstPrinter.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCParser/MCAsmLexer.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCParser/MCAsmParser.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCParser/MCAsmParserExtension.h#2 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCStreamer.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/MC/MCWin64EH.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/Metadata.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Operator.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/BranchProbability.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/Casting.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/CrashRecoveryContext.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/Dwarf.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/IRBuilder.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/MemoryBuffer.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/PassManagerBuilder.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/PatternMatch.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/Program.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/SourceMgr.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/StandardPasses.h#4 delete .. //depot/projects/hammer/contrib/llvm/include/llvm/Support/Win64EH.h#1 branch .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/Target.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetAsmInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetInstrItineraries.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetLibraryInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetLowering.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetLoweringObjectFile.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetOptions.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetRegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Target/TargetSelectionDAG.td#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Transforms/Instrumentation.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Transforms/Utils/Local.h#4 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Transforms/Utils/SSAUpdater.h#3 integrate .. //depot/projects/hammer/contrib/llvm/include/llvm/Type.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/Analysis.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/BasicAliasAnalysis.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/BranchProbabilityInfo.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/Analysis/ConstantFolding.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/DIBuilder.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/IPA/CallGraph.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/IPA/FindUsedTypes.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/IVUsers.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/InlineCost.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/InstructionSimplify.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/LazyValueInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/Loads.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/RegionPass.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/ScalarEvolution.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Analysis/ValueTracking.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/AsmParser/LLLexer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/AsmParser/LLLexer.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/AsmParser/LLParser.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/AsmParser/LLToken.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Bitcode/Reader/BitcodeReader.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Bitcode/Writer/ValueEnumerator.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AggressiveAntiDepBreaker.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AggressiveAntiDepBreaker.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AllocationOrder.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AllocationOrder.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AntiDepBreaker.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/ARMException.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfException.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfTableException.cpp#3 delete .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/AsmPrinter/Win64Exception.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/BranchFolding.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/BranchFolding.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/CalcSpillWeights.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/CallingConvLower.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/CriticalAntiDepBreaker.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/CriticalAntiDepBreaker.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/DwarfEHPrepare.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/IfConversion.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/InlineSpiller.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/LiveDebugVariables.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/LiveDebugVariables.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/LiveRangeEdit.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/LiveRangeEdit.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/MachineBasicBlock.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/MachineFunction.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/MachineInstr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/MachineRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/MachineVerifier.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/PostRASchedulerList.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegAllocBase.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegAllocBasic.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegAllocFast.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegAllocGreedy.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegisterClassInfo.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegisterClassInfo.h#1 branch .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/RegisterScavenging.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/ScheduleDAGInstrs.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SimpleRegisterCoalescing.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SjLjEHPrepare.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SplitKit.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/SplitKit.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/TailDuplication.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/TargetInstrInfoImpl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/TwoAddressInstructionPass.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/UnreachableBlockElim.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/CodeGen/VirtRegMap.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/ExecutionEngine.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/JIT/JIT.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/JIT/JIT.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp#4 delete .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/MCJIT/TargetSelect.cpp#2 delete .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/ExecutionEngine/TargetSelect.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/MC/ELFObjectWriter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/ELFObjectWriter.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCAsmInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCAsmInfoDarwin.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCAsmStreamer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCAssembler.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCDwarf.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCELF.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCELFStreamer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCExpr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCInstPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCMachOStreamer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCObjectStreamer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCParser/AsmLexer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCParser/AsmParser.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCParser/COFFAsmParser.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCParser/DarwinAsmParser.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCStreamer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/MC/MCWin64EH.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/MC/WinCOFFStreamer.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/APInt.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/BranchProbability.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/Support/Dwarf.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/FoldingSet.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/Host.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/MemoryBuffer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/SourceMgr.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/Unix/Host.inc#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/Unix/Program.inc#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Support/Windows/Program.inc#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMAsmBackend.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMAsmPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMAsmPrinter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMBaseRegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMCodeEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMFastISel.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMFixupKinds.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMISelLowering.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMInstrFormats.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMInstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMInstrNEON.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMInstrThumb.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMInstrThumb2.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMMCAsmInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMPerfectShuffle.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMRegisterInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMSelectionDAGInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/ARMSelectionDAGInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/Disassembler/ThumbDisassemblerCore.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Alpha/AlphaISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Alpha/AlphaISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Alpha/AlphaRegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Alpha/AlphaRegisterInfo.td#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinFrameLowering.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinFrameLowering.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinISelDAGToDAG.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinInstrInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinRegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Blackfin/BlackfinRegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CBackend/CBackend.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CellSPU/SPUISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CellSPU/SPUISelLowering.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CellSPU/SPURegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CellSPU/SPURegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/CellSPU/SPURegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeInstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeRegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeRegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MBlaze/MBlazeRegisterInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MSP430/MSP430ISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MSP430/MSP430RegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MSP430/MSP430RegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/MSP430/MSP430RegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/Mips.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsAsmPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsEmitGPRestore.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsFrameLowering.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsFrameLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsISelDAGToDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsISelLowering.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsInstrFPU.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsInstrFormats.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsInstrInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsInstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsMCAsmInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsMachineFunction.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsRegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsRegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsRegisterInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsTargetMachine.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Mips/MipsTargetMachine.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTX.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXISelLowering.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXInstrInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXRegisterInfo.h#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXSubtarget.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PTX/PTXSubtarget.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPC.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCHazardRecognizers.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCInstr64Bit.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCMCAsmInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Sparc/SparcISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Sparc/SparcISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Sparc/SparcRegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/Sparc/SparcRegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/SystemZ/SystemZISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/SystemZ/SystemZRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/SystemZ/SystemZRegisterInfo.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/TargetLibraryInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/TargetLoweringObjectFile.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/TargetMachine.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/TargetRegisterInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86FastISel.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86FrameLowering.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86ISelLowering.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrCompiler.td#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrExtension.td#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrFragmentsSIMD.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrMMX.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86InstrSSE.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86MCAsmInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86MCCodeEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86MCInstLower.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86RegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86RegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86RegisterInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/X86/X86Subtarget.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreISelDAGToDAG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreISelLowering.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreISelLowering.h#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreInstrInfo.td#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreRegisterInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Target/XCore/XCoreRegisterInfo.td#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/IPO/DeadTypeElimination.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/IPO/ExtractGV.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/IPO/GlobalOpt.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/IPO/PruneEH.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombine.h#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombinePHI.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Instrumentation/PathProfiling.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/GVN.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/JumpThreading.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/LICM.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/BuildLibCalls.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/InlineFunction.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/Local.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/SSAUpdater.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/Transforms/Utils/SimplifyCFG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/Attributes.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/AutoUpgrade.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/DebugInfoProbe.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/Function.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/IRBuilder.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/InlineAsm.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/Instructions.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/PassManager.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/Type.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/lib/VMCore/Verifier.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang-c/Index.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/APValue.h#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/CanonicalType.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/Decl.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/DeclBase.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/DeclCXX.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/DeclObjC.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/DeclTemplate.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/Expr.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/ExternalASTSource.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/RecursiveASTVisitor.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/StmtVisitor.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/Type.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/TypeLoc.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/AST/TypeNodes.def#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsARM.def#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsX86.def#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DeclNodes.td#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/Diagnostic.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticCommonKinds.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticFrontendKinds.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticIDs.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/ExceptionSpecificationType.h#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/IdentifierTable.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/SourceLocation.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/SourceManager.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/Specifiers.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/StmtNodes.td#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/TargetInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/TypeTraits.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Basic/arm_neon.td#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Driver/Options.td#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Driver/ToolChain.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/ASTUnit.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/CodeGenOptions.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/DiagnosticOptions.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/LangStandard.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/LangStandards.def#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/PreprocessorOptions.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Frontend/Utils.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Lex/HeaderSearch.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Lex/LiteralSupport.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Lex/PreprocessingRecord.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Lex/Preprocessor.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Parse/Parser.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/CodeCompleteConsumer.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Initialization.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Lookup.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Overload.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Scope.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Sema.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Sema/Template.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Serialization/ASTBitCodes.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Serialization/ASTReader.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Serialization/ASTWriter.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/Checker.h#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/GRState.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/include/clang/Tooling/Tooling.h#2 delete .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/APValue.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ASTDiagnostic.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ASTImporter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/Decl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DeclBase.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DeclCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DeclObjC.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DeclPrinter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DeclTemplate.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/DumpXML.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/Expr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ExprClassification.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ExternalASTSource.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/ItaniumMangle.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/Mangle.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/MicrosoftMangle.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/RecordLayoutBuilder.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/StmtPrinter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/StmtProfile.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/Type.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/AST/TypePrinter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Analysis/AnalysisContext.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Analysis/CFG.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Analysis/CocoaConventions.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Analysis/LiveVariables.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/Diagnostic.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/DiagnosticIDs.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/FileManager.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/IdentifierTable.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/SourceManager.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Basic/Targets.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGBlocks.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGBuiltin.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGCall.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGCall.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGClass.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGDecl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGDeclCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGException.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGExpr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGExprAgg.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGExprCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGExprConstant.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGObjC.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGObjCGNU.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGObjCMac.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGObjCRuntime.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGObjCRuntime.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGStmt.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGVTT.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CGVTables.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/CodeGenTypes.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/ItaniumCXXABI.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/ModuleBuilder.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/CodeGen/TargetInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/Driver.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/HostInfo.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/ToolChains.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/Tools.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Driver/Tools.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/ASTConsumers.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/ASTUnit.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/DiagChecker.cpp#3 delete .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/LogDiagnosticPrinter.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Frontend/Warnings.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Headers/emmintrin.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Headers/mmintrin.h#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Headers/xmmintrin.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Index/CallGraph.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Index/Indexer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/HeaderSearch.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/Lexer.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/LiteralSupport.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/MacroInfo.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/PPDirectives.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/PPMacroExpansion.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/Pragma.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/PreprocessingRecord.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Lex/Preprocessor.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseObjc.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParsePragma.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseStmt.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseTemplate.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/ParseTentative.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Parse/Parser.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Rewrite/RewriteObjC.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/AnalysisBasedWarnings.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/JumpDiagnostics.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/Sema.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaAccess.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaCXXCast.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaCXXScopeSpec.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaCodeComplete.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaDeclObjC.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaExceptionSpec.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaExprCXX.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaExprObjC.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaInit.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaOverload.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaStmt.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaTemplate.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaTemplateDeduction.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaTemplateVariadic.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h#4 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTReaderDecl.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTReaderStmt.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTWriterDecl.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Serialization/ASTWriterStmt.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Checkers/NSErrorChecker.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/BasicStore.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/BasicValueFactory.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/CFRefCount.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/CXXExprEngine.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/Environment.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/FlatStore.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/GRState.cpp#2 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/RegionStore.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Tooling/JsonCompileCommandLineDatabase.cpp#2 delete .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Tooling/JsonCompileCommandLineDatabase.h#2 delete .. //depot/projects/hammer/contrib/llvm/tools/clang/lib/Tooling/Tooling.cpp#2 delete .. //depot/projects/hammer/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/AsmMatcherEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/AsmWriterEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/ClangDiagnosticsEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/CodeGenIntrinsics.h#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/CodeGenRegisters.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/utils/TableGen/CodeGenRegisters.h#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/CodeGenTarget.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/CodeGenTarget.h#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/DAGISelMatcherGen.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/EDEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/FastISelEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/LLVMCConfigurationEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/NeonEmitter.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/Record.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/RegisterInfoEmitter.cpp#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/SetTheory.cpp#1 branch .. //depot/projects/hammer/contrib/llvm/utils/TableGen/SetTheory.h#1 branch .. //depot/projects/hammer/contrib/llvm/utils/TableGen/TGLexer.cpp#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/TGLexer.h#4 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/TGParser.h#3 integrate .. //depot/projects/hammer/contrib/llvm/utils/TableGen/TableGen.cpp#4 integrate .. //depot/projects/hammer/contrib/pf/pfctl/pfctl.8#6 integrate .. //depot/projects/hammer/contrib/pf/pfctl/pfctl.c#6 integrate .. //depot/projects/hammer/contrib/pf/pfctl/pfctl_optimize.c#3 integrate .. //depot/projects/hammer/contrib/pf/pfctl/pfctl_parser.c#8 integrate .. //depot/projects/hammer/contrib/pf/pfctl/pfctl_parser.h#6 integrate .. //depot/projects/hammer/contrib/sendmail/CACerts#4 integrate .. //depot/projects/hammer/contrib/sendmail/FREEBSD-upgrade#20 integrate .. //depot/projects/hammer/contrib/sendmail/KNOWNBUGS#7 integrate .. //depot/projects/hammer/contrib/sendmail/LICENSE#5 integrate .. //depot/projects/hammer/contrib/sendmail/PGPKEYS#11 integrate .. //depot/projects/hammer/contrib/sendmail/RELEASE_NOTES#17 integrate .. //depot/projects/hammer/contrib/sendmail/cf/cf/submit.cf#17 integrate .. //depot/projects/hammer/contrib/sendmail/cf/feature/ldap_routing.m4#5 integrate .. //depot/projects/hammer/contrib/sendmail/cf/m4/cfhead.m4#8 integrate .. //depot/projects/hammer/contrib/sendmail/cf/m4/proto.m4#15 integrate .. //depot/projects/hammer/contrib/sendmail/cf/m4/version.m4#17 integrate .. //depot/projects/hammer/contrib/sendmail/cf/ostype/solaris11.m4#1 branch .. //depot/projects/hammer/contrib/sendmail/contrib/qtool.pl#5 integrate .. //depot/projects/hammer/contrib/sendmail/doc/op/op.me#13 integrate .. //depot/projects/hammer/contrib/sendmail/include/sm/conf.h#14 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/docs/overview.html#6 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/docs/smfi_stop.html#4 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html#6 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/engine.c#14 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/sm_gethost.c#3 integrate .. //depot/projects/hammer/contrib/sendmail/libmilter/worker.c#4 integrate .. //depot/projects/hammer/contrib/sendmail/libsm/ldap.c#12 integrate .. //depot/projects/hammer/contrib/sendmail/makemap/makemap.c#8 integrate .. //depot/projects/hammer/contrib/sendmail/src/Makefile.m4#9 integrate .. //depot/projects/hammer/contrib/sendmail/src/conf.c#17 integrate .. //depot/projects/hammer/contrib/sendmail/src/daemon.c#13 integrate .. //depot/projects/hammer/contrib/sendmail/src/deliver.c#15 integrate .. //depot/projects/hammer/contrib/sendmail/src/domain.c#10 integrate .. //depot/projects/hammer/contrib/sendmail/src/envelope.c#11 integrate .. //depot/projects/hammer/contrib/sendmail/src/err.c#7 integrate .. //depot/projects/hammer/contrib/sendmail/src/main.c#15 integrate .. //depot/projects/hammer/contrib/sendmail/src/map.c#13 integrate .. //depot/projects/hammer/contrib/sendmail/src/mci.c#12 integrate .. //depot/projects/hammer/contrib/sendmail/src/parseaddr.c#14 integrate .. //depot/projects/hammer/contrib/sendmail/src/queue.c#17 integrate .. //depot/projects/hammer/contrib/sendmail/src/readcf.c#14 integrate .. //depot/projects/hammer/contrib/sendmail/src/sendmail.8#8 integrate .. //depot/projects/hammer/contrib/sendmail/src/sendmail.h#17 integrate .. //depot/projects/hammer/contrib/sendmail/src/sm_resolve.c#8 integrate .. //depot/projects/hammer/contrib/sendmail/src/srvrsmtp.c#17 integrate .. //depot/projects/hammer/contrib/sendmail/src/tls.c#12 integrate .. //depot/projects/hammer/contrib/sendmail/src/udb.c#7 integrate .. //depot/projects/hammer/contrib/sendmail/src/usersmtp.c#14 integrate .. //depot/projects/hammer/contrib/sendmail/src/version.c#17 integrate .. //depot/projects/hammer/etc/periodic/daily/800.scrub-zfs#4 integrate .. //depot/projects/hammer/etc/periodic/monthly/Makefile#3 integrate .. //depot/projects/hammer/etc/sendmail/freebsd.mc#14 integrate .. //depot/projects/hammer/etc/sendmail/freebsd.submit.mc#9 integrate .. //depot/projects/hammer/lib/clang/include/clang/Basic/Version.inc#3 integrate .. //depot/projects/hammer/lib/clang/libclangfrontend/Makefile#4 integrate .. //depot/projects/hammer/lib/clang/libllvmasmprinter/Makefile#4 integrate .. //depot/projects/hammer/lib/clang/libllvmcodegen/Makefile#4 integrate .. //depot/projects/hammer/lib/clang/libllvmmc/Makefile#4 integrate .. //depot/projects/hammer/lib/clang/libllvmmipscodegen/Makefile#4 integrate .. //depot/projects/hammer/lib/libc/gen/posix_spawn.3#3 integrate .. //depot/projects/hammer/lib/libc/gen/sysconf.c#11 integrate .. //depot/projects/hammer/lib/libc/net/sctp_sys_calls.c#13 integrate .. //depot/projects/hammer/lib/libstand/Makefile#28 integrate .. //depot/projects/hammer/lib/libstand/net.c#6 integrate .. //depot/projects/hammer/lib/libstand/tftp.c#7 integrate .. //depot/projects/hammer/lib/libstand/zalloc.c#3 integrate .. //depot/projects/hammer/lib/libstand/zalloc_malloc.c#5 integrate .. //depot/projects/hammer/libexec/tftpd/tftpd.8#10 integrate .. //depot/projects/hammer/release/Makefile#116 integrate .. //depot/projects/hammer/release/doc/en_US.ISO8859-1/relnotes/article.sgml#46 integrate .. //depot/projects/hammer/release/powerpc/mkisoimages.sh#4 integrate .. //depot/projects/hammer/sbin/camcontrol/camcontrol.c#22 integrate .. //depot/projects/hammer/sbin/geom/class/part/geom_part.c#17 integrate .. //depot/projects/hammer/sbin/hastd/primary.c#6 integrate .. //depot/projects/hammer/sbin/hastd/proto_common.c#6 integrate .. //depot/projects/hammer/sbin/hastd/secondary.c#6 integrate .. //depot/projects/hammer/sbin/ifconfig/ifconfig.c#52 integrate .. //depot/projects/hammer/sbin/ipfw/ipfw.8#80 integrate .. //depot/projects/hammer/sbin/ipfw/ipfw2.c#79 integrate .. //depot/projects/hammer/sbin/ipfw/ipfw2.h#9 integrate .. //depot/projects/hammer/sbin/ipfw/nat.c#3 integrate .. //depot/projects/hammer/share/examples/etc/make.conf#52 integrate .. //depot/projects/hammer/share/i18n/csmapper/APPLE/ARABIC%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/CELTIC%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/CENTEURO%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/CROATIAN%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/CYRILLIC%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/DEVANAGA%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/DINGBATS%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/FARSI%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/GAELIC%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/GREEK%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/GUJARATI%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/GURMUKHI%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/HEBREW%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/ICELAND%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/INUIT%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/KEYBOARD%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/ROMAN%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/ROMANIAN%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/SYMBOL%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/THAI%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/TURKISH%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25ARABIC.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25CELTIC.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25CENTEURO.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25CROATIAN.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25CYRILLIC.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25DEVANAGA.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25DINGBATS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25FARSI.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25GAELIC.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25GREEK.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25GUJARATI.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25GURMUKHI.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25HEBREW.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25ICELAND.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25INUIT.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25KEYBOARD.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25ROMAN.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25ROMANIAN.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25SYMBOL.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25THAI.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/APPLE/UCS%25TURKISH.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/ARMSCII-7%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/ARMSCII-8%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/ARMSCII-8A%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/UCS%25ARMSCII-7.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/UCS%25ARMSCII-8.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/AST/UCS%25ARMSCII-8A.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/BIG5/Big5UDA%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/BIG5/UCS%25Big5UDA.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CNS/CNS11643-1%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CNS/CNS11643-2%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CNS/UCS%25CNS11643-1.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CNS/UCS%25CNS11643-2.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP037%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP038%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10000%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10006%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10007%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10029%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1006%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10079%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP10081%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1026%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1046%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1124%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1125%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1129%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1131%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1133%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1161%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1162%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1163%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1250%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1251%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1252%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1253%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1254%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1255%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1256%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1257%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP1258%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP273%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP274%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP275%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP277%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP278%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP280%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP281%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP284%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP285%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP290%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP297%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP420%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP423%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP424%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP437%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP500%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP737%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP775%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP850%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP851%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP852%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP853%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP855%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP856%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP857%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP858%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP860%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP861%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP862%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP863%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP864%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP865%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP866%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP868%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP869%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP870%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP871%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP874%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP875%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP880%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP891%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP903%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP904%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP905%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP918%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP922%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP932UDA%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP936EXT%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP942EXT%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP949EXT%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/CP950%25UCS.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP037.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP038.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10000.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10006.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10007.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10029.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1006.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10079.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP10081.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1026.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1046.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1124.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1125.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1129.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1131.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1133.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1161.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1162.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1163.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1250.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1251.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1252.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1253.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1254.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1255.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1256.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1257.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP1258.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP273.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP274.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP275.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP277.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP278.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP280.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP281.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP284.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP285.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP290.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP297.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP420.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP423.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP424.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP437.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP500.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP737.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP775.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP850.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP851.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP852.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP853.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP855.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP856.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP857.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP858.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP860.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP861.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP862.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP863.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP864.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP865.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP866.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP868.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP869.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP870.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP871.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP874.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP875.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP880.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP891.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP903.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP904.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP905.src#4 delete .. //depot/projects/hammer/share/i18n/csmapper/CP/UCS%25CP918.src#4 delete >>> TRUNCATED FOR MAIL (1000 lines) <<<