<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

<author contact="mailto:zbrown@tumblerings.org">Zack Brown</author>

<issue num="172" date="23 Jun 2002 23:00:00 -0800" />

<stats posts="1483" size="7774" contrib="390" multiples="205" lastweek="163">

<person posts="58" size="157" who="&quot;David S. Miller&quot; " />
<person posts="52" size="767" who="Martin Dalecki " />
<person posts="45" size="289" who="Andrew Morton " />
<person posts="35" size="140" who="Linus Torvalds " />
<person posts="31" size="283" who="Rusty Russell " />
<person posts="22" size="77" who="Alexander Viro " />
<person posts="22" size="66" who="Dave Jones " />
<person posts="21" size="121" who="Kai Germaschewski " />
<person posts="21" size="112" who="" />
<person posts="21" size="93" who="Roland Dreier " />
<person posts="21" size="83" who="&quot;Adam J. Richter&quot; " />
<person posts="20" size="55" who="Thunder from the hill " />
<person posts="19" size="72" who="Jens Axboe " />
<person posts="19" size="62" who="Adrian Bunk " />
<person posts="18" size="164" who="Ingo Molnar " />
<person posts="18" size="59" who="Russell King " />
<person posts="18" size="59" who="Oliver Neukum " />
<person posts="17" size="72" who="James Bottomley " />
<person posts="15" size="103" who="Anton Altaparmakov " />
<person posts="15" size="70" who="Robert Love " />
<person posts="14" size="214" who="Stephen Rothwell " />
<person posts="13" size="49" who="Andreas Dilger " />
<person posts="13" size="39" who="Tom Rini " />
<person posts="13" size="39" who="William Lee Irwin III " />
<person posts="12" size="80" who="Andi Kleen " />
<person posts="12" size="46" who="&quot;Albert D. Cahalan&quot; " />
<person posts="12" size="43" who="&quot;Richard B. Johnson&quot; " />
<person posts="12" size="37" who="Zwane Mwaikambo " />
<person posts="12" size="33" who="Mikael Pettersson " />
<person posts="11" size="69" who="Benjamin LaHaise " />
<person posts="11" size="37" who="Jeff Garzik " />
<person posts="11" size="36" who="Daniel Phillips " />
<person posts="11" size="32" who="Greg KH " />
<person posts="10" size="33" who="Bill Davidsen " />
<person posts="9" size="52" who="Martin Wilck " />
<person posts="9" size="40" who="Andre Hedrick " />
<person posts="9" size="38" who="David Brownell " />
<person posts="9" size="29" who="Keith Owens " />
<person posts="9" size="23" who="" />
<person posts="8" size="241" who="mgross " />
<person posts="8" size="51" who="Andi Kleen " />
<person posts="8" size="42" who="" />
<person posts="8" size="33" who="Peter =?ISO-8859-1?Q?W=E4chtler?= " />
<person posts="8" size="30" who="Roberto Fichera " />
<person posts="8" size="27" who="Nicholas Miell " />
<person posts="8" size="24" who="Austin Gonyou " />
<person posts="8" size="22" who="&quot;Thomas 'Dent' Mirlacher&quot; " />
<person posts="8" size="19" who="Alan Cox " />
<person posts="7" size="59" who="Kurt Garloff " />
<person posts="7" size="59" who="Peter Osterlund " />
<person posts="7" size="31" who=" (Eric W. Biederman)" />
<person posts="7" size="24" who="Hugh Dickins " />
<person posts="7" size="23" who="Ben Greear " />
<person posts="7" size="20" who="Helge Hafting " />
<person posts="6" size="177" who="Jean Tourrilhes " />
<person posts="6" size="81" who="manjuanth n " />
<person posts="6" size="35" who="Frank Davis " />
<person posts="6" size="32" who="john stultz " />
<person posts="6" size="28" who="Rik van Riel " />
<person posts="6" size="25" who="Lincoln Dale " />
<person posts="6" size="25" who="Mark Mielke " />
<person posts="6" size="22" who="David Schwartz " />
<person posts="6" size="21" who="jamal " />
<person posts="6" size="21" who="Bartlomiej Zolnierkiewicz " />
<person posts="6" size="19" who="James Simmons " />
<person posts="6" size="16" who="Pavel Machek " />
<person posts="5" size="28" who="Denis Oliver Kropp " />
<person posts="5" size="25" who="Douglas Gilbert " />
<person posts="5" size="25" who="Francois Gouget " />
<person posts="5" size="23" who="Doug Ledford " />
<person posts="5" size="23" who="Roberto Nibali " />
<person posts="5" size="23" who="Mike Kravetz " />
<person posts="5" size="22" who="Arnaldo Carvalho de Melo " />
<person posts="5" size="22" who="OGAWA Hirofumi " />
<person posts="5" size="20" who="Andrea Arcangeli " />
<person posts="5" size="20" who="&quot;H. Peter Anvin&quot; " />
<person posts="5" size="18" who="Vojtech Pavlik " />
<person posts="5" size="18" who="Padraig Brady " />
<person posts="5" size="16" who="Oliver Xymoron " />
<person posts="5" size="14" who="Denis Vlasenko " />
<person posts="5" size="14" who="Benjamin Herrenschmidt " />
<person posts="5" size="14" who="David Ford " />
<person posts="4" size="29" who="Dawson Engler " />
<person posts="4" size="28" who="&quot;Braden McGrath&quot; " />
<person posts="4" size="23" who="&quot;Nick Evgeniev&quot; " />
<person posts="4" size="21" who="&quot;Daniela Engert&quot; " />
<person posts="4" size="20" who="Sam Ravnborg " />
<person posts="4" size="19" who="Chris Friesen " />
<person posts="4" size="18" who="Stevie O " />
<person posts="4" size="16" who="Andrey Panin " />
<person posts="4" size="16" who="Pavel Machek " />
<person posts="4" size="16" who="Paul P Komkoff Jr " />
<person posts="4" size="16" who="Jan Pazdziora " />
<person posts="4" size="14" who="Martin Knoblauch " />
<person posts="4" size="13" who="Ingo Oeser " />
<person posts="4" size="12" who="William Jhun " />
<person posts="4" size="10" who="Tomas Szepe " />
<person posts="4" size="7" who="&quot;Lyris ListManager&quot; " />
<person posts="3" size="137" who="Martin Schwidefsky " />
<person posts="3" size="44" who="Matthew Harrell " />
<person posts="3" size="26" who="Lightweight patch manager " />
<person posts="3" size="19" who="Paul Menage " />
<person posts="3" size="17" who="&quot;Bhavesh P. Davda&quot; " />
<person posts="3" size="16" who="Kurt Garloff " />
<person posts="3" size="15" who="Dan Aloni " />
<person posts="3" size="14" who="jw schultz " />
<person posts="3" size="13" who="Jonathan Abbey " />
<person posts="3" size="13" who="Myrddin Ambrosius " />
<person posts="3" size="12" who=" (Kai Henningsen)" />
<person posts="3" size="12" who="Anton Altaparmakov " />
<person posts="3" size="12" who="Matthew Wilcox " />
<person posts="3" size="11" who="John Weber " />
<person posts="3" size="11" who="Kevin Easton " />
<person posts="3" size="11" who="Kurt Wall " />
<person posts="3" size="11" who="Manik Raina " />
<person posts="3" size="10" who="Paul Mackerras " />
<person posts="3" size="10" who="Brad Hards " />
<person posts="3" size="10" who="Horst von Brand " />
<person posts="3" size="10" who="John covici " />
<person posts="3" size="10" who="Sancho Dauskardt " />
<person posts="3" size="10" who="David Mosberger " />
<person posts="3" size="9" who="&quot;J.A. Magallon&quot; " />
<person posts="3" size="9" who="dean gaudet " />
<person posts="3" size="9" who="Stelian Pop " />
<person posts="3" size="9" who="Urban Widmark " />
<person posts="3" size="9" who="Brent Cook " />
<person posts="3" size="9" who="&quot;Maksim (Max) Krasnyanskiy&quot; " />
<person posts="3" size="9" who="Craig Kulesa " />
<person posts="3" size="8" who="&quot;Jason C. Pion&quot; " />
<person posts="3" size="7" who="Oliver Neukum " />
<person posts="3" size="7" who="Felipe Contreras " />
<person posts="3" size="7" who="&quot;Randy.Dunlap&quot; " />
<person posts="2" size="75" who="Andre Tomt " />
<person posts="2" size="41" who="Zhang Fuxin " />
<person posts="2" size="24" who="Robert White " />
<person posts="2" size="16" who="Alessandro Suardi " />
<person posts="2" size="14" who="&quot;Justin S. Peavey&quot; " />
<person posts="2" size="13" who="&quot;Oliver Pitzeier&quot; " />
<person posts="2" size="13" who="Martin Diehl " />
<person posts="2" size="12" who="Carl Ritson " />
<person posts="2" size="11" who="A Guy Called Tyketto " />
<person posts="2" size="11" who="Paul Mundt " />
<person posts="2" size="11" who="&quot;Lev V. Vanyan&quot; " />
<person posts="2" size="9" who="Abraham vd Merwe " />
<person posts="2" size="9" who="Erik McKee " />
<person posts="2" size="8" who="Trond Myklebust " />
<person posts="2" size="8" who="&quot;Shipman, Jeffrey E&quot; " />
<person posts="2" size="8" who="Joshua Newton " />
<person posts="2" size="8" who="&quot;Renato&quot; " />
<person posts="2" size="8" who="Matti Aarnio " />
<person posts="2" size="7" who="Allan Sandfeld Jensen " />
<person posts="2" size="7" who="Roy Sigurd Karlsbakk " />
<person posts="2" size="7" who="&quot;J.S.Souza&quot; " />
<person posts="2" size="7" who="xsdg " />
<person posts="2" size="7" who="Morten Helgesen " />
<person posts="2" size="7" who="&quot;White, Charles&quot; " />
<person posts="2" size="7" who="Richard Gooch " />
<person posts="2" size="7" who="Borsenkow Andrej " />
<person posts="2" size="7" who="Tigran Aivazian " />
<person posts="2" size="7" who="Jan Harkes " />
<person posts="2" size="7" who="&quot;Neulinger, Nathan&quot; " />
<person posts="2" size="6" who="george anzinger " />
<person posts="2" size="6" who="Gerrit Huizenga " />
<person posts="2" size="6" who="Mark Zealey " />
<person posts="2" size="6" who="Rob Radez " />
<person posts="2" size="6" who="Gerd Knorr " />
<person posts="2" size="6" who="john slee " />
<person posts="2" size="6" who="James Bottomley " />
<person posts="2" size="6" who="Pekka Savola " />
<person posts="2" size="6" who="Samuel Flory " />
<person posts="2" size="6" who="Hugh " />
<person posts="2" size="6" who="Chris Wright " />
<person posts="2" size="6" who="&quot;Sylvain Le Briero&quot; " />
<person posts="2" size="6" who="&quot;Steve Cole&quot; " />
<person posts="2" size="6" who="Daniel Jacobowitz " />
<person posts="2" size="6" who="&quot;Matthew D. Pitts&quot; " />
<person posts="2" size="6" who="Andrew Rodland " />
<person posts="2" size="6" who="&quot;Martin J. Bligh&quot; " />
<person posts="2" size="5" who="Robinson Maureira Castillo " />
<person posts="2" size="5" who="Petter " />
<person posts="2" size="5" who="Eric Van Buggenhaut " />
<person posts="2" size="5" who="Kirk Reiser " />
<person posts="2" size="5" who="Gene Yee " />
<person posts="2" size="5" who="&quot;Hans E. Kristiansen&quot; " />
<person posts="2" size="5" who="Abhishek Nayani " />
<person posts="2" size="5" who="&quot;Maciej W. Rozycki&quot; " />
<person posts="2" size="5" who="Erik Andersen " />
<person posts="2" size="5" who="Shawn " />
<person posts="2" size="5" who="Kristian Peters " />
<person posts="2" size="5" who="Lech Szychowski " />
<person posts="2" size="5" who="Richard Liu " />
<person posts="2" size="5" who="Yaroslav Popovitch " />
<person posts="2" size="5" who="DervishD " />
<person posts="2" size="5" who="Diego Calleja " />
<person posts="2" size="5" who="John Levon " />
<person posts="2" size="5" who="Rolf Fokkens " />
<person posts="2" size="5" who="Vincent Hanquez " />
<person posts="2" size="5" who="Anders Peter Fugmann " />
<person posts="2" size="5" who="" />
<person posts="2" size="4" who="Remedy " />
<person posts="2" size="4" who="Marcelo Tosatti " />
<person posts="2" size="4" who="&quot;Narayan Desai&quot; " />
<person posts="2" size="4" who="&quot;Florian G. Pflug&quot; " />
<person posts="2" size="4" who="Uncle George " />
<person posts="2" size="4" who="Gregory Giguashvili " />
<person posts="1" size="40" who="sullivan " />
<person posts="1" size="35" who="Wolter Kamphuis " />
<person posts="1" size="25" who="&quot;Leroy van Logchem&quot; " />
<person posts="1" size="25" who="Filip Sneppe " />
<person posts="1" size="25" who="Jaap Verhoeven " />
<person posts="1" size="16" who="Hans-Christian Armingeon " />
<person posts="1" size="13" who="Steven Bosscher " />
<person posts="1" size="13" who="&quot;Paul Clements (home)&quot; " />
<person posts="1" size="12" who="" />
<person posts="1" size="11" who="&quot;Guillaume Boissiere&quot; " />
<person posts="1" size="10" who="Robert Love " />
<person posts="1" size="10" who="Tommy Faasen " />
<person posts="1" size="9" who="Jeremy White " />
<person posts="1" size="8" who="Andreas Mohr " />
<person posts="1" size="8" who="Patrick Mochel " />
<person posts="1" size="8" who="" />
<person posts="1" size="8" who="" />
<person posts="1" size="8" who="Juan Manuel Gimeno Illa " />
<person posts="1" size="8" who="Ricardo Galli " />
<person posts="1" size="6" who="Georgi Chorbadzhiyski " />
<person posts="1" size="6" who="Ravikiran G Thirumalai " />
<person posts="1" size="6" who="Stephen Hemminger " />
<person posts="1" size="5" who="&quot;Ulrich Windl&quot; " />
<person posts="1" size="5" who="Sean Hunter " />
<person posts="1" size="5" who="Tomaz Susnik " />
<person posts="1" size="5" who="Saurabh Desai " />
<person posts="1" size="5" who="Hubertus Franke " />
<person posts="1" size="5" who="Andreas Bombe " />
<person posts="1" size="5" who="Andrew Beresford " />
<person posts="1" size="5" who="&quot;Paolo Ciarrocchi&quot; " />
<person posts="1" size="4" who="Brad Heilbrun " />
<person posts="1" size="4" who="&quot;BALBIR SINGH&quot; " />
<person posts="1" size="4" who="kk maddowx " />
<person posts="1" size="4" who="Ingo Molnar " />
<person posts="1" size="4" who="Jozsef Kadlecsik " />
<person posts="1" size="4" who="Chris Rankin " />
<person posts="1" size="4" who="&quot;seawang&quot; " />
<person posts="1" size="4" who="&quot;Richard Seaman, Jr.&quot; " />
<person posts="1" size="4" who="Joerg Wendland " />
<person posts="1" size="4" who="Anton Blanchard " />
<person posts="1" size="4" who="Andries Brouwer " />
<person posts="1" size="4" who="Samuel Maftoul " />
<person posts="1" size="4" who="Anders Fugmann " />
<person posts="1" size="4" who="Miles Lane " />
<person posts="1" size="4" who="Tommy Reynolds " />
<person posts="1" size="4" who=" (Rogier Wolff)" />
<person posts="1" size="4" who="harisri " />
<person posts="1" size="4" who="Mark Hounschell " />
<person posts="1" size="4" who="&quot;Leech, Christopher&quot; " />
<person posts="1" size="4" who="Petr Vandrovec " />
<person posts="1" size="3" who="Vladimir Zidar " />
<person posts="1" size="3" who="Peter =?iso-8859-1?Q?W=E4chtler?= " />
<person posts="1" size="3" who="&quot;Vamsi Krishna S.&quot; " />
<person posts="1" size="3" who="Cengiz Akinli " />
<person posts="1" size="3" who="Ryan Cumming " />
<person posts="1" size="3" who="George Foot " />
<person posts="1" size="3" who="Joseph Mathewson " />
<person posts="1" size="3" who="&quot;SuperLaugh Daily Fun&quot; " />
<person posts="1" size="3" who="lezong " />
<person posts="1" size="3" who="Robert Olsson " />
<person posts="1" size="3" who="Johannes Erdfelt " />
<person posts="1" size="3" who="Skip Ford " />
<person posts="1" size="3" who="Roger Larsson " />
<person posts="1" size="3" who="&quot;Dr. David Alan Gilbert&quot; " />
<person posts="1" size="3" who="Michael Clark " />
<person posts="1" size="3" who="Richard Guy Briggs " />
<person posts="1" size="3" who="Ryan Cumming " />
<person posts="1" size="3" who="Tobias Diedrich " />
<person posts="1" size="3" who="Andreas Roedl " />
<person posts="1" size="3" who="Christian Zoffoli " />
<person posts="1" size="3" who="Michael Schlenstedt " />
<person posts="1" size="3" who="Arnd Bergmann " />
<person posts="1" size="3" who="Klaus Herb " />
<person posts="1" size="3" who="Rob Landley " />
<person posts="1" size="3" who="Joseph Pingenot " />
<person posts="1" size="3" who="Pekka =?iso-8859-15?Q?Pietik=E4inen?= " />
<person posts="1" size="3" who="Amit Nadgar " />
<person posts="1" size="3" who="&quot;Stuart MacDonald&quot; " />
<person posts="1" size="3" who="Patrick Mansfield " />
<person posts="1" size="3" who="Bryan O'Sullivan " />
<person posts="1" size="3" who="Nick Papadonis " />
<person posts="1" size="3" who="Horst von Brand " />
<person posts="1" size="3" who="&quot;Matthew Dharm&quot; " />
<person posts="1" size="3" who="Chris Adams " />
<person posts="1" size="3" who="Robert Schwebel " />
<person posts="1" size="3" who="Christopher Swingley " />
<person posts="1" size="3" who="Skip Gaede " />
<person posts="1" size="3" who="Larry McVoy " />
<person posts="1" size="3" who="Rui Sousa " />
<person posts="1" size="3" who="Gerd Knorr " />
<person posts="1" size="3" who="Fabrice MARIE " />
<person posts="1" size="3" who="&quot;Paul Fulghum&quot; " />
<person posts="1" size="3" who="Nick Papadonis " />
<person posts="1" size="3" who="&quot;Martin Schwidefsky&quot; " />
<person posts="1" size="3" who="Patrick Altman " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Oleg Drokin " />
<person posts="1" size="3" who="Donald Becker " />
<person posts="1" size="3" who="Gerald Britton " />
<person posts="1" size="3" who="Teodor Iacob " />
<person posts="1" size="3" who="" />
<person posts="1" size="2" who="&quot;Michael Kerrisk&quot; " />
<person posts="1" size="2" who="&quot;Domcan Sami&quot; " />
<person posts="1" size="2" who="George France " />
<person posts="1" size="2" who="Ruth Ivimey-Cook " />
<person posts="1" size="2" who="Nikita Danilov " />
<person posts="1" size="2" who="&quot;Garet Cammer&quot; " />
<person posts="1" size="2" who="Guillaume Morin " />
<person posts="1" size="2" who="DevilKin " />
<person posts="1" size="2" who="&quot;Hron, Randall&quot; " />
<person posts="1" size="2" who="Nerijus Baliunas " />
<person posts="1" size="2" who="Andy Pfiffer " />
<person posts="1" size="2" who="aryan aru " />
<person posts="1" size="2" who="John Summerfield " />
<person posts="1" size="2" who="Bernd Jendrissek " />
<person posts="1" size="2" who="Sanjeev Dwivedi " />
<person posts="1" size="2" who="Richard Zidlicky " />
<person posts="1" size="2" who="Tom Vier " />
<person posts="1" size="2" who="David Woodhouse " />
<person posts="1" size="2" who="Gabriel Paubert " />
<person posts="1" size="2" who="Jelle Foks " />
<person posts="1" size="2" who="Martin Wirth " />
<person posts="1" size="2" who="Duncan Sands " />
<person posts="1" size="2" who="Marek Michalkiewicz " />
<person posts="1" size="2" who="Sam Halliday " />
<person posts="1" size="2" who="Greg Stark " />
<person posts="1" size="2" who="Jonas Diemer " />
<person posts="1" size="2" who="David Gibson " />
<person posts="1" size="2" who="Geert Uytterhoeven " />
<person posts="1" size="2" who="John Covici " />
<person posts="1" size="2" who="Joel Jaeggli " />
<person posts="1" size="2" who="Andre Bonin " />
<person posts="1" size="2" who="Chris Wedgwood " />
<person posts="1" size="2" who="Jim Nelson " />
<person posts="1" size="2" who="Ben Collins " />
<person posts="1" size="2" who="Zlatko Calusic " />
<person posts="1" size="2" who="&quot;Holzrichter, Bruce&quot; " />
<person posts="1" size="2" who="&quot;Jordan Breeding&quot; " />
<person posts="1" size="2" who="&quot;Dave Gilbert (Home)&quot; " />
<person posts="1" size="2" who="Ulrich Pfeifer " />
<person posts="1" size="2" who="&quot;C. Scott Ananian&quot; " />
<person posts="1" size="2" who="Andrey Savochkin " />
<person posts="1" size="2" who="Nathan Neulinger " />
<person posts="1" size="2" who="Ghozlane Toumi " />
<person posts="1" size="2" who="Banka " />
<person posts="1" size="2" who="Peter Chubb " />
<person posts="1" size="2" who="Hank Leininger " />
<person posts="1" size="2" who="OHKUBO Katsuhiko " />
<person posts="1" size="2" who="Juri Haberland " />
<person posts="1" size="2" who="Dax Kelson " />
<person posts="1" size="2" who="andrew may " />
<person posts="1" size="2" who="Gabor Kerenyi " />
<person posts="1" size="2" who="Neil Booth " />
<person posts="1" size="2" who="Chris Wright " />
<person posts="1" size="2" who="lkml " />
<person posts="1" size="2" who="Xavier Bestel " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who=" (=?iso-8859-1?q?M=E5ns_Rullg=E5rd?=)" />
<person posts="1" size="2" who="Ian Stirling " />
<person posts="1" size="2" who="Marius Gedminas " />
<person posts="1" size="2" who="Daniel Jacobowitz " />
<person posts="1" size="2" who="Anssi Saari " />
<person posts="1" size="2" who="Seth Goldberg " />
<person posts="1" size="2" who="&quot;Balakrishnan Ananthanarayanan&quot; " />
<person posts="1" size="2" who="&quot;X.Xiao&quot; " />
<person posts="1" size="2" who="Ducrot Bruno " />
<person posts="1" size="2" who="&quot;Justin T. Gibbs&quot; " />
<person posts="1" size="2" who="Kyle Davenport " />
<person posts="1" size="2" who="Oleg Drokin " />
<person posts="1" size="2" who="Alan " />
<person posts="1" size="2" who="=?iso-8859-1?q?F=20ker?= " />
<person posts="1" size="2" who="&quot;M. Edward (Ed) Borasky&quot; " />
<person posts="1" size="2" who="Erlend Aasland " />
<person posts="1" size="2" who="Mark Atwood " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Tom Bradley " />
<person posts="1" size="2" who="Dale Amon " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Sanjay Kumar " />
<person posts="1" size="2" who="Tim Tassonis " />
<person posts="1" size="1" who="cRACkeT " />
<person posts="1" size="1" who="Olaf Dabrunz " />
<person posts="1" size="1" who="&quot;jenny&quot; " />
<person posts="1" size="1" who="" />

