<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="42" date="08 Nov 1999 00:00:00 -0800" />

<stats posts="1024" size="4085" contrib="405" multiples="186" lastweek="146">

<person posts="61" size="163" who="Alan Cox " />
<person posts="28" size="114" who="Andrea Arcangeli " />
<person posts="18" size="54" who="Tigran Aivazian " />
<person posts="16" size="67" who="David Woodhouse " />
<person posts="15" size="41" who="" />
<person posts="13" size="50" who="Karsten Keil " />
<person posts="13" size="46" who="Jeff Garzik " />
<person posts="13" size="39" who="&quot;Stephen C. Tweedie&quot; " />
<person posts="13" size="34" who="Richard Gooch " />
<person posts="12" size="43" who=" (Rogier Wolff)" />
<person posts="11" size="51" who="Alexander Viro " />
<person posts="11" size="45" who="Andre Hedrick " />
<person posts="11" size="38" who="&quot;Richard B. Johnson&quot; " />
<person posts="10" size="61" who="Riley Williams " />
<person posts="10" size="30" who="&quot;Theodore Y. Ts'o&quot; " />
<person posts="9" size="54" who="Wakko Warner " />
<person posts="9" size="48" who="Marc Merlin " />
<person posts="9" size="35" who="Pavel Machek " />
<person posts="9" size="29" who="&quot;Theodore Y. Ts'o&quot; " />
<person posts="9" size="27" who="Horst von Brand " />
<person posts="8" size="48" who="Manfred Spraul " />
<person posts="8" size="24" who="&quot;David Schwartz&quot; " />
<person posts="8" size="23" who="Michael Elizabeth Chastain " />
<person posts="7" size="28" who="Henner Eisen " />
<person posts="7" size="21" who=" (Guest section DW)" />
<person posts="7" size="20" who="&quot;Leiden, Soren&quot; " />
<person posts="6" size="54" who="Jeremy Katz " />
<person posts="6" size="28" who="&quot;Adam J. Richter&quot; " />
<person posts="6" size="22" who="&quot;Steven N. Hirsch&quot; " />
<person posts="6" size="22" who=" (H. Peter Anvin)" />
<person posts="6" size="22" who="Martin Schulz " />
<person posts="6" size="20" who="Matti Aarnio " />
<person posts="6" size="20" who="Jesse Pollard " />
<person posts="6" size="17" who="Jes Sorensen " />
<person posts="5" size="27" who="Richard Guy Briggs " />
<person posts="5" size="23" who="Jens Axboe " />
<person posts="5" size="21" who="" />
<person posts="5" size="19" who="Matthew Wilcox " />
<person posts="5" size="17" who="Kristian Koehntopp " />
<person posts="5" size="16" who="=?iso-8859-1?Q?Ra=FAl_Alexis_Betancort_Santana?= " />
<person posts="5" size="16" who="Trond Myklebust " />
<person posts="5" size="16" who="Rik van Riel " />
<person posts="5" size="15" who="Thomas Molina " />
<person posts="5" size="13" who="Patrick Lerda " />
<person posts="5" size="13" who="Dan Hollis " />
<person posts="5" size="13" who="" />
<person posts="5" size="11" who="f5ibh " />
<person posts="4" size="22" who="Luca Montecchiani " />
<person posts="4" size="19" who="Borislav Deianov " />
<person posts="4" size="17" who=" (Michael Hunold)" />
<person posts="4" size="16" who="David Weinehall " />
<person posts="4" size="16" who="Ilpo Ruotsalainen " />
<person posts="4" size="15" who="Ralf Baechle " />
<person posts="4" size="14" who="Gerard Roudier " />
<person posts="4" size="13" who="kees " />
<person posts="4" size="13" who="&quot;Jakma, Paul&quot; " />
<person posts="4" size="12" who="Keith Owens " />
<person posts="4" size="12" who="Jim Woodward " />
<person posts="4" size="12" who="&quot;Jim Nance&quot; " />
<person posts="4" size="12" who="Kelly STriker Price " />
<person posts="4" size="12" who="Ingo Molnar " />
<person posts="4" size="12" who="" />
<person posts="4" size="11" who="&quot;Garst R. Reese&quot; " />
<person posts="4" size="11" who="Shawn Leas " />
<person posts="3" size="69" who="Thomas Sailer " />
<person posts="3" size="23" who="hechengdong " />
<person posts="3" size="21" who="&quot;Rob Schmaling&quot; " />
<person posts="3" size="20" who="Malcolm Beattie " />
<person posts="3" size="18" who="&quot;David S. Miller&quot; " />
<person posts="3" size="16" who="Lars Heete " />
<person posts="3" size="15" who="&quot;Michael H. Warfield&quot; " />
<person posts="3" size="15" who="Jeremy Hansen " />
<person posts="3" size="14" who="Mark Hagger " />
<person posts="3" size="13" who="Peter Desnoyers " />
<person posts="3" size="13" who="Savochkin Andrey Vladimirovich " />
<person posts="3" size="12" who="John Langford " />
<person posts="3" size="11" who="" />
<person posts="3" size="10" who="Mikael Pettersson " />
<person posts="3" size="10" who="Dennis Hou " />
<person posts="3" size="10" who="Lech Szychowski " />
<person posts="3" size="10" who="Frank van Maarseveen " />
<person posts="3" size="10" who="Jussi Hamalainen " />
<person posts="3" size="10" who="Jan Kara " />
<person posts="3" size="10" who="Jamie Lokier " />
<person posts="3" size="9" who="Linus Torvalds " />
<person posts="3" size="9" who="Olaf Titz " />
<person posts="3" size="9" who="Bret Indrelee " />
<person posts="3" size="9" who="Chris Noe " />
<person posts="3" size="9" who="Philippe Troin " />
<person posts="3" size="8" who="Helge Hafting " />
<person posts="3" size="8" who="Aaron Sethman " />
<person posts="3" size="8" who="Enrico Demarin " />
<person posts="3" size="8" who="" />
<person posts="3" size="8" who=" (Bob_Tracy)" />
<person posts="3" size="8" who="Nasser Abbasi " />
<person posts="3" size="8" who="Tim Waugh " />
<person posts="3" size="8" who="Marcelo Tosatti " />
<person posts="3" size="8" who="Daniel Roesen " />
<person posts="3" size="7" who="&quot;Matthew Clark&quot; " />
<person posts="2" size="40" who="&quot;Kristopher Kersey&quot; " />
<person posts="2" size="33" who="Peter Samuelson " />
<person posts="2" size="14" who="Peter Onion " />
<person posts="2" size="14" who="&quot;Scott G. Miller&quot; " />
<person posts="2" size="14" who="Alexandre Hautequest " />
<person posts="2" size="14" who="Vincent Zweije " />
<person posts="2" size="13" who="Harald Koenig " />
<person posts="2" size="12" who="Thomas Zimmerman " />
<person posts="2" size="10" who="Michael Cummins " />
<person posts="2" size="10" who="Chuck Phillips " />
<person posts="2" size="10" who="Simon Huggins " />
<person posts="2" size="9" who="Stephane Casset " />
<person posts="2" size="8" who="" />
<person posts="2" size="8" who="&quot;Nicholas R LeRoy&quot; " />
<person posts="2" size="8" who="Benno Senoner " />
<person posts="2" size="8" who="Robert " />
<person posts="2" size="8" who="Brian Grayson " />
<person posts="2" size="8" who="&quot;P.A.M. van Dam&quot; " />
<person posts="2" size="8" who="Peter Rival " />
<person posts="2" size="7" who="Henning Sauer " />
<person posts="2" size="7" who="&quot;George T. Talbot&quot; " />
<person posts="2" size="7" who="Alan Watson " />
<person posts="2" size="7" who="Matthew Dharm " />
<person posts="2" size="7" who="Brian Hall " />
<person posts="2" size="7" who="M Sweger " />
<person posts="2" size="7" who=" (Peter Benie)" />
<person posts="2" size="7" who="&quot;Adam D. Bradley&quot; " />
<person posts="2" size="7" who="Andreas Bombe " />
<person posts="2" size="7" who="&quot;Michael A. Rodionov&quot; " />
<person posts="2" size="7" who="Hannes Reinecke " />
<person posts="2" size="7" who="Michal Jaegermann " />
<person posts="2" size="7" who="&quot;Mike A. Harris&quot; " />
<person posts="2" size="7" who="Alan Modra " />
<person posts="2" size="7" who="Jerry Peters " />
<person posts="2" size="7" who="&quot;Marty Leisner&quot; " />
<person posts="2" size="7" who="Todd " />
<person posts="2" size="7" who="Hugo Bouckaert " />
<person posts="2" size="7" who="Pete Zaitcev " />
<person posts="2" size="7" who="Jan Vroonhof " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Werner Almesberger " />
<person posts="2" size="7" who="Doug Alcorn " />
<person posts="2" size="6" who="Lee Rhodes " />
<person posts="2" size="6" who="&quot;Chris Jones&quot; " />
<person posts="2" size="6" who="Dancer " />
<person posts="2" size="6" who="Andi Kleen " />
<person posts="2" size="6" who="&quot;H. Peter Anvin&quot; " />
<person posts="2" size="6" who="&quot;Kelly A. Price&quot; " />
<person posts="2" size="6" who=" (Miquel van Smoorenburg)" />
<person posts="2" size="6" who="Richard Dynes " />
<person posts="2" size="6" who="Andi Kleen " />
<person posts="2" size="6" who="SK " />
<person posts="2" size="6" who="GOMBAS Gabor " />
<person posts="2" size="6" who=" (Arjan van de Ven)" />
<person posts="2" size="6" who="Thomas Speck " />
<person posts="2" size="6" who="Douglas Gilbert " />
<person posts="2" size="6" who="Steven Roberts " />
<person posts="2" size="6" who="Jeremy Fitzhardinge " />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="lars brinkhoff " />
<person posts="2" size="6" who="Dimitris Margaritis " />
<person posts="2" size="6" who="Paul Rusty Russell " />
<person posts="2" size="6" who="Andreas Tobler " />
<person posts="2" size="6" who="Levent =?iso-8859-1?Q?G=FCndogdu?= " />
<person posts="2" size="6" who="Fuzzy Fox " />
<person posts="2" size="6" who="&quot;Leonard N. Zubkoff&quot; " />
<person posts="2" size="6" who="Robert Dinse " />
<person posts="2" size="6" who="Rogerio Brito " />
<person posts="2" size="5" who="Dominik Kubla " />
<person posts="2" size="5" who="The Doctor What " />
<person posts="2" size="5" who=" (Arjan van de Ven)" />
<person posts="2" size="5" who="Jim Niemira " />
<person posts="2" size="5" who="Mike Galbraith " />
<person posts="2" size="5" who=" (V. Ganesh)" />
<person posts="2" size="5" who="bert hubert " />
<person posts="2" size="5" who="Thomas Davis " />
<person posts="2" size="5" who="&quot;Jones D (ISaCS)&quot; " />
<person posts="2" size="5" who="Greg Maxwell " />
<person posts="2" size="5" who="Philip Blundell " />
<person posts="2" size="5" who="G Jalaja Devi " />
<person posts="2" size="5" who="&quot;Albert D. Cahalan&quot; " />
<person posts="2" size="5" who="Michael Cunningham " />
<person posts="2" size="5" who="Tonglu Yi " />
<person posts="2" size="4" who="&quot;Alan Curry&quot; " />
<person posts="2" size="4" who="visi0n " />
<person posts="2" size="4" who="Sasi Peter " />
<person posts="1" size="76" who="" />
<person posts="1" size="50" who="David Odin " />
<person posts="1" size="21" who="Ben LaHaise " />
<person posts="1" size="21" who="&quot;Ivan Kossev&quot; " />
<person posts="1" size="16" who="Lim Swee Tat " />
<person posts="1" size="13" who="Brad Proctor " />
<person posts="1" size="13" who="Mario Mikocevic " />
<person posts="1" size="8" who="Jens Benecke " />
<person posts="1" size="8" who="Phil Wilshire " />
<person posts="1" size="8" who="Richard A Frewin - QMW " />
<person posts="1" size="7" who="Jim Horning " />
<person posts="1" size="7" who="Daniel Stone " />
<person posts="1" size="7" who="Juanjo Ciarlante " />
<person posts="1" size="7" who="David Whysong " />
<person posts="1" size="7" who="Arnd Bergmann " />
<person posts="1" size="6" who="Gert Vervoort " />
<person posts="1" size="6" who="John Finlay " />
<person posts="1" size="6" who="Ed Grimm " />
<person posts="1" size="6" who="Thomas Bierweiler " />
<person posts="1" size="6" who="Paul Schulz " />
<person posts="1" size="6" who="James " />
<person posts="1" size="6" who="Richard Brunner " />
<person posts="1" size="6" who="&quot;Johan Kullstam&quot; " />
<person posts="1" size="6" who="Ulrich Drepper " />
<person posts="1" size="5" who="Murray Stokely " />
<person posts="1" size="5" who="Peter Bouthoorn " />
<person posts="1" size="5" who="Jim Blandy " />
<person posts="1" size="5" who="John Ripley " />
<person posts="1" size="5" who="David Edwards " />
<person posts="1" size="5" who="Martin Andersen " />
<person posts="1" size="5" who="Tony Chung " />
<person posts="1" size="4" who="Marc Lefranc " />
<person posts="1" size="4" who="Eli Carter " />
<person posts="1" size="4" who="&quot;L. Fehrle&quot; " />
<person posts="1" size="4" who="Frank Wales " />
<person posts="1" size="4" who="Marc Mutz " />
<person posts="1" size="4" who="Urban Widmark " />
<person posts="1" size="4" who="Janos Farkas " />
<person posts="1" size="4" who="T V Govind " />
<person posts="1" size="4" who="Admin Mailing Lists " />
<person posts="1" size="4" who="Neil Brown " />
<person posts="1" size="4" who="Johannes Erdfelt " />
<person posts="1" size="4" who="Uwe Bonnes " />
<person posts="1" size="4" who="&quot;Obsidian&quot; " />
<person posts="1" size="4" who="Tommy van Leeuwen " />
<person posts="1" size="4" who="kaz / Yasuhide OOMORI " />
<person posts="1" size="4" who="Pavel Minev Penev " />
<person posts="1" size="4" who="&quot;Joseph Gooch&quot; " />
<person posts="1" size="4" who="Ulrich Windl " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Catalin Muresan " />
<person posts="1" size="4" who="Adam Kumiszcza " />
<person posts="1" size="4" who="Achim Flammenkamp " />
<person posts="1" size="4" who="Enrico Demarin " />
<person posts="1" size="4" who="Davide Libenzi " />
<person posts="1" size="4" who="&quot;Christopher E. Brown&quot; " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="&quot;James Turinsky (LKML)&quot; " />
<person posts="1" size="4" who="Andreas Gietl " />
<person posts="1" size="4" who="&quot;Brandon S. Allbery KF8NH&quot; " />
<person posts="1" size="4" who="James Manning " />
<person posts="1" size="4" who="James R Bruce " />
<person posts="1" size="4" who="Tim Walberg " />
<person posts="1" size="4" who="Rui Sousa " />
<person posts="1" size="4" who="Adam Rheaume " />
<person posts="1" size="4" who=" (Marc Haber)" />
<person posts="1" size="4" who="Andreas Jaeger " />
<person posts="1" size="4" who="Mattias Sandgren " />
<person posts="1" size="4" who="Greg Wolodkin " />
<person posts="1" size="4" who="Dominique LARCHEY-WENDLING " />
<person posts="1" size="4" who="&quot;Sean Hunter&quot; " />
<person posts="1" size="3" who="Darrell Wright " />
<person posts="1" size="3" who="Eilert Brinkmann " />
<person posts="1" size="3" who=" (John Alvord)" />
<person posts="1" size="3" who="David Winchell " />
<person posts="1" size="3" who="Erik Mouw " />
<person posts="1" size="3" who=" (Kanoj Sarcar)" />
<person posts="1" size="3" who=" (Ben Pfaff)" />
<person posts="1" size="3" who="&quot;Tom Livingston&quot; " />
<person posts="1" size="3" who=" (Bruce Perens)" />
<person posts="1" size="3" who="Arnaldo Carvalho de Melo " />
<person posts="1" size="3" who="&quot;Dwayne C . Litzenberger&quot; " />
<person posts="1" size="3" who="Jesse Off " />
<person posts="1" size="3" who="Nicolas MONNET " />
<person posts="1" size="3" who="Bruno Semrau " />
<person posts="1" size="3" who=" (Scott Lurndal)" />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Paul Slootman " />
<person posts="1" size="3" who="Catalin BOIE " />
<person posts="1" size="3" who="Peter Svensson " />
<person posts="1" size="3" who="George Gallen " />
<person posts="1" size="3" who="John Kacur " />
<person posts="1" size="3" who="Michael Mess " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Ron Flory " />
<person posts="1" size="3" who="Brian Craft " />
<person posts="1" size="3" who="&quot;Petr Sebor&quot; " />
<person posts="1" size="3" who="=?ISO-8859-1?Q?J=F6rg?= =?ISO-8859-1?Q?Str=F6ttchen?= " />
<person posts="1" size="3" who="Dimitris Margaritis " />
<person posts="1" size="3" who="Franck SICARD " />
<person posts="1" size="3" who="&quot;Henning P. Schmiedehausen&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Folkert van Heusden " />
<person posts="1" size="3" who="Vivek K S " />
<person posts="1" size="3" who="Gerd Knorr " />
<person posts="1" size="3" who="Michael Bacarella " />
<person posts="1" size="3" who="Eleonora Autore " />
<person posts="1" size="3" who="Martin Schulze " />
<person posts="1" size="3" who="=?iso-8859-1?Q?Fran=E7ois=20D=E9sarm=E9nien?= " />
<person posts="1" size="3" who="Mike Shaver " />
<person posts="1" size="3" who="Paul Gammans " />
<person posts="1" size="3" who="Harald Dunkel " />
<person posts="1" size="3" who="Leo Mauro " />
<person posts="1" size="3" who="&quot;Michael J. Hartwick&quot; " />
<person posts="1" size="3" who="Lars Marowsky-Bree " />
<person posts="1" size="3" who="Michael Meskes " />
<person posts="1" size="3" who="Mark Gebhardt " />
<person posts="1" size="3" who="Shannon Aldinger " />
<person posts="1" size="3" who="&quot;Juha Saarinen&quot; " />
<person posts="1" size="3" who="&quot;John J. LeMay Jr.&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Samuli Kaski " />
<person posts="1" size="3" who="&quot;Paul Fulghum&quot; " />
<person posts="1" size="3" who="Dave Mielke " />
<person posts="1" size="3" who="Gabor Lenart " />
<person posts="1" size="3" who="German Jose Gomez Garcia " />
<person posts="1" size="3" who="Andreas Schou Vaerge " />
<person posts="1" size="3" who="Andreas Schwab " />
<person posts="1" size="3" who="&quot;Rupa Schomaker (list)&quot; " />
<person posts="1" size="3" who="Ivan Passos " />
<person posts="1" size="3" who="&quot;Peter Belsanti&quot; " />
<person posts="1" size="3" who=" (Leslie F. Donaldson)" />
<person posts="1" size="3" who="CompWiz " />
<person posts="1" size="3" who="Gergely Madarasz " />
<person posts="1" size="3" who="Dale Amon " />
<person posts="1" size="3" who="&quot;G. Allen Morris III&quot; " />
<person posts="1" size="3" who="Thierry Danis " />
<person posts="1" size="3" who="Britton " />
<person posts="1" size="3" who="Arjan van de Ven " />
<person posts="1" size="3" who="Michael Meskes " />
<person posts="1" size="3" who="Paul Cassella " />
<person posts="1" size="3" who="Alex Belits " />
<person posts="1" size="2" who="Alwyn Schoeman " />
<person posts="1" size="2" who="Magnus Damm " />
<person posts="1" size="2" who="Wolfram Pienkoss " />
<person posts="1" size="2" who="John Kennedy " />
<person posts="1" size="2" who="Post Office Owner " />
<person posts="1" size="2" who="Roger Larsson " />
<person posts="1" size="2" who="Marc Merlin " />
<person posts="1" size="2" who="Martin Dalecki " />
<person posts="1" size="2" who="Andreas Ehliar " />
<person posts="1" size="2" who="&quot;Justin A. Kolodziej&quot; " />
<person posts="1" size="2" who=" (Linus Torvalds)" />
<person posts="1" size="2" who="Michal Vitecek " />
<person posts="1" size="2" who="Frank van Maarseveen " />
<person posts="1" size="2" who="Matthew Kirkwood " />
<person posts="1" size="2" who="Juliusz " />
<person posts="1" size="2" who="Tom Vier " />
<person posts="1" size="2" who="Brian Schau " />
<person posts="1" size="2" who="Frank v Waveren " />
<person posts="1" size="2" who="Jarno Paananen " />
<person posts="1" size="2" who="Julian Thompson " />
<person posts="1" size="2" who="Christian Reis " />
<person posts="1" size="2" who="Parto Chobeiry " />
<person posts="1" size="2" who="Roman Zippel " />
<person posts="1" size="2" who="Martin Mares " />
<person posts="1" size="2" who="Donald Becker " />
<person posts="1" size="2" who="Andrzej Krzysztofowicz " />
<person posts="1" size="2" who="=?ISO-8859-1?Q?Kevin_Ilchmann_J=F8rgensen?= " />
<person posts="1" size="2" who="I Lee Hetherington " />
<person posts="1" size="2" who="Tony Fica " />
<person posts="1" size="2" who="Hank Leininger " />
<person posts="1" size="2" who="Kernel List " />
<person posts="1" size="2" who="Bob Lorenzini " />
<person posts="1" size="2" who="Ury Segal " />
<person posts="1" size="2" who="Adam Schrotenboer " />
<person posts="1" size="2" who="Tuan Hoang " />
<person posts="1" size="2" who="Brion Vibber " />
<person posts="1" size="2" who="John Kacur " />
<person posts="1" size="2" who="Takacs Sandor " />
<person posts="1" size="2" who="lars brinkhoff " />
<person posts="1" size="2" who="Bernhard Rosenkraenzer " />
<person posts="1" size="2" who="Pete Clements " />
<person posts="1" size="2" who="Erik Corry " />
<person posts="1" size="2" who="Arthur Kelly " />
<person posts="1" size="2" who="&quot;Dmitry V.&quot; " />
<person posts="1" size="2" who="Zach Brown " />
<person posts="1" size="2" who="Thomas Leineweber " />
<person posts="1" size="2" who=" (Arjan van de Ven)" />
<person posts="1" size="2" who="Jeff Dike " />
<person posts="1" size="2" who="Taral " />
<person posts="1" size="2" who="&quot;casler, heather&quot; " />
<person posts="1" size="2" who="Benjamin Redelings I " />
<person posts="1" size="2" who="&quot;Marcelo Barbosa Lima&quot; " />
<person posts="1" size="2" who="Vojtech Pavlik " />
<person posts="1" size="2" who="Ted Gervais " />
<person posts="1" size="2" who="Albert Max Lai " />
<person posts="1" size="2" who="Dan Kegel " />
<person posts="1" size="2" who=" (david parsons)" />
<person posts="1" size="2" who="&quot;imel...&quot; " />
<person posts="1" size="2" who="David Cougle " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Sebastian Ip " />
<person posts="1" size="2" who="Oleg Drokin " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Illuminatus Primus " />
<person posts="1" size="2" who="abrigon " />
<person posts="1" size="2" who="Mikulas Patocka " />
<person posts="1" size="2" who="Josef =?iso-8859-1?Q?H=F6=F6k?= " />
<person posts="1" size="2" who="Richard Henderson " />
<person posts="1" size="2" who="Dan Srebnick " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Michael Glickman " />
<person posts="1" size="2" who="Tomas Franke " />
<person posts="1" size="2" who="Bojan Smojver " />
<person posts="1" size="2" who="BOSZORMENYI Zoltan " />
<person posts="1" size="2" who="Paul Flinders " />
<person posts="1" size="2" who="Oleg Drokin " />