</stats>

<section
  title="New Fast Mutex Implementation For 2.5"
  subject="[PATCH] Futex Asynchronous Interface"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.0/1200.html"
  posts="45"
  startdate="05 Jun 2002 23:26:35 -0800"
  enddate="13 Jun 2002 08:40:41 -0800"
>
<topic>FS</topic>
<topic>Locking</topic>

<mention>Alan Cox</mention>
<mention>Alexander Viro</mention>
<mention>Rusty Russell</mention>

<p>Rusty Russell posted some patches to implement /dev/futex, a file-based
mutex locking handler. It could be opened, closed, and read via normal system
calls, which he said would be very convenient for applications. But Linus
Torvalds cried out:</p>

<quote who="Linus Torvalds">

<p>STOP!</p>

<p>What madness is this?</p>

<p>You have a damn mutex system call, don't introduce mode crap in /dev.</p>

<p>Do we create pipes by opening /dev/pipe? No. Do we have major and minor
numbers for sockets and populate /dev with them? No. And as a result, there
has _never_ been any sysadmin problems with either.   </p>

<p>You already have to have a system call to bind the particular fd to the
futex _anyway_, so do the only sane thing, and allocate the fd _there_,
and get rid of that stupid and horrible /dev/futex which only buys you pain,
system administration, extra code, and a black star for being stupid.</p>

</quote>

<p>Rusty felt that for network programming at least, the socket API was
not the best model to copy (close by, Alan Cox said much the same thing);
and Peter W&#230;chtler suggested /proc/futex instead, which he said would
involve <quote who="Peter W&#230;chtler">Less adminstrative work, clean
interface (also for shell scripts like Alan suggested).  Al Viro would like
this, it's more like Plan9 or QNX6.</quote> But Linus replied:</p>

<quote who="Linus Torvalds">

<p>Tell me _one_ advantage from having the thing exposed as a filename?</p>

<p>The whole point with "everything is a file" is not that you have some
random filename (indeed, sockets and pipes show that "file" and "filename"
have nothing to do with each other), but the fact that you can use common
tools to operate on different things.</p>

<p>But there's absolutely no point in opening /dev/futex from a shell script
or similar, because you don't get anything from it. You still have to bind
the fd to it's real object.</p>

<p>In short, the name "/dev/futex" (or "/proc/futex") is _meaningless_.
There's no point to it. It has no life outside the FUTEX system call, and
the only thing that you can do by exposing it as a name is to cause problems
for people who don't want to mount /proc, or who do not happen to have that
device node in their /dev.</p>

</quote>

<p>Elsewhere, Rusty saw the writing on the wall, and tried to implement
futexes in the filesystem itself, copying a batch of code from sockfs. In
fact, he felt he'd copied a bit too much code, and asked Linus and Alexander
Viro if they could spot any areas he could prune. Linus replied:</p>