</stats>

<section
  title="The Saga Continues: Filesystem Corruption In Stable Series"
  subject="access beyond end of device errors in 2.2.13pre18 AND 2.2.5"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_03/msg00929.html"
  posts="34"
  startdate="21 Oct 1999 00:00:00 -0800"
  enddate="29 Oct 1999 00:00:00 -0800"
>
<topic>Disk Arrays: RAID</topic>
<topic>Disks: IDE</topic>
<topic>Disks: SCSI</topic>
<topic>FS: NFS</topic>
<topic>SMP</topic>

<mention>Paul Jakma</mention>
<mention>Steven N. Hirsch</mention>

<p>This first came up in <kcref subject="Massive e2fs corruption with
2.2.9/10?" startdate="16 Jun 1999 00:00:00 -0800"></kcref>, when the problem of filesystem
corruption in the stable series was first reported. A little progress was
made the following week in <kcref subject="Re: Massive e2fs corruption with
2.2.9/10?" startdate="29 Jun 1999 00:00:00 -0800"></kcref>, but nothing conclusive.
Meanwhile, Alan Cox had inserted some debugging code that became useful in
other ways in <kcref subject="Oops with kernel 2.2.10-ac8"
startdate="04 Jul 1999 00:00:00 -0800"></kcref>. But the problem was still causing frayed
nerves in <kcref subject="ncr53c8xx hack I disagree _strongly_ with"
startdate="18 Jul 1999 00:00:00 -0800"></kcref>. This time, Mark Hagger reported an error
("attempt to access beyond end of device") that would lead to filesystem
corruption with all stable kernels after 2.2.5, and added, <quote who="Mark
Hagger">This problem is really starting to get very worrying indeed, and I
suspect is going to be a real pain to track down. But as it leads to file
system corruption (and I've seen others reporting this in the list), surely
this has to be tracked down pretty urgently? Especially since Redhat are now
shipping 2.2.12 as their distribution kernel!</quote></p>

<p>Alan replied, <quote who="Alan Cox">People are
looking believe me. The little **** is going to die as soon as its found
8)</quote></p>