<quote who="Linus Torvalds">

<p>I don't think it's a matter of cutting, as much as possibly a matter of
tryign to share some common code. pipefs, sockfs and now this: they all do
pretty much exactly the same thing, and there is nothing that says that
they should have separate super_operations, for example, since they are
all identical.</p>

<p>And once you have the same super_operations, you really have the same
"fill_super" functions too. The only thing that separates these superblocks
is the root name, so that /proc gets nice output. So it should be fine to
just have</p>

<blockquote>
        <p>>sb = create_anon_fs("futex");</p>
</blockquote>

<p>and share all of the setup code across futex/pipes/sockfs.</p>

<p>Which still leaves you with the</p>

<blockquote>
<p>        get_unused_fd();<br />
        get_empty_filp();<br />
        filp-&gt;f_dentry = dget(sb-&gt;s_root);<br />
        .. fill it ..<br />
        fd_install(fd, filp);
</p>
</blockquote>

<p>but by then we're talking single lines of overhead.</p>

</quote>

<p>Rusty took a look, but decided that the futex code he was trying to write
was not quite identical enough to sockfs and pipefs. He asked Alexander
for an opinion, but got no reply. Meanwhile Rusty, Linus, and various other
folks discussed implementation details for awhile. At one point Peter asked,
<quote who="Peter W&#230;chtler">What are the plans on how to deal with
a waiter when the lock holder dies abnormally?</quote> And Linus said,
<quote who="Linus Torvalds">That's why they are called FUTEX'es - they're
fast. They're NOT SysV semaphores, and they are done 99% in user space. The
kernel doesn't even _know_ about them until contention happens, and even then
only in a rather dim "somebody wants me to do this, but I don't know _what_
he is doing" way.</quote> Later, he added:</p>