<p>A number of people reported similar errors and corruption. Tommy van Leeuwen
was one of those, but added that folks seemed to be speculating that all
such problems with the 2.2.x series boiled down to hardware problems. Martin
Schulz also reported on his experiences, saying, <quote who="Martin
Schulz">Well I do have a similar Problem with LVD
Scsi drives (IBM DDRS) connected to an 7890 Adaptec U2W controller (on board
on Asus P2Bs); Intel Pentium II 400MHz, 128MB RAM. Running kernel
2.2.5-22.</quote> He had suspected various hardware components (memory,
cables, scanner, power supply) and tested each in turn. They all checked out
OK, and the problem persisted.</p>

<p>Lech Szychowski reported the same problem with a similar system, but added,
<quote who="Lech Szychowski">2.3.24pre4 seems (so
far, of course) to be free of this problem; by this I mean that 2.3.23pre1
after having been running for the same time as 2.3.24pre4 has now most
likely would have complained.</quote></p>

<p>Steven N. Hirsch reported his first encounter with this problem, and posted
his hardware configuration:</p>

<pre>ASUS P2B-DS w/ 2 x 500Mhz. PIII
IBM 9LZX U2 LVD SCSI disk on built-in Adaptec 7890/1 controller
256 MB PC-100 non-ECC Dimm
Viper 550 AGP video w/ 16 Meg

Kernel 2.2.13 + valinux nfs patches</pre>

<p>He was sure there were no hardware problems with the box, since it had been
totally stable prior to that error. Lech speculated that it might be an SMP
problem, but Martin Schulz (who also reported similar problems) said his box
was a UP system.</p>

<p>Alan suggested that anyone experiencing the problem with any kernel in the
stable tree, should first of all upgrade to the latest kernel (2.2.13) and
see if the problem persisted. Darrell Wright tried this and got the same
errors when using ide-scsi emulation. Accessing files on a cdrom mounted
with ide-scsi emulation turned on, gave the tell-tale error.</p>

<p>Paul Jakma also reported getting the same error under 2.2.13pre12 and
earlier under 2.2.11; he had assumed hardware problems at first, but wasn't
sure anymore, with all the other reports. He described his system:</p>

<pre>AMD K6-233
TMC Via MVP3 board
Buslogic Multimaster.
Seagate Cheetah, IBM DDRS, IBM DGHS.
Errors occured on the DGHS, other drives are scratch space.

Machine patched with latest RAID and knfsd 1.4. NFS server to a couple of
other machines, 1 of which mounts /usr.</pre>

<p>Regarding the likelihood of the problem being caused by hardware, Alan
replied, <quote who="Alan Cox">Most cases are.
However I am sure not every single one is. That makes it really hard to
trace alas.</quote> Paul replied that neither SMP nor SCSI/IDE seemed to be
the common factor, and suggested that it might be knfs. Martin, for one,
couldn't deny it.</p>