<quote who="Linus Torvalds">

<p>the point is not that it would be a performance hit on "exit()", but that
WE DON'T TRACK THE LOCKS in the kernel in the first place.</p>

<p>Right now the kernel does _zero_ work for a lock that isn't contended. It
doesn't know _anything_ about the process that got the lock initially.</p>

<p>Any amount of tracking would be _extremely_ expensive. Right now getting
an uncontended lock is about 15 CPU cycles in user space.</p>

<p>Tryin to tell the kernel about gettign that lock takes about 1us on a P4
(system call overhead), ie we're talking 18000 cycles. 18 THOUSAND cycles
minimum. Compared to the current 15 cycles. That's more than three orders
of magnitude slower than the current code, and you just lost the whole point
of doing this all in user space in the first place.</p>

</quote>

<p>Oliver Xymoron suggested, <quote who="Oliver Xymoron">That doesn't rule
out approaches like storing a cookie alongside the lock once it's acquired
(or in a parallel space). Which can easily be done with a wrapper around
lock acquisition. And stale lock detection needn't be done in kernel space
either.</quote> And Linus replied:</p>

<quote who="Linus Torvalds">

<p>Oh, agreed, you can do debugging locks in user-space, but it won't be the
kernel that does anything, it will instead have to depend on something like
"if I time out on the lock, I can explicitly test if the previous holder
(who saved his thread ID in memory after getting the lock) is still alive
and try to clean up after him".</p>