<p>Stephen C. Tweedie said that hardware problems and certain knfsd problems
could account for the vast majority of reports, and suggested that everyone
seeing the errors use the most recent knfsd.</p>

<p>P.A.M. van Dam replied that he was getting the error but not using knfsd.
For him, doing extensive IO on a 4-way striped LV triggered the error, while
a single LV gave no problem. Stephen replied:</p>

<quote who="Stephen C. Tweedie">

<p>Yes, but my reply was
to another user with another fault.</p>

<p>This is exactly why this problem is so hard to track down --- when something
random goes wrong in the OS, users often notice it first as filesystem
corruption (I saw exactly the same thing when working on VMS filesystem
internals for DEC).</p>

<p>In this case we have a known knfsd fault which explains some of the
problems. The bulk of the other reports have been traced to hardware
problems, or to memory scribbles caused by other bits of the kernel in
certain specific kernel versions.</p>

<p>If you are only seeing the problem on a specific complex LV volume, then
that suggests that either you are getting data corruption from one of the
drives on that LV (over-long IDE cables, for example, or drives with known
firmware bugs have all shown it in the past), or that there is an LV bug
somewhere.</p>

</quote>

<p>Meanwhile, Martin had followed Stephen's advice and upgraded to
knfsd-1.4.7-7 and kernel 2.2.13, but still saw the error. However, he then
took out knfsd and replaced it with the nfs-server-2.2beta40-1 package. At
first glance, this seemed to solve the problem, but shortly afterwards the
same error started cropping up again.</p>

<p>No solution presented itself on the list.</p>

</section>

<section
  title="Protecting The Kernel From Root"
  subject="Sealing the kernel"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_04/msg00680.html"
  posts="16"
  startdate="26 Oct 1999 00:00:00 -0800"
  enddate="28 Oct 1999 00:00:00 -0800"
>
<topic>Access Control Lists</topic>
<topic>Backward Compatibility</topic>

<mention>Jesse Pollard</mention>
<mention>Horst von Brand</mention>

<p>John Langford and Dimitris Margaritis took an idea from phrack-55, to create
a module that would seal the kernel off, so arbitrary kernel-mode access was
not available to root. This would protect systems from trojan modules. They
had some working code, but they wanted to make it a bit more subtle. They
wanted to allow only certain pre-selected modules to be loadable, and no
others. But John explained:</p>