<p>This is what a lot of the filesystem locking code does for the things in
/var/lock/xxx, of course.</p>

<p>No kernel necessarily involved.</p>

<p>But it's going to have to depend on the politeness of all threads that
partake in the locking.</p>

</quote>

</section>

<section
  title="Per-Socket Statistics Proposed And Rejected"
  subject="RFC: per-socket statistics on received/dropped packets"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.1/0043.html"
  posts="50"
  startdate="06 Jun 2002 11:37:28 -0800"
  enddate="14 Jun 2002 10:09:51 -0800"
>
<topic>Development Philosophy</topic>
<topic>Ioctls</topic>
<topic>Sockets</topic>

<mention>Mark Mielke</mention>
<mention>Ben Greear</mention>

<p>Chris Friesen proposed:</p>

<quote who="Chris Friesen">

<p>For a while I've been wanting a way for a program to find out if any
of its socket buffers were overflowing due to too much incoming traffic.
Finally, I decided to code it up and try it out.</p>

<p>As it turns out, it was relatively simple to add, although it required
the addition of two new entries in sockios.h.</p>

<p>Basically, inside of sock_queue_rcv_skb() and sock_queue_err_skb()
the receive counter gets incremented unconditionally, and then if there is
no free space in the socket buffer then we also increment the counter for
messages dropped due to out of memory.</p>

<p>The stats are stored as part of a socket_stats struct, making it easy to
add other counters in the future.</p>

<p>To access and reset the counters, two ioctl commands were added to the
socket ioctl. GIOCSOCKSTATS is used to get the stats, while SIOCZEROSOCKSTATS
is used to reset them.  I haven't bothered with trying to reset them both
atomically as I don't think it's that critical.</p>

<p>The patch was coded and tested for 2.4.18, but it is known to at least
apply (with offsets) on 2.5.20.</p>

</quote>

<p>David S. Miller completely disapproved of the patch, saying that the patch
was only useful for datagram sockets. Ben Greear objected that datagram sockets
were the only ones that had the data-dropping problem the patch dealt with,
but Mark Mielke suggested that applications could handle this themselves
by collecting and analyzing the statistics provided by Chris' patch. But
David said that SNMP provided all the statistics any application would need;
and that if there <i>were</i> any areas that SNMP didn't adequately cover,
it only meant that more SNMP events should be added. The bunch of them went
around on it for awhile, with David saying at one point, <quote who="David
S. Miller">Every argument I hear is one out of lazyness.  And that is not
a reason to add something.  Simply put, I don't want to add all of this
per-socket counter bumping that only, at best, 1 tenth of 1 percent of people
will use.  This means that the rest of the world eats the overhead just for
this small group that actually uses it.</quote> Bill Davidsen said to David,
<quote who="Bill Davidsen">your arguments sound like you have a solution
to your problem and you want everyone to use it even if it doesn't help
them. Have you some emotional tie to SNMP, like being an author?</quote>
And to this, David replied, <quote who="David S. Miller">After a comment
like this, I have no interest in listening to anything else you have to say.
I've been maintaining the Linux networking for 5 or more years now, and the
most important thing I do is say no to changes.</quote></p>

</section>

<section
  title="Coding Style"
  subject="[PATCH][2.5] introduce list_move macros"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.1/0127.html"
  posts="36"
  startdate="09 Jun 2002 03:09:54 -0800"
  enddate="13 Jun 2002 06:18:36 -0800"
>
<topic>Coding Style</topic>
<topic>USB</topic>

<p>In the course of discussion, Linus Torvalds went over some of his coding
preferences:</p>

<quote who="Linus Torvalds">

<p>The linux coding style _tends_ to avoid using typedefs. It's not a hard
rule (and I did in fact apply this patch, since it otherwise looked fine), but
it's fairly common to use an explicit "struct xxxx" instead of "xxxx_t".</p>

<p>I dislike type abstraction if it has no real reason. And saving on typing
is not a good reason - if your typing speed is the main issue when you're
coding, you're doing something seriously wrong.</p>

<p>(Similarly, if you are trying to compress lines to be shorter, you have
other problems, nothing to do with type names).</p>