<quote who="John Langford">

<p>Unfortunately, a problem
develops here, and this is where we would like some advice. We want the
md5sum to run in the kernel because we are thinking of kernel mode as "safe"
and anything in user mode as "unsafe". But the relocation of the module
happens in insmod in (untrusted) user mode. Naturally, modules relocated to
different addresses have different md5sums. There are several possible work
arounds:</p>

<p>

<ol>

<li>

<p>Try to guess the most likely eventual module relocation locations and
allow the md5sum of the relocated module to match any one of the
possibilities.</p>

<p> - messy and likely to fail to work.</p>

</li>

<li>

<p>Shift module relocation into kernel mode doing the md5sum as soon as it
is seen.</p>

<p> - feasible but a fairly large change in the way things are done.  All of a
sudden the create_module syscall is useless.</p>

</li>

<li>

<p>Make create_module pass back a dummy relocation (0x00000000?) then
complete the relocation in kernel mode if the module passes an md5sum.</p>

<p> - inelegant, but maintains backwards compatibility</p>

</li>

<li>

<p>Try to just do an md5sum on unrelocated portions of the module</p>

<p> - nasty and it's unclear that this is "safe".</p>

</li>

</ol>

</p>

<p>Are there other methods? What's best?</p>

</quote>

<p>Aaron Sethman questioned the value of such a project, saying, <quote
who="Aaron Sethman">You have a good idea...But what good is it really when the
person can just go ahead a recompile a kernel...replace the current one and
then cause the system to "crash".  Unless of course you are booting off of
some sort of read-only media(A write protected floppy comes to mind). Also,
another idea, backdoor insmod/modprobe so that your special module doesn't
get loaded again in the future. Its really impossible to protect the machine
from root. Sure you can keep them out of the kernel level stuff. But what
good is that really? The root user could still do nasty things to your
system regardless.</quote></p>

<p>Dimitris explained:</p>

<quote who="Dimitris Margaritis">

<p>Yes, John forgot to
mention that we're assuming boot from a read-only media such as a
write-protected floppy or CD-ROM. We also assume that the rc scripts,
kernel, and all modules to be loaded at boot time (before of course the
sealing module) also reside on that medium.</p>

<p>About your last point, yes, root can do a lot of nasty things, but by
sealing the kernel at least they are constrained to what's available through
kernel services. That may help presumably by disabling a lot of stuff in the
running kernel.</p>

</quote>

<p>Jesse Pollard gave a pointer to <a href="http://www.rsbac.de/rsbac/">Rule
Set Based Access Control (RSBAC) for Linux</a> page, and suggested that a
better general solution would be to make root a non-privileged user.</p>

<p>There was a bit more discussion, but big-time folks like Horst von Brand
felt there were much simpler solutions available.</p>

</section>

<section
  title="Proposal For Half Duplex Serial Support"
  subject="Half duplex serial support"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_04/msg00830.html"
  posts="9"
  startdate="27 Oct 1999 00:00:00 -0800"
  enddate="27 Oct 1999 00:00:00 -0800"
>
<topic>Ioctls</topic>

<p>Riley Williams made the following proposal:</p>

<quote who="Riley Williams">

<p>This is a revision of my
original proposal to take in information since received, not a duplicate,
but I've revised it to state what appears to be the current requirements:</p>

<p>

<ol>

<li>The serial port will provide a flag field to indicate its state, with
the following states being defined:

<ol>

<li>NOT-HERE - This port is not present. This is the default state for all
 ports in the kernel before any probes occur, and is the only valid state
 for ports that are not found to be present.</li>

<li>FULL-DUPLEX - This port is currently operating in full duplex mode.
 This is the default state for all ports for which the hardware has been
 detected.</li>

<li>FULL-TO-RX - This port is in the process of switching from full duplex
 mode to half duplex receiving mode.</li>

<li>RECEIVING - This port is currently receiving data in half duplex mode,
 so anything to transmit is just queued until reception finishes.</li>

<li>RX-TO-TX - This port is in the process of switching from reception to
 transmission of data in half duplex mode. This would only occur when the
 receiver has been idle for a predefined length of time AND the transmit
 buffer is not empty.</li>

<li>TRANSMITTING - This port is currently transmitting data in half duplex
 mode, so is not able to receive anything.</li>

<li>TX-TO-RX - This port is in the process of switching from transmission
 to reception of data in half duplex mode.</li>

<li>RX-TO-FULL - This port is in the process of switching from half duplex
 reception to full duplex mode.</li>

</ol>

</li>

<li>The following hooks should be implemented:

<ol>

<li>A routine to be called to say "Time sufficient for X bytes to be
 received has passed without reception of any bytes, and the port is in the
 RECEIVING mode" (as defined above). The default is for this routine to be
 called only if X (an unsigned quantity) is non-zero.</li>

<li>A routine to be called to say "This port is in the TRANSMITTING mode
 and has run out of data to send".</li>

<li>A routine to be called to switch the transmitter when any of the
 transitions (1.3), (1.5), (1.7) or (1.8) need to occur.</li>

</ol>

</li>

<li>The following additional IOCTL's should be implemented:

<ol>

<li>One to specify the value of X as referred to in (2.1) above.</li>

<li>One to specify that the port should switch to state Y (as defined in
 (1) above) now.</li>

</ol>

</li>

</ol>

</p>

<p>From an implementation viewpoint:</p>

<p>2.1 could be implemented along the lines of "On receipt of each byte, set a
timeout to expire when the time needed for X bytes to be received has
passed, resetting any such timeout that is currently in progress for this
port. Should this timeout actually occur, call the specified routine."</p>

<p>2.2 would be implemented fairly easily, and the default response in the
absence of any other would be to cause transition (1.7) to occur.</p>

<p>2.3 would be specific to the individual line disciplines.</p>

</quote>

<p>David Woodhouse pointed out that part 3 of Riley's proposal did not have to
implement net IOCTLs. He explained that Theodore Y. Ts'o had suggested that
they <quote who="David Woodhouse">extend the API
between the line discipline and the low level driver to support these
requirements, and then implement our half-duplex protocols as line
disciplines.</quote></p>

<p>Speaking for himself, Ted elsewhere added, <quote who="Theodore Y.
Ts'o">What you've laid out is a pretty good design
of what the half-duplex line discpline will need to do; it's where the work
is done that's critical in terms of managing complexity.</quote> He and
Riley then had a brief implementation discussion.</p>

</section>

<section
  title="VFS Inode Structure"
  subject="Question on the VFS inode structure."
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_04/msg00839.html"
  posts="6"
  startdate="27 Oct 1999 00:00:00 -0800"
  enddate="27 Oct 1999 00:00:00 -0800"
>
<topic>BSD</topic>
<topic>Microkernels: Mach</topic>

<mention>Alexander Viro</mention>

<p>T V Govind noticed that a lot of filesystem-specific information was kept in
the VFS (Virtual File System) inode structure. Since the VFS layer is
supposed to be generic, it didn't make sense to him that it would have
information about specific filesystems. He suggested that a pointer into
filesystem-specific data would make the inode structure more reasonable, and
wouldn't force a modification to the VFS layer every time a new filesystem
was supported under Linux. Alexander Viro replied that as soon as the
pagecache changes settled down in the unstable series, the
filesystem-specific data would be moved to external allocation. As of 2.3.1
there were no longer any obstacles to implementation, but there were still a
lot of things to add along the way.</p>

<p>Malcolm Beattie offered an interesting explanation of Digital UNIX:</p>

<quote who="Malcolm Beattie">

<p>I don't remember exactly
what you proposed for this, but if you are intending to replace the inode
structure with a generic one which has a pointer to a separately allocated
per-fs structure then here's a warning. Digital UNIX used to that but had to
change it exactly the opposite way for performance reasons. Its vnode
structure used to have a v_data pointer to a separately allocated per-fs
"private" structure. However, performance was bad because of the pointer
following and the extra fragmentation. They ended up reuniting the two so
that they could allocate the whole (generic + private) structure in one
chunk and then made v_data point to directly after the generic part (i.e.
the start of the no-longer-separate private part).</p>

<p>They did the same with their ungodly mixture of BSD and Mach structures for
tasks and threads: they had separate struct task, struct proc and struct
utask which they combined into a single struct super_task (though still with
pointers between the supposedly "separate" bits) and they had separate
struct thread and struct np_uthread which they combined into struct
super_thread.</p>

</quote>

<p>Alexander was properly appalled.</p>

</section>

<section
  title="Subtle Multiarchitecture Code"
  subject="[PATCH] four warnings and a patch"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_04/msg01072.html"
  posts="20"
  startdate="28 Oct 1999 00:00:00 -0800"
  enddate="31 Oct 1999 00:00:00 -0800"
>
<topic>Microkernels: Mach</topic>

<mention>Alan Cox</mention>
<mention>Dave Jones</mention>