<p>Does code look "prettier" with a "_t" rather than a "struct "? I don't
know. I personally don't think so, and I also hate the "_p" (or even more
the just plain "p") convention for "pointer".</p>

<p>Hiding the fact that it's a struct causes bad things if people don't
realize it: allocating structs on the stack is something you should be aware
of (and careful with), and passing them as parameters is is much better done
explicitly as a "pointer to struct".  </p>

<p>There are _some_ exceptions. For example, "pte_t" etc might well be a struct
on most architectures, and that's ok: it's expressly designed to be an opaque
(and still fairly small) thing. This is an example of where there are clear
_reasons_ for the abstraction, not just abstraction for its own sake.</p>

<p>But in the end, maintainership matters. I personally don't want the
typedef culture to get the upper hand, but I don't mind a few of them,
and people who maintain their own code usually get the last word.</p>

</quote>

<p>Thomas Mirlacher tried to sum it up by saying, <quote who="Thomas
Mirlacher">using the "struct mystruct" is _recommended_, but not a
must.</quote> But Linus replied:</p>

<quote who="Linus Torvalds">

<p>Well, it's more than just "struct xx". It's really typedefs in general.</p>

<p>For example, some people like to do things like</p>

<p>        typedef unsigned int counter_t;</p>

<p>and then use "counter_t" all over the place. I think that's not just ugly,
but stupid and counter-productive. It makes it much harder to do things like
"printk()" portably, for example ("should I use %u, %l or just %d?"), and
generally adds no value. It only _hides_ information, like whether the type
is signed or not.</p>

<p>There is nothing wrong with just using something like "unsigned long"
directly, even if it is a few characters longer than you might like. And
if you care about the number of bits, use "u32" or something. Don't make up
useless types that have no added advantage.</p>

<p>We actually have real _problems_ due to this in the kernel, where people
use "off_t", and it's not easily printk'able across different architectures
(we used to have this same problem with size_t). We should have just used
"unsigned long" inside the kernel, and be done with it (and "unsigned long
long" for loff_t).</p>

<p>We should also have some format for printing out "u32/u64" etc, but
that's another issue and has the problem that gcc won't understand them,
so adding new formats is _hard_ from a maintenance standpoint.</p>

<p>PS. And never _ever_ make the "pointerness" part of the type. People
who write</p>

<p>        typedef struct urb_struct * urbp_t;</p>

<p>(or whatever the name was) should just be shot. I was _soo_ happy to see
that crap get excised from the kernel USB drivers.</p>

</quote>

</section>

<section
  title="Binary Files Found In The Kernel Sources"
  subject="2.5.21 no source for several objects"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.1/0544.html"
  posts="6"
  startdate="10 Jun 2002 17:30:39 -0800"
  enddate="13 Jun 2002 06:14:02 -0800"
>
<topic>Kernel Build System</topic>
<topic>Licencing</topic>
<topic>Source Distribution</topic>

<p>Keith Owens reported that, unlike the build systems currently in use,
kbuild 2.5 detected a number of binary-only files in the kernel sources. He
listed them off, and added, <quote who="Keith Owens">This is one of the
advantages of having a build system that knows about everything.</quote> Various
folks took responsibility for the binary files, saying in all cases that they
had been included by mistake and could safely be deleted.</p>

</section>

<section
  title="Status Of FAT CVF"
  subject="Status of FAT CVF?"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.1/0841.html"
  posts="5"
  startdate="11 Jun 2002 20:38:27 -0800"
  enddate="13 Jun 2002 05:22:36 -0800"
>
<topic>FS: FAT</topic>

<p>Someone asked about the status of fat_cvf is 2.4; Matti Aarnio replied,
<quote who="Matti Aarnio">Over about past week there has been some talk
with that topic.  The conclusion appeared to be "kernel driver is abandoned,
future support belongs into  mtools".</quote> Elsewhere, Andreas Dilger also
said to the original poster, <quote who="Andreas Dilger">There was a patch
posted last week to l-k which basically removed CVF support from the kernel
entirely, because it was totally non-functional.</quote> And OGAWA Hirofumi
added, <quote who="OGAWA Hirofumi">I got direct email about it. Then he said,
he ports and uses dmsdos on 2.4. And I asked if he can port dmsdos to 2.5
or not. So, currently that patch is pending.</quote></p>

</section>

<section
  title="Developer Disconnect"
  subject="[PATCH+discussion] symlink recursion"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0206.2/0577.html"
  posts="12"
  startdate="18 Jun 2002 14:19:53 -0800"
  enddate="19 Jun 2002 14:06:06 -0800"
>
<topic>Developer Interaction</topic>
<topic>FS: ext2</topic>
<topic>Security</topic>

<p>Andries Brouwer announced, <quote who="Andries Brouwer">As promised
below an implementation of nonrecursive symlink resolution.</quote> But
Linus Torvalds replied bluntly:</p>

<quote who="Linus Torvalds">

<p>There is no such thing as a non-recursive symlink resolution.</p>

<p>Symlink walking is by it's very nature recursive, since we have to be
able to look a symlink up in the middle of another one.</p>

<p>So either it's recursive in C (caller ends up calling itself) or it
linearizes the recursion by hand (caller keeps track of the stack by hand
using a linked list or by expanding the pathname in place or whatever,
instead of using the C stack).</p>

<p>Both are recursive, it's only a question of whether the recursion is
handled by the language or by hand, and whether the interim state is held
on the stack or in explicit data structures.</p>

<p>I see no advantages to handling it by hand, since this isn't even a very
deep recursion, and since even if you do the recursive part by hand by a linked
list you still need to limit the depth _anyway_ to avoid DoS attacks.</p>

<p>In fact, we avoid following symlinks too deeply even for the _non_recursive_
case (see "total_link_count") exactly because of these DoS issues.</p>

<p>Could we allow deeper recursion if we did it by hand? Sure. Are there
any real advantages in 15 levels of recursion over 5 levels of recursion? I
don't see any.</p>

</quote>

<p>Andries pointed out that his patch allowed the sysadmin to choose the allowed
level of recursion, so they wouldn't have to worry about the possibility of
stack overflows. Daniel Phillips also objected to Linus:</p>

<quote who="Daniel Phillips">

<p>It's the recursive trip through the filesystem that causes the problem.
Suddenly the stack space consumption becomes (N * greediest_filesystem)
and that has to be factored into all worst case calculations.  It's a huge
hole to blow out of this severely restricted resource, so reducing N to 1
is a big deal.</p>

<p>Also, as a practical matter, it's much easier to lay down a rule for
filesystem developers that reads: "thou shalt in no case use more than N
bytes of stack on your longest path" than "in no case use more than N bytes
of stack except on any symlink resolution path, in which case see the limit
on recursive symlinks to know how to analyze that path".</p>

</quote>

<p>But Linus said:</p>

<quote who="Linus Torvalds">

<p>Actually, the trip to the filesystem itself is not recursive. We only have
one lookup _active_ at a time, so the stack depth is fairly well bounded.
I think at some point it was on the order of 64 bytes per invocation on
x86. It really isn't as bad as people have made it out to be.</p>

<p>(But yes, the x86 is denser on the stack than many architectures)   </p>

<p>Note that I'm absolutely not adverse to have people test Andries patch, and
I don't _mind_ it. I'm really arguing not so much against the patch itself,
as against the _religious_ and unthinking reaction against a perfectly fine
programming construct (limited recursion).</p>

<p>PS. Yes, a filesystem can do stupid things, and make the actual single
level function have a huge stack-frame: the example was for the normal
"page_symlink" thing.</p>

</quote>

<p>Andries took him to task, saying:</p>

<quote who="Andries Brouwer">

<p>In your previous letter you wanted to play semantical tricks with the
word recursive, even though you understood perfectly well what I meant with
"nonrecursive" (and you yourself used the same terminology in older posts).</p>

<p>Now I hesitate whether I should react to the above statement.  Maybe this
time there are semantical tricks with the word active, but it sounds a bit
as if you misunderstand the situation.</p>

<p>Let me state the facts instead of worrying about semantics.</p>

<p>The routine link_path_walk() in namei.c will call do_follow_link() in case
of a symlink, and this routine will call dentry->d_inode->i_op->follow_link(),
say, nfs_follow_link(), which calls vfs_follow_link(), which calls
link_path_walk(), etc.</p>

<p>You see that in a stack of N invocations, there will also be N stack frames
of foofs_follow_link().  So, yes, in the way I use recursive, routines like
nfs_follow_link() are indeed recursive: they end up calling themselves.</p>

<p>Last Sunday or so I gave a demo patch that takes the filesystems out of
the loop. Then symlink resolution is still recursive but there will be at
most one invocation of foofs_follow_link().</p>

<p>Yesterday I showed that it is also easy to avoid recursion altogether.</p>

<p>These are independent stages, and one might consider doing one and not
the other.</p>

</quote>

<p>Linus replied to Andries' 4th paragraph:</p>

<quote who="Linus Torvalds">

<p>Yes. But did you look at the stack frames of those things? It's something
like 16 bytes for ext2_follow_link (it just calls directly back to the VFS
layer), 20 bytes for vfs_follow_link(), and 56 for link_path_walk.</p>

<p>(yeah, it obviously isn't just 64 bytes any more, it's 92 bytes. Maybe I
just counted wrong last time. Or maybe link_path_walk is different enough).</p>

<p>Oh, and I think the actual ->follow_link pushes 8 bytes of arguments.</p>

<p>So doing a recursion 5 deep is ~500 bytes of stack space.</p>

<p>That was my point: the _only_ difference between "explicit recursion" and
"recurse by hand" is where and how those intermediate bytes are allocated.
There is nothing inherently "evil" in letting the compiler do it for you.</p>

<p>And as you found out yourself, a recursion limit of 5 is actually a lot
more than people normally use.</p>

<p>But hey, guys, if you want to linearize the recursion, I'm easily swayed
by numbers. I've actually done the numbers for stack usage (exactly because
I worried about it some time ago), and I don't worry too much about that
number. I also don't worry about the number "5", simply because I don't
think I've _ever_ gotten a complaint about it that I remember.</p>

<p>But there are other numbers, like performance (sometimes linearizing
recursion loses, sometimes it wins), or somebody doing the math on ia-64 and
showing that the 100 bytes/level on x86 is actually more like 2kB on ia-64
and totally unacceptable.</p>

<p>But trying to sell this thing to me as a "recursion is evil and must be
stamped out" just doesn't work.</p>

</quote>

<p>Andries snapped his fingers, and said:</p>

<quote who="Andries Browuer">

<p>I realize you probably missed the history. There was a discussion about
large stack variables found by Checker, and how Checker might have difficulties
getting the max stack right in the presence of this recursion.</p>

<p>I remarked that it is trivial to remove the recursion, should anyone
be interested in that, but Al called such claims false and wrong, so I did
half of the work (removing the filesystems from the loop) three days ago,
and Al said that it was nothing yet, actually removing the recursion would
be hell. So I removed the recursion yesterday evening. A demo project.</p>

<p>(And you were cc'ed only because I happened to come across what I think
is a refcounting buglet in the present code.)</p>

<p>Have not heard from Al yet, but my secret hope is that he'll soon come
back and tell me that my code is ugly and contains seventeen bugs but that
he has done it right with elegant, fast and maintainable code.</p>

<p>In the meantime, no, this was not a patch submission, it was for discussion
and because Al wanted to see actual code.</p>

</quote>

<p>There was no reply.</p>

</section>

</kc>