<p>Dennis Hou got some warnings while compiling 2.3.24, and posted a one-line
patch to fix one of them. The warning fixed by the patch was, "8390.c:1092:
warning: unused variable `ei_local'", and the patch merely removed the line
that used that variable. Alan Cox (and others) pointed out that the variable
actually <em>was</em> used, just not in Intel architectures. It was also
very hard to see because of some weird macro indirection. The question had
come up before, and nobody seemed surprised that it had come up again. Dave
Jones asked if maybe the relevant code could be #ifdef'd for the
architectures that used it, so it wouldn't come up again. But Horst von
Brand recommended, <quote who="Horst von Brand">Linus hates #ifdef (and I
concur, for what it is worth). Why not just place the answer I was given
(and which the gentleman doing the latest patch got, and countless others,
no doubt) as a comment near the offending line?</quote></p>

<p>Elsewhere, Dennis did submit a patch that #ifdef'd the line, but Michael
Elizabeth Chastain replied:</p>

<quote who="Michael Elizabeth Chastain">

<p>I think
duplicating that #ifdef is bad because now there are two places where a
maintainer would have to change it.</p>

<p>I recommend just putting a comment in front of NS8390_trigger_send and
letting this problem go.</p>

<p>I tried another fix, which is to make EI_SHIFT(x) always reference its
argument (I was inspired by #define spin_lock in include/linux/spinlock.h).
This fixes the 8390.c warning but breaks pcnet_cs.c.</p>

<p>This little warning isn't worth the trouble.</p>

</quote>

<p>Matthew Wilcox also replied to Dennis' patch, saying, <quote who="Matthew
Wilcox">I don't think this is a good idea. Take a
look at the Mach sources sometime for what happens if you allow this sort of
thing. For example: scsi_ncr53c700.c contains 568 preprocessor lines out of
a total of 3430. It's real spaghetti code.</quote></p>

</section>

<section
  title="Backward Compatibility In The Unstable Tree"
  subject="term issue 2.3.22 &lt;-&gt; 25"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_05/msg00004.html"
  posts="5"
  startdate="28 Oct 1999 00:00:00 -0800"
  enddate="30 Oct 1999 00:00:00 -0800"
>
<topic>Backward Compatibility</topic>

<mention>Jeremy Katz</mention>
<mention>Linus Torvalds</mention>

<p>Soren Leiden reported that 'gnome-terminal' wouldn't run since 2.3.23, while
oddly enough 'rxvt' and 'xterm' both worked fine. Jeremy Katz replied that
he didn't know about 2.3.23, but there was a change to the 'rlimit' struct
in 2.3.24 that could break 'gnome-terminal'. Alan Cox replied that he had
just sent Linus Torvalds a patch to fix this backward compatibility problem.
Soren asked if the problem affected more than just 'gnome-terminal', and
Alan replied, <quote who="Alan Cox">It breaks gnome-terminal and a couple of
other apps that do sanity checking of their potentially setuid environment.
Those that don't care don't trip up,</quote> and added, <quote who="Alan
Cox">Its a syscall bug. Now a fixed one 8)</quote></p>

</section>

<section
  title="Questions And Answers About New Buffer Hash"
  subject="questions about new buffer hash"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9910_05/msg00116.html"
  posts="5"
  startdate="29 Oct 1999 00:00:00 -0800"
  enddate="30 Oct 1999 00:00:00 -0800"
>
<topic>Disk Arrays: RAID</topic>
<topic>Disks: IDE</topic>
<topic>Disks: SCSI</topic>
<topic>FS: ext2</topic>
<topic>FS: procfs</topic>

<p>Andrea Arcangeli noticed that 2.2.14pre12 merged a new buffer hashtable from
David S. Miller. In David's code was the comment (quoted by Andrea),
<quote who="David S. Miller">After several hours of
tedious analysis, the following hash function won. Do not mess with it...
-DaveM</quote> Andrea asked if he could see the analysis. David replied:</p>

<quote who="David S. Miller">

<p>First I modified the
kernel such that I could dump the active buffer head state into user space
at any point in time. I created a new procfs node, /proc/bcache, which allow
this. It dumped raw structures which presented, for each currently active
buffer head, only the elements of the buffer head structure which the hash
function cares about.</p>

<p>Next, using this kernel, I configured several block device configurations to
get a decent mix of block device numbers. For the most part the
configurations were composed of varying ratio'd combinations of SCSI disks,
IDE disks, and RAID volumes of the previous two.</p>

<p>On the configurations mentioned I would run two sets of tests to fill up the
buffer cache. The first set would be to fill the disks up with tons of
directories and other metadata, then run a "find -type f" to fill as much of
main memory with buffer cache data as I could. The second test used "dbench
X" where X was chosen such that 2.2.x (which doesn't have your LRU changes
nor the new page cache stuff) only got minimal memory pressure and main
memory held most of the written dirty data and metadata created by the
benchmark.</p>

<p>During 1 second intervals, and also right after each test set, buffer cache
snapshots were taken using my /proc/bcache interface and stored into files.</p>

<p>Next using this test data acquired from the machines I wrote a simulator.
Into which various hash functions could be plugged in and various statistics
about the distribution of the hash input bits could be obtained.</p>

<p>The simulator would simply use the hash function you selected, the hash
table size you tell it, and build a hash table from the dump file to get a
snapshot of buffer cache hash table state for any one of the dumps obtained
during the test runs done above. It would print out all sorts of useful
statistics such as longest hash chain length, shortest, average length, etc.</p>

<p>At this point I had all of the data and tools necessary to perform the
analysis.</p>

<p>The next task of course was hash function experimentation and trying to
quantize something about the behavior of the bits in the hash input values.</p>

<p>The simulator was first given the old buffer cache hash function, plus
another function which just took the device/blocknr and jumbled all of the
bits around evenly into the hash modulo bits. The latter was found to act
better than the existing hash, but still left a few medium to long sized
chains during the simulations.</p>

<p>To come up with the final hash function seen in the code right now I
analyzed the bit changing distribution of each bit in each hash function
input value from all the buffer cache state dumps.</p>

<p>Each bit in each of the two inputs was assigned a "changing priority" by the
simulator. A bit which changed more often was assigned a higher priority. So
for example a bit which was 0 half of the time and 1 half of the time would
have the highest possible priority.</p>

<p>Bits which changed rarely or not at all are of no use to the hash, since
they will not change the value much if at all. Bits which have a high rate
of change, if possitioned in non-conflicting spots within the hash, will
aide the distribution of the hash function.</p>

<p>With that in mind, and my bit changing priorities, I decided upon the
positions where block encompassing high priority bit sets belonged within
the hash modulo encompassing bits. This is how the hash function you see was
derived.</p>

<p>Finally, I took this new hash function and plugged it into the simulator. It
performed better than the other two test hash functions, and had the best
distribution for all hash table size selections. On average the distribution
was at worst %92 off of an ideal perfect even distribution. No hash function
is perfect, and perfection was not what was strived for here.</p>

<p>I enclose below the dump hash analysis program in it's utter RAW form I left
it in when I finished my buffer cache hash function tuning.</p>

<p>The hash table size is chosen by the HSHIFT macro, and the hash function is
controlled by the HASH macro. Like I said this thing is in a very RAW form,
which was fine for me since I had this constantly recompiled and in an
editor during my work which is all I needed. I could turn on and off various
forms of statistics as I needed them using preprossor directives.</p>

</quote>

<p>Andrea gave many thanks for the information, and had two points to make in
response. First, he said that David hadn't taken account of the time needed
to compute the hash function. With an empty hash table, the cost of creating
the table might be a real-world concern. David replied:</p>

<quote who="David S. Miller">

<p>Yes I most certainly
did, I count processor cycles for a living in the work I do. Anyone who
knows me well will tell you that I'll completely rearchitect the trap
handling on UltraSparc from scratch just to save 2 processor cycles in the
trap entry/exit code for that platform.</p>

<p>The computational cost in real life means:</p>

<ol>

<li>Some _constant_ number of processor cycles</li>

<li>Some _constant_ set of instruction cache lines to hold to hash
computation code</li>

</ol>

<p>Compare this (in real life) to the cost of:</p>

<ol>

<li>_Non-constant_ extra traversals through the main hash chain loop</li>

<li>_Non-constant_ memory references assosciated with touching significantly
more than (nr_buffer_heads / nr_hash_chains) buffer heads.</li>

</ol>

<p>And furthermore, I did not use any multiplications or other multi-cycle
operations in the hash function.</p>

<p>Furthermore, if the hash table is almost empty, there isn't much buffer
cache activity is there? So whatever small added cost my new hash function
has is lost on the profiling radar compared to whatever other things the
system must be doing.</p>

</quote>

<p>Andrea replied, having done some benchmarks to compare 2.2.12 hash table
creation times with the new 2.2.14pre2's hash table creation times. His
results seemed to show that David's code used 2.6 times the time as the
previous code.</p>

<p>Andrea's other point, in his initial reply to David's long explanation, was
that David's test-data may not have been generic enough. In particular,
Andrea was concerned that his hash function may have been unintentionally
optimized for ext2 (or ext2+raid) patterns. He explained, <quote who="Andrea
Arcangeli">This because for example the metadata on
ext2 can't flow on the whole disk (there's no inode map in ext2) and
depending on the layout of your filesystem and the size of your hashtable,
you may found the per-group-fixed-located metadata colliding in very special
(not generic) buckets (and so you may need to ignore some special bit in the
block_nr that is never hit by metadata writes). So it's not obvious to me
that the fixed bits remains the same without using ext2 for example.</quote>
David replied:</p>

<quote who="David S. Miller">

<p>I used UFS, MINIX, and
ISO9660 file systems in my tests. I did not explicitly list the filesystem
types I had used in my initial response, for this I apologize.</p>

<p>If it is impossible to generate a perfect hash for all input values, then
some data set must be chosen to act as one which is representative of the
data upon which the hash function can be expected to act.</p>

<p>I believe the data sets I chose to use are something a bit more than
"empirical" as you have described it, and are a good representation of the
data sets which will be seen by the general populace of Linux users.</p>

</quote>

</section>

</kc>
