<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="45" date="06 Dec 1999 00:00:00 -0800" />

<intro>

<p>Since there was no KT last week, this issue tries to cover the past two
weeks.</p>

</intro>

<stats posts="1827" size="8248" contrib="593" multiples="259" lastweek="167">

<person posts="91" size="259" who="Alan Cox " />
<person posts="42" size="149" who="Alexander Viro " />
<person posts="41" size="150" who="Pavel Machek " />
<person posts="36" size="242" who="Ingo Molnar " />
<person posts="31" size="113" who="Linus Torvalds " />
<person posts="25" size="98" who="Keith Owens " />
<person posts="25" size="72" who="Tigran Aivazian " />
<person posts="23" size="173" who="Andrea Arcangeli " />
<person posts="21" size="177" who="Jamie Lokier " />
<person posts="19" size="107" who="Riley Williams " />
<person posts="19" size="75" who="Manfred Spraul " />
<person posts="19" size="72" who="&quot;David Schwartz&quot; " />
<person posts="19" size="69" who="Peter Samuelson " />
<person posts="17" size="53" who="Richard Gooch " />
<person posts="16" size="64" who="" />
<person posts="16" size="62" who="Andi Kleen " />
<person posts="16" size="55" who="&quot;Theodore Y. Ts'o&quot; " />
<person posts="14" size="92" who="James Simmons " />
<person posts="14" size="66" who="&quot;Ulrich Windl&quot; " />
<person posts="14" size="64" who="&quot;Richard B. Johnson&quot; " />
<person posts="14" size="63" who="Bret Indrelee " />
<person posts="14" size="48" who="Dan Kegel " />
<person posts="13" size="61" who="James Manning " />
<person posts="13" size="59" who="Alex Buell " />
<person posts="13" size="51" who="Andre Hedrick " />
<person posts="13" size="50" who="Matthew Wilcox " />
<person posts="13" size="44" who="&quot;Theodore Y. Ts'o&quot; " />
<person posts="13" size="42" who="" />
<person posts="13" size="38" who="&quot;Stephen C. Tweedie&quot; " />
<person posts="12" size="106" who="Alexandre Hautequest " />
<person posts="12" size="50" who=" (Kai Henningsen)" />
<person posts="12" size="49" who=" (H. Peter Anvin)" />
<person posts="12" size="40" who="Guest section DW " />
<person posts="11" size="56" who="Jeff Garzik " />
<person posts="11" size="41" who="" />
<person posts="11" size="40" who=" (Rogier Wolff)" />
<person posts="10" size="38" who="Karim Yaghmour " />
<person posts="10" size="28" who=" (Miquel van Smoorenburg)" />
<person posts="9" size="96" who="&quot;Jeff V. Merkey&quot; " />
<person posts="9" size="61" who="Wolfgang Walter " />
<person posts="9" size="39" who="Robert Redelmeier " />
<person posts="9" size="33" who="&quot;Albert D. Cahalan&quot; " />
<person posts="9" size="30" who="Dominik Kubla " />
<person posts="9" size="30" who="Oliver Xymoron " />
<person posts="8" size="123" who="Raju K V " />
<person posts="8" size="55" who="Martin Dalecki " />
<person posts="8" size="51" who="Jesse Pollard " />
<person posts="8" size="49" who="Russell King " />
<person posts="8" size="39" who="Wakko Warner " />
<person posts="8" size="37" who="Sergey Kubushin " />
<person posts="8" size="26" who="Trond Myklebust " />
<person posts="8" size="24" who="Eleonora Autore " />
<person posts="7" size="75" who="&quot;Benjamin C.R. LaHaise&quot; " />
<person posts="7" size="60" who="Brian Gerst " />
<person posts="7" size="41" who="Pjotr Kourzanoff " />
<person posts="7" size="30" who="Linux Lists " />
<person posts="7" size="27" who="Jens Benecke " />
<person posts="7" size="25" who="Hans Reiser " />
<person posts="7" size="25" who="Eric Lowe " />
<person posts="6" size="110" who="Chuck Lever " />
<person posts="6" size="35" who="Chris Noe " />
<person posts="6" size="26" who="Magnus Damm " />
<person posts="6" size="21" who="" />
<person posts="6" size="20" who="Andreas Schwab " />
<person posts="6" size="18" who=" (Arjan van de Ven)" />
<person posts="5" size="43" who="Andrey Panin " />
<person posts="5" size="43" who="Tonglu Yi " />
<person posts="5" size="28" who=" (Jim Gettys)" />
<person posts="5" size="27" who="Christoph Rohland " />
<person posts="5" size="24" who="Simon Kirby " />
<person posts="5" size="22" who="Artur Skawina " />
<person posts="5" size="22" who="&quot;Petr Vandrovec Ing. VTEI&quot; " />
<person posts="5" size="21" who="Harald Koenig " />
<person posts="5" size="20" who=" (Scott Lurndal)" />
<person posts="5" size="20" who="Marc Lehmann " />
<person posts="5" size="17" who="Andi Kleen " />
<person posts="5" size="16" who="David Monniaux " />
<person posts="5" size="16" who="Jan-Benedict Glaw " />
<person posts="5" size="16" who="Ferdinand Prantl " />
<person posts="5" size="15" who="Paul Rusty Russell " />
<person posts="5" size="15" who="Jeremy Hansen " />
<person posts="5" size="15" who="Jes Sorensen " />
<person posts="5" size="15" who="Martin Mares " />
<person posts="5" size="14" who="Ralf Baechle " />
<person posts="5" size="14" who="Matthew Kirkwood " />
<person posts="5" size="14" who="&quot;David S. Miller&quot; " />
<person posts="5" size="13" who="" />
<person posts="4" size="28" who="Petri Kaukasoina " />
<person posts="4" size="23" who="William Stearns " />
<person posts="4" size="23" who="&quot;Emil S Hansen&quot; " />
<person posts="4" size="22" who="Richard Henderson " />
<person posts="4" size="20" who="Larry Woodman " />
<person posts="4" size="20" who="Don Howard " />
<person posts="4" size="17" who="Chad Miller " />
<person posts="4" size="15" who="Stelian Pop " />
<person posts="4" size="15" who="Larry McVoy " />
<person posts="4" size="14" who="&quot;Andrew V. Samoilov&quot; " />
<person posts="4" size="14" who="" />
<person posts="4" size="14" who="Jim Thompson " />
<person posts="4" size="13" who="Dancer " />
<person posts="4" size="13" who="Tuukka Toivonen " />
<person posts="4" size="12" who="TenThumbs " />
<person posts="4" size="12" who="" />
<person posts="4" size="12" who="Yasuhide OOMORI " />
<person posts="4" size="11" who="&quot;Admin&quot; " />
<person posts="4" size="11" who="&quot;Jones D (ISaCS)&quot; " />
<person posts="4" size="11" who="Philip Blundell " />
<person posts="4" size="10" who="Dan Hollis " />
<person posts="4" size="10" who="Aaron Tiensivu " />
<person posts="4" size="10" who="Tim Waugh " />
<person posts="4" size="9" who="Fernando Barreto " />
<person posts="3" size="96" who="&quot;Curt McNamee&quot; " />
<person posts="3" size="23" who="Mike Galbraith " />
<person posts="3" size="21" who="Steve Sparks " />
<person posts="3" size="21" who="Serge Robyns " />
<person posts="3" size="21" who="Arthur Pedyczak " />
<person posts="3" size="20" who="David Weinehall " />
<person posts="3" size="20" who="Adam Fritzler " />
<person posts="3" size="18" who="Horst von Brand " />
<person posts="3" size="16" who="Drew Bertola " />
<person posts="3" size="15" who="Tim Walberg " />
<person posts="3" size="15" who="Francois-Rene Rideau " />
<person posts="3" size="14" who="Jon Masters " />
<person posts="3" size="14" who="Edward Schlunder " />
<person posts="3" size="13" who="Paul Gortmaker " />
<person posts="3" size="13" who="Phillip Ezolt " />
<person posts="3" size="13" who="&quot;Mike A. Harris&quot; " />
<person posts="3" size="12" who="Valentin Podlovchenko " />
<person posts="3" size="12" who="Mike Coleman " />
<person posts="3" size="12" who="Gert Vervoort " />
<person posts="3" size="11" who="&quot;Peter T. Breuer&quot; " />
<person posts="3" size="11" who="Anton Ivanov " />
<person posts="3" size="11" who="Chris Wing " />
<person posts="3" size="10" who="David Woodhouse " />
<person posts="3" size="10" who="David Edwards " />
<person posts="3" size="10" who="&quot;Khimenko Victor&quot; " />
<person posts="3" size="10" who="Frank van Maarseveen " />
<person posts="3" size="10" who="Matti Aarnio " />
<person posts="3" size="10" who=" (david parsons)" />
<person posts="3" size="10" who="" />
<person posts="3" size="10" who="Peter Desnoyers " />
<person posts="3" size="10" who="Derek Martin " />
<person posts="3" size="9" who="Lars Marowsky-Bree " />
<person posts="3" size="9" who="Reine Gill " />
<person posts="3" size="9" who="Christoph Lameter " />
<person posts="3" size="9" who="Jens Axboe " />
<person posts="3" size="9" who="Trever Adams " />
<person posts="3" size="9" who="Mikulas Patocka " />
<person posts="3" size="9" who="Eric Pouech " />
<person posts="3" size="9" who="&quot;casler, heather&quot; " />
<person posts="3" size="9" who="&quot;Jakma, Paul&quot; " />
<person posts="3" size="9" who="" />
<person posts="3" size="9" who="Matthias Andree " />
<person posts="3" size="8" who="Coy A Hile " />
<person posts="3" size="8" who="Hirling Endre " />
<person posts="3" size="8" who="Jonathan Walther " />
<person posts="3" size="8" who="Andreas Tobler " />
<person posts="3" size="8" who="Raul Miller " />
<person posts="3" size="8" who="" />
<person posts="3" size="8" who="Michael Sobolev " />
<person posts="3" size="7" who="&quot;Garst R. Reese&quot; " />
<person posts="2" size="98" who="Michael E Brown " />
<person posts="2" size="75" who="Brad Douglas " />
<person posts="2" size="53" who="&quot;Peter \&quot;Bluefish\&quot; Magnusson&quot; " />
<person posts="2" size="47" who="Ramses Smeyers " />
<person posts="2" size="40" who="Richard A Nelson " />
<person posts="2" size="23" who="swoop " />
<person posts="2" size="20" who="Ted Cabeen " />
<person posts="2" size="13" who="Geoff Davis " />
<person posts="2" size="12" who="Deon Stoltz " />
<person posts="2" size="12" who="Hannes Reinecke " />
<person posts="2" size="12" who="&quot;Sunil Khandwala&quot; " />
<person posts="2" size="12" who="" />
<person posts="2" size="11" who="Petr Vandrovec " />
<person posts="2" size="11" who="Erich Boleyn " />
<person posts="2" size="11" who="&quot;Kristofer T. Karas&quot; " />
<person posts="2" size="11" who="&quot;Zachary Williams&quot; " />
<person posts="2" size="10" who="Wolfgang Teichmann " />
<person posts="2" size="10" who="Artur Frysiak " />
<person posts="2" size="10" who="Rogerio Brito " />
<person posts="2" size="10" who="Bram Avontuur " />
<person posts="2" size="10" who="" />
<person posts="2" size="9" who="&quot;Dunlap, Randy&quot; " />
<person posts="2" size="9" who="&quot;delphifan&quot; " />
<person posts="2" size="8" who="Bruce Elliott " />
<person posts="2" size="8" who="Raphael Manfredi " />
<person posts="2" size="8" who="Jochen Dolze " />
<person posts="2" size="8" who="&quot;rickard.cedergren&quot; " />
<person posts="2" size="8" who="&quot;Brandon S. Allbery KF8NH&quot; " />
<person posts="2" size="8" who="Marcelo Tosatti " />
<person posts="2" size="8" who="Johannes Kloos " />
<person posts="2" size="8" who="" />
<person posts="2" size="8" who="Uwe Bonnes " />
<person posts="2" size="8" who="=?iso-8859-1?Q?Magnus_N=E4slund?= " />
<person posts="2" size="8" who="&quot;Daniel J Blueman&quot; " />
<person posts="2" size="8" who="NIIBE Yutaka " />
<person posts="2" size="7" who="David Whysong " />
<person posts="2" size="7" who="Nimrod Mesika " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Edgar Toernig " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Andreas Dilger " />
<person posts="2" size="7" who="Bradley Baetz " />
<person posts="2" size="7" who="Randall R Schulz " />
<person posts="2" size="7" who="Ian Stirling " />
<person posts="2" size="7" who="Manfred " />
<person posts="2" size="7" who="Richard A Nelson " />
<person posts="2" size="7" who="Michael Elizabeth Chastain " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="Gerard Roudier " />
<person posts="2" size="6" who="Richard van Denzel " />
<person posts="2" size="6" who="&quot;Mr. James W. Laferriere&quot; " />
<person posts="2" size="6" who="&quot;Christian Stuke&quot; " />
<person posts="2" size="6" who="David Wragg " />
<person posts="2" size="6" who="&quot;Manfred&quot; " />
<person posts="2" size="6" who="Meelis Roos " />
<person posts="2" size="6" who="Folkert van Heusden " />
<person posts="2" size="6" who="Don Howard " />
<person posts="2" size="6" who="&quot;Bas van Loon&quot; " />
<person posts="2" size="6" who="Harry Brueckner " />
<person posts="2" size="6" who="Mark Lord " />
<person posts="2" size="6" who="Yoink! " />
<person posts="2" size="6" who="&quot;Petr Soucek&quot; " />
<person posts="2" size="6" who="Torsten Landschoff " />
<person posts="2" size="6" who="Oliver Stecklina " />
<person posts="2" size="6" who="Doug Alcorn " />
<person posts="2" size="6" who="&quot;Raj, Ashok&quot; " />
<person posts="2" size="6" who="Greg Ingram " />
<person posts="2" size="6" who=" (Arjan van de Ven)" />
<person posts="2" size="5" who="Harald Milz " />
<person posts="2" size="5" who="Roman Zippel " />
<person posts="2" size="5" who="&quot;Adam J. Richter&quot; " />
<person posts="2" size="5" who="Doug McNaught " />
<person posts="2" size="5" who="Raiden " />
<person posts="2" size="5" who="David Fox " />
<person posts="2" size="5" who="&quot;Sean Hunter&quot; " />
<person posts="2" size="5" who="Nix " />
<person posts="2" size="5" who="Chris Wedgwood " />
<person posts="2" size="5" who="Jussi Hamalainen " />
<person posts="2" size="5" who="Jeff Dike " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="=?iso-8859-1?Q?Magnus_N=E4slund=28gr=29?= " />
<person posts="2" size="5" who="Taso Hatzi " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="Chmouel Boudjnah " />
<person posts="2" size="5" who="Bernhard Rosenkraenzer " />
<person posts="2" size="5" who="Borislav Deianov " />
<person posts="2" size="5" who="Robert Dinse " />
<person posts="2" size="5" who="Chris Evans " />
<person posts="2" size="5" who="Drew Bernat " />
<person posts="2" size="5" who="Thierry Vignaud " />
<person posts="2" size="5" who="Josef =?iso-8859-1?Q?H=F6=F6k?= " />
<person posts="2" size="5" who=" (Matthias Urlichs)" />
<person posts="2" size="5" who="Siddharth Srivastav " />
<person posts="2" size="5" who="Sujit Vaidya " />
<person posts="2" size="4" who="wu_yb " />
<person posts="1" size="60" who="" />
<person posts="1" size="40" who="&quot;Bill K.&quot; " />
<person posts="1" size="27" who="" />
<person posts="1" size="27" who="Dimitris Michailidis " />
<person posts="1" size="15" who=" (Christopher Faylor)" />
<person posts="1" size="11" who="manfreds " />
<person posts="1" size="9" who="&quot;Geoffrey A. Davis&quot; " />
<person posts="1" size="8" who="Matt Robinson " />
<person posts="1" size="8" who="Brandon Craig Rhodes " />
<person posts="1" size="7" who="Nicolas DE METZ-NOBLAT " />
<person posts="1" size="7" who="Steve Lord " />
<person posts="1" size="7" who="Alan Cox " />
<person posts="1" size="7" who="&quot;Howard Chu&quot; " />
<person posts="1" size="7" who="Peter Moulder " />
<person posts="1" size="6" who="Daniel Stone " />
<person posts="1" size="6" who="Gerhard Mack " />
<person posts="1" size="6" who="Kirk Reiser " />
<person posts="1" size="6" who="Romano Giannetti " />
<person posts="1" size="6" who="Greg " />
<person posts="1" size="6" who="&quot;Stephen Costaras&quot; " />
<person posts="1" size="5" who="Thomas Capricelli " />
<person posts="1" size="5" who="Richard Adams " />
<person posts="1" size="5" who="Catalin Muresan " />
<person posts="1" size="5" who="Rienk de Vries " />
<person posts="1" size="5" who="" />
<person posts="1" size="5" who="Rick Franchuk " />
<person posts="1" size="5" who="Gadi Oxman " />
<person posts="1" size="5" who="Darren Nickerson " />
<person posts="1" size="5" who="Dmitry Veprintsev " />
<person posts="1" size="5" who="Mail Delivery System " />
<person posts="1" size="5" who="Brian Hall " />
<person posts="1" size="5" who="Paul Schulz " />
<person posts="1" size="5" who="Hank Leininger " />
<person posts="1" size="5" who="&quot;Piotr Pass&quot; " />
<person posts="1" size="5" who="&quot;Brent M. Smith&quot; " />
<person posts="1" size="5" who="Dan Yocum " />
<person posts="1" size="5" who="Miquel van Smoorenburg " />
<person posts="1" size="5" who="" />
<person posts="1" size="5" who="David desJardins " />
<person posts="1" size="5" who="&quot;Rui Prior&quot; " />
<person posts="1" size="4" who="Ionut Badulescu " />
<person posts="1" size="4" who="Jan Kara " />
<person posts="1" size="4" who="Oliver Mueschke " />
<person posts="1" size="4" who=" (Harvey J. Stein)" />
<person posts="1" size="4" who="Steven Sparks " />
<person posts="1" size="4" who="Andreas Jaeger " />
<person posts="1" size="4" who="Alex Nicolaou " />
<person posts="1" size="4" who="Volker Springer " />
<person posts="1" size="4" who="Catalin BOIE " />
<person posts="1" size="4" who="&quot;Bill Rugolsky Jr.&quot; " />
<person posts="1" size="4" who="&quot;Dr. Michael Weller&quot; " />
<person posts="1" size="4" who="&quot;Dr. S.K. Singh&quot; " />
<person posts="1" size="4" who="Jim Winstead " />
<person posts="1" size="4" who="Mario Mikocevic " />
<person posts="1" size="4" who="&quot;Pol Muaddib&quot; " />
<person posts="1" size="4" who="Douglas Gilbert " />
<person posts="1" size="4" who="Olaf Titz " />
<person posts="1" size="4" who="&quot;gokhan sozmen&quot; " />
<person posts="1" size="4" who="Rob Landley " />
<person posts="1" size="4" who="Josip Loncaric " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Neil Brown " />
<person posts="1" size="4" who="&quot;Filippo Carletti&quot; " />
<person posts="1" size="4" who=" (Linus Torvalds)" />
<person posts="1" size="4" who="Nate Eldredge " />
<person posts="1" size="4" who="&quot;Kendall Bennett&quot; " />
<person posts="1" size="4" who="Savochkin Andrey Vladimirovich " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Roger Larsson " />
<person posts="1" size="4" who="Glen Turner " />
<person posts="1" size="4" who="Davide Rossetti " />
<person posts="1" size="4" who="Wichert Akkerman " />
<person posts="1" size="4" who="Richard Guenther " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Heinz Mauelshagen " />
<person posts="1" size="3" who="Jorgen Skjaanes " />
<person posts="1" size="3" who=" (Publishing User)" />
<person posts="1" size="3" who="Audin Malmin " />
<person posts="1" size="3" who="Christopher Neufeld " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Colin Hirsch " />
<person posts="1" size="3" who="&quot;Robert de Bath&quot; " />
<person posts="1" size="3" who="Bibek Sahu " />
<person posts="1" size="3" who="&quot;Matthew Clark&quot; " />
<person posts="1" size="3" who="&quot;R.J.E. Lemmens&quot; " />
<person posts="1" size="3" who="Stephen Rothwell " />
<person posts="1" size="3" who="Erik Parker " />
<person posts="1" size="3" who="=?ISO-8859-1?Q?Mads_Martin_J=F8rgensen?= " />
<person posts="1" size="3" who="Fred Reimer " />
<person posts="1" size="3" who="Marcus Meissner " />
<person posts="1" size="3" who="Thorsten Kranzkowski " />
<person posts="1" size="3" who="Fluffy " />
<person posts="1" size="3" who="Jaroslav Kysela " />
<person posts="1" size="3" who="&quot;Daniel Sully&quot; " />
<person posts="1" size="3" who="Bruno Haible " />
<person posts="1" size="3" who="CaT " />
<person posts="1" size="3" who="Benno Senoner " />
<person posts="1" size="3" who="Dieter Rothacker " />
<person posts="1" size="3" who="&quot;Dwayne C . Litzenberger&quot; " />
<person posts="1" size="3" who="&quot;Matija Nalis&quot; " />
<person posts="1" size="3" who="Martin Mares " />
<person posts="1" size="3" who="Adrian Bridgett " />
<person posts="1" size="3" who="Thomas Davis " />
<person posts="1" size="3" who="Mikael Pettersson " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="&quot;Homme R. Bitter&quot; " />
<person posts="1" size="3" who="&quot;Stefan Monnier&quot; " />
<person posts="1" size="3" who="Luca Montecchiani " />
<person posts="1" size="3" who="Erik Mouw " />
<person posts="1" size="3" who="Juanjo Ciarlante " />
<person posts="1" size="3" who="The Doctor What " />
<person posts="1" size="3" who="Giuliano Pochini " />
<person posts="1" size="3" who="&quot;Dmitry V. Levin&quot; " />
<person posts="1" size="3" who="Johannes Erdfelt " />
<person posts="1" size="3" who="Aaron Lehmann " />
<person posts="1" size="3" who="Janos Farkas " />
<person posts="1" size="3" who="&quot;Tonglu Yi&quot; " />
<person posts="1" size="3" who="&quot;Mike Phillips&quot; " />
<person posts="1" size="3" who="&quot;Der Herr Hofr.at&quot; " />
<person posts="1" size="3" who="&quot;Rene H. Larsen&quot; " />
<person posts="1" size="3" who="Guido Flohr " />
<person posts="1" size="3" who="Steve Underwood " />
<person posts="1" size="3" who="James R Bruce " />
<person posts="1" size="3" who="Juan Carlos Castro y Castro " />
<person posts="1" size="3" who="&quot;Michael H. Warfield&quot; " />
<person posts="1" size="3" who="Daniel Kobras " />
<person posts="1" size="3" who="Meino Christian Cramer " />
<person posts="1" size="3" who=" (Patrick J. LoPresti)" />
<person posts="1" size="3" who="Brian Keefer " />
<person posts="1" size="3" who="Mika Ulrich Kirschke " />
<person posts="1" size="3" who="Marc Mutz " />
<person posts="1" size="3" who="Chris " />
<person posts="1" size="3" who="&quot;Jason A. Diegmueller&quot; " />
<person posts="1" size="3" who="&quot;D. Hugh Redelmeier&quot; " />
<person posts="1" size="3" who="Henrik Olsen " />
<person posts="1" size="3" who="Grigory Lyahovitsky " />
<person posts="1" size="3" who="Thierry Danis " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Gabriele Turchi " />
<person posts="1" size="3" who="John Justice " />
<person posts="1" size="3" who=" (H.J. Lu)" />
<person posts="1" size="3" who="&quot;Andrew Morton&quot; " />
<person posts="1" size="3" who="Camm Maguire " />
<person posts="1" size="3" who="David Haring " />
<person posts="1" size="3" who=" (Eric W. Biederman)" />
<person posts="1" size="3" who="Zach Brown " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Pauline Middelink " />
<person posts="1" size="3" who="Matthew Dharm " />
<person posts="1" size="3" who="Ed Hall " />
<person posts="1" size="3" who="David Ford " />
<person posts="1" size="3" who="&quot;Robert A. Hayden&quot; " />
<person posts="1" size="3" who="Roberto Diaz " />
<person posts="1" size="3" who="Brian Schau " />
<person posts="1" size="3" who="Alan Watson " />
<person posts="1" size="3" who="Ulrik De Bie " />
<person posts="1" size="3" who="Matthew " />
<person posts="1" size="3" who="&quot;Aaron C. Du Mar&quot; " />
<person posts="1" size="3" who="Wolfram Pienkoss " />
<person posts="1" size="3" who="Allen Brown " />
<person posts="1" size="3" who="&quot;Michael T. Babcock&quot; " />
<person posts="1" size="3" who="&quot;Michael K. Johnson&quot; " />
<person posts="1" size="3" who="Jakub Jelinek " />
<person posts="1" size="3" who="Nicholas Dronen " />
<person posts="1" size="3" who="David Schleef " />
<person posts="1" size="3" who="Nadeem Riaz " />
<person posts="1" size="3" who="Rodger Donaldson " />
<person posts="1" size="3" who="German Jose Gomez Garcia " />
<person posts="1" size="3" who="Robert Lowery " />
<person posts="1" size="3" who="Thomas Molina " />
<person posts="1" size="3" who="Erico Freitas " />
<person posts="1" size="3" who="&quot;Ashish Lal&quot; " />
<person posts="1" size="3" who="Moritz Franosch " />
<person posts="1" size="3" who="Dag Brattli " />
<person posts="1" size="3" who="Donald Becker " />
<person posts="1" size="3" who="SammyTheSnake " />
<person posts="1" size="3" who="Vojtech Pavlik " />
<person posts="1" size="3" who="Dominique LARCHEY-WENDLING " />
<person posts="1" size="3" who="&quot;Pascal A. Dupuis&quot; " />
<person posts="1" size="3" who="Dave Weis " />
<person posts="1" size="3" who="Ville Herva " />
<person posts="1" size="3" who="Radovan Garabik " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Frank Horowitz " />
<person posts="1" size="3" who="Alessandro Suardi " />
<person posts="1" size="3" who="&quot;Stephen R. van den Berg&quot; " />
<person posts="1" size="3" who="Jochen Friedrich " />
<person posts="1" size="3" who="Horst von Brand " />
<person posts="1" size="3" who="Ingo Molnar " />
<person posts="1" size="3" who="Dmitry Panov " />
<person posts="1" size="3" who="&quot;Jeff Buckey&quot; " />
<person posts="1" size="3" who="&quot;Erik Petersen&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="root " />
<person posts="1" size="3" who="Harald Hoyer " />
<person posts="1" size="2" who=" (Peter Benie)" />
<person posts="1" size="2" who="Benjamin Close " />
<person posts="1" size="2" who="&quot;B. James Phillippe&quot; " />
<person posts="1" size="2" who="Jeremy Fitzhardinge " />
<person posts="1" size="2" who="Albert Cranford " />
<person posts="1" size="2" who="Andrew Hilborne " />
<person posts="1" size="2" who="Daniel Lucq " />
<person posts="1" size="2" who="Chris Funderburg " />
<person posts="1" size="2" who="Chris Sears " />
<person posts="1" size="2" who=" &lt;nuke@asis-w6.cern.ch&gt;" />
<person posts="1" size="2" who="Doug Ledford " />
<person posts="1" size="2" who="Christian Zankel " />
<person posts="1" size="2" who="Yann Droneaud " />
<person posts="1" size="2" who="Hannah Schroeter " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Stephen Frost " />
<person posts="1" size="2" who="Chuck Campbell " />
<person posts="1" size="2" who="=?iso-8859-1?q?willy=20tarreau?= " />
<person posts="1" size="2" who="&quot;Arni Raghu&quot; " />
<person posts="1" size="2" who="Jeff Randall " />
<person posts="1" size="2" who="Tuan Hoang " />
<person posts="1" size="2" who="Joel Klecker " />
<person posts="1" size="2" who="Jan Jirmasek " />
<person posts="1" size="2" who="Cort Dougan " />
<person posts="1" size="2" who="Ben Collins " />
<person posts="1" size="2" who="Christopher Horn " />
<person posts="1" size="2" who="Dan Hollis " />
<person posts="1" size="2" who="Pete Zaitcev " />
<person posts="1" size="2" who="Ted Milker " />
<person posts="1" size="2" who="Wichert Akkerman " />
<person posts="1" size="2" who="Anandvel " />
<person posts="1" size="2" who="&quot;pdeng&quot; " />
<person posts="1" size="2" who="Tom Kelly " />
<person posts="1" size="2" who="Pete Wyckoff " />
<person posts="1" size="2" who="Mike Karmyshev " />
<person posts="1" size="2" who="Philip Hall " />
<person posts="1" size="2" who="Tassa Sandro " />
<person posts="1" size="2" who="=?iso-8859-2?B?RGFuaWVsIFJlvm79?= " />
<person posts="1" size="2" who="Kjartan Maraas " />
<person posts="1" size="2" who="&quot;Alan Curry&quot; " />
<person posts="1" size="2" who="&quot;John Hayward-Warburton (Programming account)&quot; " />
<person posts="1" size="2" who="Charles K Hardin " />
<person posts="1" size="2" who="Dax Kelson " />
<person posts="1" size="2" who="Michal Vitecek " />
<person posts="1" size="2" who="Richard Zidlicky " />
<person posts="1" size="2" who=" (Eugene Crosser)" />
<person posts="1" size="2" who="&quot;Sergio A. Sotelo&quot; " />
<person posts="1" size="2" who="System Administrator " />
<person posts="1" size="2" who="&quot;Bradley D. LaRonde&quot; " />
<person posts="1" size="2" who="Bill Moore " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Aaron Burt " />
<person posts="1" size="2" who="David Hinds " />
<person posts="1" size="2" who="Jonathan Disher " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Alex Belits " />
<person posts="1" size="2" who="Dean Gaudet " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Daniel Sears " />
<person posts="1" size="2" who="Bart Nabbe " />
<person posts="1" size="2" who="Pete Clements " />
<person posts="1" size="2" who="Stephen Williams " />
<person posts="1" size="2" who="Michael Nelson " />
<person posts="1" size="2" who="&quot;Latham, Steve&quot; " />
<person posts="1" size="2" who="Oleg Drokin " />
<person posts="1" size="2" who="=?ISO-8859-1?Q?&quot;&quot;=06&quot;?= " />
<person posts="1" size="2" who="Willy Tarreau " />
<person posts="1" size="2" who="&quot;Aamir Shaikh&quot; " />
<person posts="1" size="2" who="Patrick Frisch " />
<person posts="1" size="2" who="visi0n " />
<person posts="1" size="2" who="Nat Lanza " />
<person posts="1" size="2" who="Purushothaman N " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Matan Ziv-Av " />
<person posts="1" size="2" who="Oscar Barlow " />
<person posts="1" size="2" who="Shawn Leas " />
<person posts="1" size="2" who="Walter Hofmann " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Tony Hoyle " />
<person posts="1" size="2" who="Thierry Danis " />
<person posts="1" size="2" who="John Alvord " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Erick Kinnee " />
<person posts="1" size="2" who="Dan Christian " />
<person posts="1" size="2" who="Yau Man NG " />
<person posts="1" size="2" who="I Lee Hetherington " />
<person posts="1" size="2" who="&quot;Michael (Micksa) Slade&quot; " />
<person posts="1" size="2" who="Thomas Pornin " />
<person posts="1" size="2" who="Michael Barabanov " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Mark Hahn " />
<person posts="1" size="2" who="Christian Robottom Reis " />
<person posts="1" size="2" who="&quot;Ph. Marek&quot; " />
<person posts="1" size="2" who="Alex Kamalov " />
<person posts="1" size="2" who="Chipzz " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Luke Burton " />
<person posts="1" size="2" who="Brian Pontz " />
<person posts="1" size="2" who="Russell Coker " />
<person posts="1" size="2" who="Martin Douda " />
<person posts="1" size="2" who="Lech Szychowski " />
<person posts="1" size="2" who="Francesc Oller " />
<person posts="1" size="2" who="&quot;Rex Versluis&quot; " />
<person posts="1" size="2" who="Benjamin Redelings I " />
<person posts="1" size="2" who="&quot;Stephen Liu&quot; " />
<person posts="1" size="2" who=" (root)" />
<person posts="1" size="2" who="&quot;Alon Ziv&quot; " />
<person posts="1" size="2" who="Bryce McKinlay " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Koushik Chakraborty " />
<person posts="1" size="2" who="Takacs Sandor " />
<person posts="1" size="2" who="Shane Clements " />
<person posts="1" size="2" who="&quot;Ilia M. Zubkov&quot; " />
<person posts="1" size="2" who="Patrick Lerda " />
<person posts="1" size="2" who="Matthew Toseland " />
<person posts="1" size="2" who="Joe " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="&quot;sanjay Kumar&quot; " />
<person posts="1" size="2" who=" (Danny ter Haar)" />
<person posts="1" size="2" who="david " />
<person posts="1" size="2" who="Stefan Laudat " />
<person posts="1" size="2" who="Andy Bradford " />
<person posts="1" size="2" who="Peter Bell " />
<person posts="1" size="2" who="David Trcka " />
<person posts="1" size="2" who="f5ibh " />
<person posts="1" size="2" who="Assie " />
<person posts="1" size="2" who="Joerg =?iso-8859-1?Q?Str=F6ttchen?= " />
<person posts="1" size="2" who="Tony Preston " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="David Frana " />
<person posts="1" size="2" who="&quot;Carl St-Jacques&quot; " />
<person posts="1" size="2" who="Junichi Saito " />
<person posts="1" size="2" who="Harald Evensen " />
<person posts="1" size="2" who="Mofeed Shahin " />
<person posts="1" size="2" who="Secret Squirrel " />
<person posts="1" size="1" who="" />

</stats>

<section
  title="vfork() Discussion And Flame Fest"
  subject="Re: vfork"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_01/msg00022.html"
  posts="57"
  startdate="01 Nov 1999 00:00:00 -0800"
  enddate="19 Nov 1999 00:00:00 -0800"
>
<topic>BSD</topic>
<topic>Ioctls</topic>
<topic>POSIX</topic>
<topic>SMP</topic>
<topic>Virtual Memory</topic>

<p>Andries Brouwer started things off with a bang by creating a manpage for the
vfork() system call. He posted the entire manpage, prefacing it with the
following critical remarks:</p>

<quote who="Andries Brouwer">

<p>People tell me that
vfork() no longer is equivalent to fork() as the manpage states.
Unfortunately, they are right, so I wrote a new page - see below.</p>

<p>I consider the introduction of vfork into Linux a very bad move (as will be
clear from the text I wrote), but since there were people writing code and
submitting patches there must be some positive side to this horrible kludge.</p>

<p>If nobody corrects me, this will be the vfork man page in
man-pages-1.27.</p>

</quote>

<p>Since it's fairly short, I include the manpage here as he posted it:</p>

<blockquote>

<pre>VFORK(2)             Linux Programmer's Manual             VFORK(2)


NAME
       vfork - create a child process in a broken way

SYNOPSIS
       #include &lt;unistd.h&gt;

       pid_t vfork(void);

POSIX DESCRIPTION
       The  vfork()  function  has the same effect as fork(), except that
       the behaviour is undefined  if  the  process  created  by  vfork()
       either  modifies any data other than a variable of type pid_t used
       to store the return value from vfork(), or returns from the  func?
       tion  in  which  vfork()  was  called, or calls any other function
       before successfully calling _exit() or one of the exec  family  of
       functions.

ERRORS
       EAGAIN Too many processes - try again.

       ENOMEM There is insufficient swap space for the new process.

DESCRIPTION
       vfork,  just  like fork(2), creates a child process of the calling
       process.  For details and return value and errors, see fork(2).

       Under Linux, fork() is implemented using copy-on-write  pages,  so
       the  only  penalty  incurred  by  fork()  is  the  time and memory
       required to duplicate the parent's page tables, and  to  create  a
       unique task structure for the child.  However, in the bad old days
       a fork() would require making a complete copy of the caller's data
       space,  often  needlessly, since usually immediately afterwards an
       exec() is done. Thus, for greater efficiency, BSD  introduced  the
       vfork  system  call,  that did not fully copy the address space of
       the parent process, but borrowed the parent's memory and thread of
       control  until  a call to execve() or an exit occurred. The parent
       process was suspended while the child  was  using  its  resources.
       The  use  of vfork was tricky - for example, not modifying data in
       the parent process depended on knowing which variables are held in
       a register.

BUGS
       It  is rather unfortunate that Linux revived this spectre from the
       past.  The BSD manpage states: "This system call  will  be  elimi?
       nated when proper system sharing mechanisms are implemented. Users
       should not depend on the memory sharing semantics of vfork  as  it
       will, in that case, be made synonymous to fork."

       Formally  speaking,  the  POSIX  description  given above does not
       allow one to use vfork() since a following exec  might  fail,  and
       then what happens is undefined.

       Details of the signal handling are obscure and differ between sys?
       tems.  The BSD manpage states: "To avoid a possible deadlock situ?
       ation,  processes  that  are children in the middle of a vfork are
       never sent SIGTTOU or SIGTTIN signals; rather,  output  or  ioctls
       are  allowed  and  input attempts result in an end-of-file indica?
       tion."

HISTORY
       The vfork() system call occurs in the BSD 2.9.1 (but  not  in  the
       2.8)  manual  pages.   In  Linux, it has been equivalent to fork()
       until 2.2.0-pre6 or so. Since 2.2.0-pre9 (on i386, somewhat  later
       on  other architectures) it is an independent system call. Support
       was added in glibc 2.0.112.

CONFORMING TO
       The vfork call may be a bit similar to calls with the same name in
       other  operating  systems.  They all resemble fork(), have obscure
       semantics, and are not really faster today than fork().

SEE ALSO
       clone(2), execve(2), fork(2), wait(2)


Linux 2.2.0                 1 Nov 1999                          1</pre>

</blockquote>

<p>Theodore Y. Ts'o replied:</p>

<quote who="Theodore Y. Ts'o">

<p>While in general, I
agree with you that vfork is not the nicest thing in the world, it's not
necessarily much worse than some of the other things you can do with
sys_clone(), which also allows two processes to share virtual memory space.</p>

<p>Despite BSD's man page warning off folks from depending on vfork's
semantics, there were programs --- including BSD's csh, which did use
vfork() so that the path hashing statistics could be accurately updated. So,
there is some excuse for actually implementing vfork() in the traditional
bad old way.</p>

<p>I think you were being a little bit too harsh, myself, but it is true that
warning people that using it compromises the portability of their programs
is perfectly fair.</p>

</quote>

<p>Someone replied that because vfork() had been only a pseudonym for fork()
for so long, a lot of programmers used vfork() reflexively, on the
assumption that it would one day be a "better" fork(). The poster suggested
loud warnings about the new situation.</p>

<p>Linus Torvalds replied to the "POSIX DESCRIPTION" in Andries' original
announcement, saying:</p>

<quote who="Linus Torvalds">

<p>Just describe it the way it works.</p>

<p>vfork() under Linux is actually just another case of clone(), and the old
reasons why it was considered horrible are basically all gone. The Linux mm
layer evolved to the point where it was trivial to implement, WITHOUT any of
the special hacks that the original BSD implementation had, and that made
people hate it in the BSD community.</p>

<p>So the ugly part about vfork() doesn't exist any more, yet the good
attributes still do.</p>

</quote>

<p>But Kai Henningsen pointed out, <quote who="Kai Henningsen">Well, in
2.2.12 it seems strace can't follow vfork()s without some kernel patch. Or
so I gather from the docs and the failure to perform.</quote></p>

<p>A surprised Linus replied:</p>

<quote who="Linus Torvalds">

<p>I always thought that was just
because strace didn't understand about vfork().</p>

<p>On the other hand, maybe it's a generic problem with strace - if it gets the
child PID from the return value of "fork()", and attaches to it that way,
that has two problems:</p>

<ul>

<li>it won't work reliably even under normal fork(), as it's timing-
dependent, and by the time strace has attached to the child the child
might have already done several system calls.</li>

<li>it would fail completely with vfork(), as vfork() only returns after
the child has execve'd</li>

</ul>

<p>Who's maintaining strace these days?</p>

</quote>

<p>Someone gave a pointer to the <a
href="http://www.wi.leidenuniv.nl/~wichert/strace/">strace homepage</a>,
adding that Wichert Akkerman, the Debian Project Leader, was the maintainer.</p>

<p>Kai quoted from the 'strace' manpage:</p>

<blockquote>

<pre>-f          Trace child processes as they are  created  by
            currently  traced processes as a result of the
            <b>fork</b>(2)  system  call.   The  new  process  is
            attached  to  as  soon  as  its  pid  is known
            (through the return value of  <b>fork</b>(2)  in  the
            parent process). This means that such children
            may run uncontrolled for a  while  (especially
            in  the  case of a <b>vfork</b>(2)), until the parent
            is scheduled again to complete its  (<b>v</b>)<b>fork</b>(2)
            call.    If  the  parent  process  decides  to
            <b>wait</b>(2) for a child that  is  currently  being
            traced,  it  is suspended until an appropriate
            child process either terminates  or  incurs  a
            signal  that  would  cause it to terminate (as
            determined from  the  child's  current  signal
            disposition).

-F          Attempt to follow <b>vfork</b>s.  (On SunOS 4.x, this
            is  accomplished  with  some  dynamic  linking
            trickery.  On Linux, it requires  some  kernel
            functionality not yet in the standard kernel.)
            Otherwise, <b>vfork</b>s will not be followed even if
            -f has been given.</pre>

</blockquote>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>That pretty much sucks, as it
makes it pretty much inpossible to strace a normal fork() on SMP machines.</p>

<p>Sounds like the correct fix is not vfork()-related at all, but rather a flag
to clone() to set "trace child process", so that the new child starts out
stopped and traced. And some way for strace to get at the child pid.</p>

</quote>

<p>Nate Eldredge came in, saying:</p>

<quote who="Nate Eldredge">

<p>The man page is inaccurate
with respect to the fork tracing mechanism. What happens is that strace uses
ptrace(PTRACE_POKETEXT...) to insert an infinite loop following the trap
instruction (so it becomes `int $0x80; jmp .'). So no matter when the child
is spawned, it will get stuck in this loop. When the fork syscall returns in
the parents, strace inspects the return value to find the PID of the child.
It then attaches to this process, patches the original code back in, and
sends it merrily on its way. (It also patches the original code back in to
the parent.) So fork tracing should work regardless of the number of
processors.</p>

<p>For vfork this won't work, as the parent won't return until the child has
done something (exec or exit), and the child is looping. As a hack to work
around this, when strace intercepts a vfork, it uses the
ptrace(PTRACE_POKEUSR, ORIG_EAX...) mechanism (this is the "functionality
not yet in the standard kernel", as that mechanism was disallowed until
recent 2.3.x, and required a patch to enable. I will update the man page to
reflect this and to fix the `fork' error.) to change the system call back
into a plain old fork. I wrote that hack, and decided that it was reasonable
on the grounds that vfork used to just call fork at the libc level, and
anyone who depended on getting special vfork semantics was asking for
trouble anyway.</p>

<p>In short, fork tracing works, and vfork tracing works with a new kernel or a
patch.</p>

</quote>

<p>To Linus' statement that what was needed was a flag to clone(), Alan Cox
replied:</p>

<quote who="Alan Cox">

<p>Its such a brilliant idea that we already had it...</p>

<pre>        if (!(clone_flags &amp; CLONE_PTRACE))
                new_flags &amp;= ~(PF_PTRACED|PF_TRACESYS);</pre>

<p>That was added for the threaded-gdb folks a while back 8)</p>

</quote>

<p>Wichert replied to Alan, <quote who="Wichert Akkerman">Which means strace would need to turn fork into a clone call
iff we're running on Linux and iff we have a recent enough kernel, right?
That would mean adding more conditions to the code where it's already messy
enough.. although it would make it easier to port (right now it goes wrong
for mipsel for example, I think it still uses i386-instruction on a mips
processor.. oops!).</quote> Ralf Baechle replied to Wichert, <quote who="Ralf
Baechle">I wonder what you're talking about. I'm
sure I didn't leave i386 code in the MIPS stuff - it wouldn't even assemble
:-)</quote> No reply came back on the list.</p>

<p>Linus replied to Alan as well, saying, <quote who="Linus Torvalds">It doesn't notify the right parent, though. It also requires
the tracer to turn a fork()/vfork() into a clone(), but I guess that's ok.
The lack of re-parenting looks like a killer, though.</quote></p>

<p>But he replied to himself 10 minutes later, with:</p>

<quote who="Linus Torvalds">

<p>Hmm.. A sufficient fix for that
might be kernel/fork.c:</p>

<pre>        if ((clone_flags &amp; CLONE_VFORK) || !(clone_flags &amp; CLONE_PARENT))
                p->p_pptr = p->p_opptr = current;</pre>

<p>would instead become</p>

<pre>        p->p_opptr = current;
        if (!(clone_flags &amp; CLONE_PARENT))
                p->p_pptr = current;</pre>

<p>ie the original parent would _always_ be the "real" parent - which is what
CLONE_VFORK has to use anyway, but CLONE_PARENT would make the "logical
parent" be the same as the cloner. This should make debugging happy (the
debugger stays as the logical parent), yet should be ok for pthreads like
behaviour too, ie the reason for CLONE_PARENT in the first place.</p>

</quote>

<p>The subthread ended here, but the inflammatory man page was not forgotten,
however. In another branch of discussion a bit of a flame war erupted.
Andries' claim was that there was nothing wrong with his factual description
of vfork(), and that if anyone thought otherwise they should submit patches
to him. Opposing points included the idea that manpages should be
straightforward descriptions of functionality, without any judgements
attached; and that the debate on the relative merits of vfork() should not
be conducted in documentation. Some folks wanted to see the vfork() manpage
dropped altogether, but Andries pointed out that the syscall existed,
therefore it should be documented.</p>

</section>

<section
  title="Read/Write Semaphores"
  subject="shm bug introduced with pagecache in 2.3.11"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_02/msg00063.html"
  posts="81"
  startdate="08 Nov 1999 00:00:00 -0800"
  enddate="26 Nov 1999 00:00:00 -0800"
>
<topic>FS: FAT</topic>
<topic>Real-Time</topic>

<mention>Arjan van de Ven</mention>
<mention>Alexander Viro</mention>
<mention>Richard Guenther</mention>

<p>In the course of discussion, Manfred Spraul said, <quote who="Manfred
Spraul">I'm sure that for multi-threaded applications, the mmap performance
of Linux will be poor because everything is single-threaded.</quote> He
added that he'd do a benchmark comparing Linux and WinNT/95, and Linus
Torvalds said, <quote who="Linus Torvalds">I will bet you 5 bucks we'll kick
ass.</quote></p>

<p>Manfred did the benchmark, and said:</p>

<quote who="Manfred Spraul">

<p>You've lost:</p>

<p>Computer: K6-200, 128 MB Ram, Symbios 810 scsi controller, Fujitsu
Magneto-Optical drive, 620 MB [I have no empty scsi disc left :(],
620,000,000 bytes test file, fat filesystem, the same disk is used for NT
and Linux.</p>

<p>command: "./pagein fill 150000 #" where fill is the filename, 150000 means
150000 pages are trashed, and # is the number of threads.</p>

<table border="0">
<th>Linux:</th>
<tr><td>#       </td><td>pages/sec</td></tr>
<tr><td>1       </td><td>13</td></tr>
<tr><td>4       </td><td>14</td></tr>
<tr><td>64      </td><td>14</td></tr>
<tr><td>256     </td><td>? [computer unresponsive]</td></tr>
</table>

<table border="0">
<th>NT:</th>
<tr><td>#       </td><td>pages/sec</td></tr>
<tr><td>1       </td><td>18</td></tr>
<tr><td>4       </td><td>20</td></tr>
<tr><td>64      </td><td>28</td></tr>
<tr><td>256     </td><td>31</td></tr>
<tr><td>512     </td><td>33</td></tr>
</table>

<p>Linux is slower, and it cannot use multiple threads to reorder the sector
reads; NT gets faster if I add further threads.</p>

<p>source code is at <a
href="http://colorfullife.com/~manfreds/pagein/pagein.cpp">http://colorfullife.com/~manfreds/pagein/pagein.cpp</a></p>

</quote>

<p>Linus had some minor objections to the fact the Manfred used a FAT
filesystem for his benchmark, but added, <quote who="Linus Torvalds">I don't think this can/will be fixed for a 2.4 timeframe,
especially as I haven't heard of any real-life usage where it would be an
issue..</quote></p>

<p>Manfred replied that the filesystem wouldn't affect the numbers, and Richard
Guenther added that he was working on a real-time audio-processing tool that
would indeed suffer from the situation. He asked if there really was no hope
of a fix before 2.4; Linus replied:</p>

<quote who="Linus Torvalds">

<p>I looked at the thing quickly, and
there _is_ actually a reasonably quick fix, and one that I would like to
have for other reasons anyway: having read-write semaphores.</p>

<p>We don't have them, but they should not be fundamentally any worse to
implement than the current semaphores are, and they have occasionally come
up as useful things to have. They would certainly fit the bill for this
particular problem very well (a page fault would get a read lock, while a
mmap() would get a write lock - multiple page faults can happen in
parallel).</p>

<p>The one race with multiple page faults that we have is handled nicely by the
page table spinlock, which we introduced for kswapd anyway..</p>

</quote>

<p>Elsewhere, Alan Cox pointed out that high-performance servers like Typhoon
and Zeus would also be affected, but he added, <quote who="Alan
Cox">Fortunately these guys tend to be using pretty serious I/O subsystems
not M/O disks and they are fine with 2.2.</quote>. Manfred asked if Alan
knew if those servers were using mmap, and Alan replied, <quote who="Alan
Cox">Yes. Typhoon uses threaded mmap so aggressively it became an
unintentional test suite for the Linux mm layer, and in 2.0/2.1 it found a
lot of bugs.</quote></p>

<p>At around this point in the discussion, Linus said:</p>

<quote who="Linus Torvalds">

<p>Well, the more I look at a
read-write semaphore, the more I like it: it looks like something that once
the semaphore implementation itself was done, the MM side would be
absolutely trivial. It does introduce a new issue (multiple threads updating
the page tables at the same time), but that one doesn't look that horrible..</p>

<p>We don't ever export the page table handling to the low-level filesystems
any more (we used to a long time ago: the nopage() function got to touch the
page tables itself rather than just return the right page), so fixing up the
new issue is actually a very local fix in mm/mmeory.c.</p>

<p>Is anybody willing to take a stab at creating a read-write
semaphore?</p>

</quote>

<p>Arjan van de Ven mentioned that "UNIX Systems for Modern Architectures" by
Curt Schimmel discussed read-write semaphores on page 234. Arjan asked if
Schimmel's ideas were an acceptable starting point, but Linus replied:</p>

<quote who="Linus Torvalds">

<p>Nope, not acceptable. The mm
semaphore is one of the most timing-critical in the whole kernel. It usually
has absolutely zero contention, but it needs to be FAST. Basically, a
read-lock() must look something very very similar to the read-spinlock
implementation, ie something like</p>

<blockquote>

<p>        <tt>lock ; incl (%ecx)<br />
        js fixup</tt></p>

</blockquote>

<p>for the successful fall-through case. Two instructions, no more. That's what
the spinlocks do, and that's also what the semaphores do (although in the
case of a semaphore, it's a "decl" in that case.</p>

<p>The "fixup" case is going to be more complex than for spinlocks: for
spinlocks it's just a simple loop, while for semaphores you get all the
complexity that you see in arch/i386/kernel/semaphore.c to handle the thing
cleanly..</p>

<p>The read-write semaphore should be doable with the same skeleton as the
normal semaphores, although it needs two counters (regular semaphores have
just "sleepers", rw-semaphores need to have "read_sleeper" and
"write_sleeper" counts etc).</p>

</quote>

<p>Alexander Viro asked if Linus wanted readers' and writers' waitqueues to
share the spinlock, and Linus said:</p>

<quote who="Linus Torvalds">

<p>I would go for something very
similar to the current semaphore implementation - one global spinlock for
all rw-semaphores, and only if that actually becomes a real contention point
do we try to be more clever (starting with moving it to a per-semaphore
thing, and only as a last thing doing separate wait-queues with separate
spinlocks).</p>

<p>I doubt you'll get much contention. The current semaphores get very little
contention - the test-case that triggered this discussion in the first place
is probably the worst one by far, and that test-case will have no contention
at all with the read-write version because 99% of everything is just
readers.</p>

<p>The holy grail is "Make it as simple as possible. And no simpler"</p>

</quote>

<p>Elsewhere he described in more detail what he was after:</p>

<quote who="Linus Torvalds">

<p>I'll see if I can get a free
afternoon some day and try to port the current x86 semaphore code over to a
rw version too. The plan was something like this:</p>

<ul>

<li>read_down():<br />

<blockquote>

<p>        lock ; incl mem<br />
        js      contention_rw</p>

</blockquote>
</li>

<li>read_up():<br />

<blockquote>

<p>        lock ; decl mem<br />
        js      wake_up_writer</p>

</blockquote>
</li>

<li>write_down():<br />

<blockquote>

<p>        lock ; btsl $31,mem<br />
        jc      contention_ww<br />
        testl $0x7fffffff,mem<br />
        jne     contention_wr</p>

</blockquote>
</li>

<li>write_up():<br />

<blockquote>

<p>        lock ; andl $0x7fffffff,mem<br />
        jne     wake_up_reader_or_writer</p>

</blockquote>
</li>

</ul>

<p>where all the three contention cases grab a "contention spinlock" before
they then start sorting things out. The only interesting part is making sure
that the contention case gets the wakeups, and the above counts on:</p>

<ul>

<li>if a writer is waiting for readers (contention_wr), then the writer will
have already set the high bit, and a reader will know to wake it up because
the rw-semaphore value will be negative when it does read_up().</li>

<li>if a reader is waiting for a writer, then the reader will have
incremented the semaphore, and the writer will know to wake it up becasue
the semaphore value won't be zero after the "write_up()".</li>

<li>if a writer is waiting for another writer (contention_ww case), it will
have to increment the "reader" part of the semaphore value, in order to get
the other writer to wake it up on "write_up()".</li>

</ul>

<p>All other races should be trivially handled by just having the spinlock, so
the only really hard cases are the fast-path stuff where we cannot get the
semaphore because it is too expensive.</p>

<p>Does anybody see any holes in the above pseudo-implementation? Please take a
look at the way the current x86 semaphores are implemented: they use exactly
the above kinds of single-atomic-instruction-plus-condition-codes trickery
to get the non-contention case without _any_ extra instructions.</p>

</quote>

<p>There was a bit of an implementation discussion involving Linus and others,
but elsewhere, Benjamin C.R. LaHaise took a different approach and even
wrote some code. He posted his patch, saying, <quote who="Benjamin C.R.
LaHaise">Here's my implementation of rw semaphores
for x86. It's 2 instructions for the non-contended case of down_(read|write)
and up_read as I outlined yesterday. I've still got to test the contention
case a bit more to be satisfied before I remove the readers/writers
assertions, but I'd like it if people could give it an eyeballing and
comment.</quote></p>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>This looks extremely good. I'll
have to read it through a few times (and then a few more times just for
luck), but on the face of it it looks solid and really clever. Me likee.</p>

<p>And here I thought _I_ was being subtle.</p>

<p>I wonder if you might be convinced to use the same approach for the
rw-spinlocks too? I used to like my rw-lock implementation, but hey, I can
recognize genius when I see it, and this sure looks like it.</p>

<p>(Having the same logic for both the spinlock and the sleeping version will
make for less confusion, and I feel better about having _one_ clever trick
used twice rather than having two different clever ways to do essentially
the same thing).</p>

</quote>

</section>

<section
  title="Microsoft Historical Digression"
  subject="Re: Getting IOCTL's into VFS File System Drivers"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_02/msg00566.html"
  posts="31"
  startdate="10 Nov 1999 00:00:00 -0800"
  enddate="16 Nov 1999 00:00:00 -0800"
>
<topic>FS: ext2</topic>
<topic>FS: procfs</topic>
<topic>Microsoft</topic>
<topic>Patents</topic>

<p>Jeff V. Merkey suggested that the functionality of 'fsck' be incorporated
into the Virtual Filesystem layer, the way Windows 2000 did. This way there
could be a single 'fsck' utility that would work on all types of
filesystems, instead of requiring each filesystem to provide its own. He
explained, <quote who="Jeff V. Merkey">In the
Microsoft Windows 2000 Implementation, it's implemented as a single function
call that gets invoked automatically (or manually) when a volume mount
fails. They did it this way so that all their Windows tools would work with
the different file system drivers without having to need a specially written
program for each file system. They also have hooks for file system defrag,
and backup/restore integrated into their IFS. If we could extend the VFS to
do the same types of things, it would mean Linux would only need a single
set of "generic" file system repair, defrag, and backup/restore utilities
that would work with all the FS drivers in Linux.</quote></p>

<p>The idea was universally condemned. Alan Cox's reply was, <quote who="Alan
Cox">What you do on a disk problem is policy. Official unix religion #1 is
that policy goes in user space,</quote> while H. Peter Anvin replied to
Jeff, <quote who="H. Peter Anvin">You're kidding, right?! This is definitely
*not* kernel stuff. fsck is the same complexity no matter where it lives,
and it is complex enough that it has nothing to do in the kernel.</quote>
And Alexander Viro also said to Jeff:</p>

<quote who="Alexander Viro">

<p>What will it buy? You
still have to write all this code. You still can't (and shouldn't) do it on
a filesystem that is mounted r/w. This code can be equally easy placed into
userspace (where it _is_ now). It doesn't give you any win in fsck(8), since
the current fsck _already_ doesn't care for filesystem layout - it just
calls an appropriate fsck.&lt;something&gt;.</p>

<p>All the difference you'll get will be that e2fsck will be moved into
fs/ext2, fsck.minix - into fs/minix, etc. I.e. complexity is the same,
except that the code will (a) permanently in core and (b) any bug will bcome
more dangerous, since you are in ring 0.</p>

<p>So the question being: What For? We already have generic fsck. It sits in
/sbin/fsck. We already have generic mkfs (/sbin/mkfs). What's the reason
to move large chucks of code that feels perfectly OK in userland into the
kernel? Automagical fsck upon mount? It's a bug, not a feature. That
decision belongs to admin. Even if you want it (always want it, that is) you
can trivially do it in mount(8) or in the script that calls mount.</p>

<p>If NT really does what you describe... Well, small wonder that it's so
bloated.</p>

</quote>

<p>There followed a humorous historical digression, after some lead-in: Michael
Nelson replied to Alexander, saying that as far as he knew 'chkdsk' and the
relevant DLLs were all user-mode code. Richard B. Johnson added, <quote
who="Richard B. Johnson">both 95 and NT just do a chkdsk upon startup.
Windows doesn't have the notion of "mount". Maybe Win-2000 will have, but
nothing I've seen yet does -- and, if the file-system can't be repaired, you
just lose everything and re-install windows, sometimes even if it was
repaired. It depends upon the "service-pack" number and the alignment of
planets.</quote></p>

<p>Victor Khimenko replied, <quote who="Victor Khimenko">What you are saying ?
OF COURSE 9X &amp; NT HAS mount syscall. There are no mount utility, it's right,
but mount syscall is there. And it will return to you is chkdsk/scandisk is
needed (that is driver was not unmounted cleanly). Just like in Linux. The
only difference is that you can mount something only on drive letter and not
in directory...</quote></p>

<p>Mike A. Harris replied with a smile:</p>

<quote who="Mike A. Harris">

<p>Actually, from what I was
just reading about Windows 2000, Microsoft is adding a new innovative
feature that they single handedly came up with that allows you to "splice" a
filesystem onto a directory point.</p>

<p>I read that the reason was to do away with drive letters.  So, hats off to
Microsoft for inventing this new concept of "splicing" filesystems onto
directories.</p>

</quote>

<p>Peter Samuelson smirked, <quote who="Peter Samuelson">Patent pending, of
course,</quote> and Victor added, <quote who="Victor Khimenko">Even more
interestion thing about this "innovation" is that MS DOS HAD ability to join
filesystem onto a directory point (there was "join" command for that :-)
This ability was removed from Windows95 and now we have new, innovative
technology in Windows2000 ... Cool.</quote> David Parsons went on to say
that 'join' was <quote who="David Parsons">at least 11 years old, and it's
existed since MS-DOS 4.something. It's almost exactly mount, though MS-DOS
didn't have a procfs to nicely export the mount table.</quote></p>

<p>Alexander corrected him, saying that it had been around since 3.x, not 4.x;
Alexander went on, <quote who="Alexander Viro">it
required the mounpoint to be immediate subdirectory of root. Due to the way
they've stored the namespace state the whole thing fscked up magnificiently
if you tried to work with the root of mounted fs via the old drive name.
SUBST was less b0rken, though. And more useful, BTW - it gave weak
equivalent of tilde-expansion. Mixing them was Bad Idea(tm). I've looked at
3.30 kernel - scary and fascinating. Obviously modeled after v7, but _what_
a mess had they slapped onto the upper half for CP/M emulation... Scary. It
almost looked like a small subset of UNIX placed on a box with rather shitty
IO and buried under the heaploads of CP/M compatibility crap. They might
start with CP/M clone, but 3.x internals looked rather like a castrated and
mutilated Xenix.</quote></p>

<p>Kai Henningsen offered a correction to Alexander, pointing out that 'join'
and 'subst' used the exact same mechanism, so that <quote who="Kai
Henningsen">mixing them up in certain combinations
was impossible exactly because they used the same mechanism, which could
only store one path for each drive - so either the drive was a subst, or it
was joined somewhere (or neither), but you couldn't have both.</quote></p>

<p>Regarding Alexander's statement that, "3.x internals looked rather like a
castrated and mutilated Xenix," Kai replied, <quote who="Kai
Henningsen">That was true since 2.x, actually, and
what they mutilated was Xenix. It was officially called "Xenix
compatibility".</quote></p>

<p>Kai added, <quote who="Kai Henningsen">There is a
persistent rumour that the "\" thing was because one of the developers
simply got things wrong by accident,</quote> to which H. Peter Anvin added,
<quote who="H. Peter Anvin">And it is also obviously
bull. DOS 1.x (which was a pure CP/M clone) used / as the option character,
so for compatibility they couldn't use it for paths... *especially* since
DOS made it legal to type the option immediately adjacent to a pathname
(COPY FOO BAR/V). DOS 2.x actually had an option to use - as the option
character, which made it possible to use / as a pathname separator. DOS 2.x
also had a kernel option to only recognize devices if the path was prepended
with \DEV\ (or /DEV/), instead of polluting the namespace of every single
directory. I believe OS/2 actually used this. To this day, every version of
DOS 2.0 and later allows you to use / as the pathname separator in system
calls -- but most utilities will see it as an option marker.)</quote></p>

<p>Brandon S. Allbery also replied to the "\" rumor, saying:</p>

<quote who="Brandon S. Allbery">

<p>The ITT XTRA MS-DOS
2.11 Reference had a chapter on Xenix compatibility which explained this
stuff in detail; I've never seen it in other DOS manuals.</p>

<p>CP/M, and therefore DOS 1.x, used / to signal parameters --- and the CLI
knew about this, such that "FOO/X" would be parsed as a command "FOO" with
an argument "/X". To maintain compatibility with DOS 1.x while providing an
upgrade path to Xenix compatibility, the SWITCHAR could be set via a DOS
call or CONFIG.SYS; if set to anything but "/", "Xenix-like" command parsing
was used and DOS commands could be invoked with switches preceded by the
specified SWITCHAR; 3rd party DOS programs were supposed to use another DOS
call to get the SWITCHAR and use it appropriately. ("Xenix-like command
parsing" meaning that "FOO-X" was not treated as command "FOO" with switch
"-X" if the SWITCHAR was "-".) There was also AVAILDEV which, if set to NO,
disabled "bare" device references such as "CON", and you had to use
"\DEV\CON" or "/DEV/CON" instead; all the standard DOS 2.11 programs used
the \DEV prefix internally so they would work with AVAILDEV=NO, and again
3rd party programs were supposed to query AVAILDEV and behave appropriately.</p>

<p>That chapter also stated that DOS 3.x would default to a SWITCHAR of "-" and
would add limited multitasking features, and that DOS would gradually be
migrated to full Xenix compatibility, followed by its being fully replaced
by Xenix (!). I sometimes wonder what the computing world would be like if
Microsoft had actually done this....</p>

</quote>

</section>

<section
  title="Some Explanation Of /proc"
  subject="Getting system info from the kernel"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00105.html"
  posts="12"
  startdate="15 Nov 1999 00:00:00 -0800"
  enddate="18 Nov 1999 00:00:00 -0800"
>
<topic>BSD</topic>
<topic>FS: procfs</topic>
<topic>Ioctls</topic>
<topic>Networking</topic>

<p>Jeff Buckey asked if there were any system calls to return the information
available in '/proc/meminfo'. He was writing a program to display that
information, and was currently using '/proc/meminfo', but had heard that
relying on /proc files for program functionality was discouraged. Doug
Alcorn replied that his impression was that /proc was provided specifically
to allow user programs to access the data it contained, <i>without</i>
relying on system calls. But Alexander Viro corrected him, saying:</p>

<quote who="Alexander Viro">

<p>The point of /proc is to
avoid direct poking into the kernel memory. Moreover, in its current form it
is highly non-portable. And that includes portability between 2.0/2.2/2.4.
Please, _stop_ abusing it. Basically, _nobody_ promises that any given file
in /proc will remain there in 2.4. Most likely 2.4 will keep compatibility
symlinks, but even that is not guaranteed. If k3wl krapplications will break
- too bad for them.</p>

<p>The thing is in flux right now. Some things will become sysctls, some will
move into more reasonable places and some will simply die. The only
documented parts are /proc/&lt;pid&gt;/*, /proc/self and /proc/sys. FWIC the
rest is fair game.</p>

</quote>

<p>In a reply to a reply, he added:</p>

<quote who="Alexander Viro">

<p>Let me put it that way:
there is an area where nobody has decent (let alone portable) interfaces.
Doing it _right_ would be nice and if we will get a clean filesystem-based
solution it will not take much to take nullfs and roll the patches to *BSD.
If some *BSD folks will fill the skeleton - fine, if not - their business.
But *BSD lacks the thing just as we do. libkvm sucks too.</p>

<p>Decent namespace will fix most of our problems - we already have fs-based
solution, but it's rather messy right now. Internal interfaces are getting
more or less straight (we still have a crapload of interesting races, but
they will be the next stage; most of intimate knowledge of procfs guts is
gone from the rest of the kernel and that makes procfs fixes possible). But
the namespace _is_ a mess and implementations of procfs methods are, should
we say it, sometimes unorthodoxal (check what drivers/nubus/proc.c does. Or
ISDN stuff. Or wanrouter). Ideally I'ld see more or less common format and a
tree organised along the lines of buses hierarchy (kernel being the
replacement for nexus ;-). But namespace stuff will go when we'll have the
worst interface problems fixed and will have a list of animals that want to
be there at all.</p>

</quote>

<p>Elsewhere, he continued:</p>

<quote who="Alexander Viro">

<p>we had _no_ namespace
policy in /proc. For many years. How would you like little gems like
/proc/ip2mem or /proc/h8? No, the former has nothing to IP. And it has
nothing to do anywhere near the root.</p>

<p>We have more or less regular parts of /proc - per-process stuff and
/proc/sys (aka kernfs for BSD folks). The rest falls into several classes.
There are "subsystem information" animals. They don't fit into sysctl()
interface (albeit some of them might go there) and they are usually
read-only. Not a big deal, except that we have 1001 format and _really_
messy namespace. Finding relevant thing may be very nontrivial. meminfo,
loadavg, etc. would happily go there. There are oddballs that allow write()
- usually it's a sysctl wanting to happen. And there are real horrors - come
on, ioctl() on /proc file... (yes, we have such beasts; check /proc/mtrr for
one). And there is kcore/ksyms/kmsg group. So far cleanup had been
kernel-only, but now we are almost at the point where changes will become
visible for userland. For the most of those files nobody will really care,
but for some of them we will need compatibility links and they will stay for
a while. As for the rest... Just about anything will be better than current
ad-hockery.</p>

<p>Nobody talks about dropping the fs-based interface to this stuff and
reverting to /dev/kmem games. But there is a serious need to reshuffle this
bag of #@$! into coherent state.</p>

</quote>

</section>

<section
  title="Bug Identified From 2.1.0"
  subject="year old problem"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00086.html"
  posts="7"
  startdate="15 Nov 1999 00:00:00 -0800"
  enddate="17 Nov 1999 00:00:00 -0800"
>

<mention>Andi Kleen</mention>

<p>Eric Pouech pointed out that as of 2.1.0 (!), the debug registers were no
longer saved in the TSS. Without this feature, it was impossible to do
decent hardware-assisted debugging. Andi Kleen replied that the debug
registers were saved and restored on a task switch. Eric pointed out that
the task switch <i>restored</i> the debug registers, but no longer saved
them. Andi replied that Eric had indeed found a bug, and there followed some
implementation discussion, with no resolution on the list.</p>

</section>

<section
  title="zoned 2.3.28-J5 Announced"
  subject="[patch] zoned-2.3.28-J5"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00124.html"
  posts="4"
  startdate="16 Nov 1999 00:00:00 -0800"
  enddate="16 Nov 1999 00:00:00 -0800"
>
<topic>Big Memory Support</topic>

<mention>Chris Evans</mention>

<p>Ingo Molnar announced zoned 2.3.28-J5, adding that it should fix nearly all
known problems. Chris Evans asked what benefits the patch gave, and Ingo
explained:</p>

<quote who="Ingo Molnar">

<p>zones are separate physical
memory (RAM) areas. eg. zones in a 6GB box look this way:</p>

<ul>

<li>zone 0:      0-16MB              [ZONE_DMA]</li>
<li>zone 1:      16MB-1GB (roughly)  [ZONE_NORMAL]</li>
<li>zone 2:      1GB-6GB             [ZONE_HIGHMEM]</li>

</ul>

<p>each zone is a 'pool of pages', with separate freelists and separate buddy
bitmaps. The 2.2 allocator had everything in one big zone.</p>

<p>Higher order requests 'steal' DMA pages only as a last resort - previously
GFP_DMA had to search for DMA-able pages by looking through all pages in a
given page-list, plus normal GFP_ requests took DMA pages. So the zone
allocator alone already gives much better GFP_DMA behavior, even on smaller
boxes. In the future there will be GFP_DMA32 too.</p>

<p>The top-level structure is the 'zonelists' array, which contains a
NULL-delimited list of 'target zones', in priority order. Eg. for
GFP_HIGHMEM (which now covers the majority of allocations done in a Linux
system) is { zone2, zone1, zone0, NULL }. For GFP_BUFFER it's { zone1,
zone0, NULL }. The 'gfp_mask' parameter of the allocation functions is now
an index into this 'zonelists' array, this gets resolved at compile-time in
99% of the cases.</p>

<p>Some other checks have been moved into the inlined part as well and get
eliminated at compile-time. The page allocation entry points have been
reduced to the minimum of 2 (formerly we had separate free_pages() and
__free_page(), now it's all interfacing into __free_pages_ok()). The
result is a more streamlined and lightweight page allocator. (despite the
additional code it has). __free_page() is partly inlined now as well, the
'put_page_testzero()' thing is inlined, which is triggered in 60-70% of the
cases.</p>

<p>the 'zonelists' array is generated runtime (once at boot), so systems which
do not have highmem do not have to go through the empty zone every
time.</p>

</quote>

</section>

<section
  title="Automatically Updating the RTC"
  subject="updating the RTC automagically"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00159.html"
  posts="59"
  startdate="16 Nov 1999 00:00:00 -0800"
  enddate="23 Nov 1999 00:00:00 -0800"
>
<topic>Real-Time</topic>

<p>Ulrich Windl did some research on what would be required in updated the
realtime clock (RTC) whenever system time changed. After a few heated words
with Riley Williams, Ulrich added, <quote who="Ulrich Windl">In case if you follow comp.protocols.time.ntp occasionally,
you will find out that a lot of problems are related to problems where Linux
does not update the RTC properly (e.g. when running localtime, not UTC).
Let's say HP-UX 11.0 is a real UNIX if that helps you. I'm also aware that
the RTC update code is basically unchanged since Linux- 0.99.</quote></p>

<p>Riley replied:</p>

<quote who="Riley Williams">

<p>I can understand the point you're making, but
would have to point out that Linux is NOT the main culprit here - that
'honour' belongs to a certain MacroHard range of products.</p>

<p>To be blunt, where a system needs to dual boot between LoseSleep and
*ANY* decent operating system, and LoseSleep is set to honour DST,
then the RTC *MUST* be run in localtime rather than UTC/GMT as if it isn't,
LoseSleep will trash it for you. If you want to get this fixed, persuade
MacroHard to fix it as they're the only ones who can...</p>

</quote>

</section>

<section
  title="Historical Digression"
  subject="LK in a BK repository screen shots"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00170.html"
  posts="7"
  startdate="16 Nov 1999 00:00:00 -0800"
  enddate="18 Nov 1999 00:00:00 -0800"
>
<topic>BSD</topic>
<topic>FS: UMSDOS</topic>
<topic>FS: ext2</topic>
<topic>PCI</topic>
<topic>Version Control</topic>

<mention>Larry McVoy</mention>
<mention>Paul Gortmaker</mention>

<p>Larry McVoy gave some screenshots of <a
href="http://www.bitkeeper.com/bk10.html">BitKeeper</a> hosting the entire
history of Linux. Later in the thread, Riley Williams gave a pointer to his
<a href="http://www.memalpha.cx/Linux/Kernel/">Linux history</a> page, and
said:</p>

<quote who="Riley Williams">

<p>I'm just revamped most of
those pages, but here's a quick analysis of the kernels and patches that
currently appear to exist:</p>

<ol>

<li>There are lots of holes prior to 0.99.14 where released kernels appear
to no longer exist. This includes most of the 0.99.13 subseries, of which
only 0.99.13 and 0.99.13k now appear to exist.</li>

<li>For most of the kernels prior to 0.99.13, patches were apparently never
released, so one would have to use the individual kernel tarballs as the
necessary sources.</li>

<li>Although the actual kernel tarballs for 1.2.10 and 1.3.0 both still
exist, the original patch between them does not. However, it would not be
difficult to recreate it.</li>

<li>With the sole exception pointed out above, all kernel tarballs and patch
files from 0.99.14 to date still exist.</li>

</ol>

<p>Based on the above, it should be possible to build up a repository showing
the complete history of all kernels from 0.99.14 to date, but it would
probably be meaningless to include any earlier kernels.</p>

<p>Note that the current set of links refer exclusively to kernels and patches
available on ftp.kernel.org and do *NOT* include any of the various author
series (such as the -ac kernels). I will be adding other prime release
kernels to that list as and when I find them on the Internet, but the pages
include details of kernels and patches in my collection that are not on
ftp.kernel.org (identifyable by there being no link for the relevant
"Version" or "Patch From" number respectively).</p>

</quote>

<p>To item 3 in Riley's list, Paul Gortmaker pointed out that there had never
been a patch betweeh versions 1.2.10 and 1.3.0; he went on to quote Linus
Torvalds' announcement from June 12, 1995:</p>

<quote who="Linus Torvalds">

<p>Ok, I finally made a public
release of 1.3.0, and it's available in the normal places (<a
href="ftp://ftp.cs.helsinki.fi">ftp.cs.helsinki.fi</a> and <a
href="ftp://ftp.funet.fi">ftp.funet.fi</a>).</p>

<p>Only full-source versions of the kernel exist right now: any patches are
likely to be huge, as lots of things have been moved around.</p>

<p>NOTE! 1.3.0 is a development kernel, and if things don't work perfectly
don't be surprised. Lots of patches that didn't go into 1.2.x because they
were too risky are in 1.3.0.</p>

<p>That said, I naturally run 1.3.0 at my own machine, and it seems to be
pretty stable. Knock wood.</p>

<p>

<p>Anyway, a _very_ rough list of "what's new" for 1.3.0 (just a general
overview):</p>

</p>

<p>

<ul>

<li>new networking setup: the net directory layout is different, and there's
a lot more there. Expect this to change even more in the future, but now
we're just supposed to pound out the current "undocumented features".</li>

<li>Lots of portability patches: most of my earlier axp-patches are now in
the standard kernel. Not all of them, though: expect the axp patches to be
more-or-less fully integrated by 1.3.2 or so.</li>

<li>three new system call entry points for x86 (two of which were actually
motivated by axp-portability cleanups):</li>

<ul>

<li>new select() entrypoint (5-arg version, arguments in %ebx,
%ecx, %edx, %esi, %edi instead of the old broken memory block
setup)</li>

<li>getdents() system call entrypoint to read multiple directory entries.
The old "readdir()" system call entrypoint can handle only one entry at a
time (and has a braindead interface).</li>

<li>flock() system call entrypoint (the old flock() library emulation never
really got all the BSD semantics quite right)</li>

</ul>
</ul>

</p>

<p>&#091;Digression mode on: I'd personally like to see the new libraries be
1.3.0-specific and just leave the old libraries as a "stable" version
together with 1.2.x, but I don't know if that is really practical, and it's
up to hjl anyway.&#093;</p>

<p>The axp patches change a lot of things all over the place, notably by
splitting up the PCI handling into architecture-independent parts and moving
include-files areound a lot to better fit a multi-architecture setup. The
axp patches have also resulted in various cleanups, and doing things "right"
to be able to handle it cleanly on different setups. Thus the directory
reading code is now much cleaner, and the mmap() system call will follow
normal unix semantics more closely by actually honouring the "where"
argument for non-fixed mappings and trying to find an address that is close
to the requested area.</p>

<p>One downside: the UMSDOS filesystem is disabled in 1.3.0, as the directory
cleanups broke that temporarily. Expect this to be fixed in 1.3.1 or soon
afterwards. If you rely on umsdos, don't get 1.3.0.</p>

<p>Alpha-people: as mentioned, don't expect this to compile cleanly on alpha's
yet. The ext2fs 32/64-bit problem isn't cleanly resolved yet, and some other
unclean axp-patches haven't been integrated. Others haven't been tested in
their new incarnation (the PCI stuff, for example: David M-T, how does the
new setup look to you?). And the latest alpha-diffs by others haven't been
integrated at all.</p>

<p>So, there it is: comments and patches are welcome.  I have been slightly
overworked with all the mails/patches/updates after DECUS, so I may well
have ignored your particular favourite patch. If so, keep on re-sending it
if you think it really is needed. But remember: not all patches need to go
into the very earliest 1.3.x releases, and we have about 95 patchlevels to
go on this thing yet..</p>

</quote>

</section>

<section
  title="Dangerous Website Advocated In Spam"
  subject="hey wassup KErnEL ;)"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00213.html"
  posts="6"
  startdate="17 Nov 1999 00:00:00 -0800"
  enddate="17 Nov 1999 00:00:00 -0800"
>
<topic>Spam</topic>

<p>An unknown assailant posted a URL to a site, and Michael H. Warfield
replied:</p>

<quote who="Michael H. Warfield">

<p>Warning...  This is
NOT spam. It is a cybermined hostile web site! Do not go there. It is
designed to infect and damage windows systems. We've analyzed some of the
pages on that site. They are designed to bypass security checks (pages build
URL's to hostile pages by assembling Java Script variables) and run hostile
scripts. The silly ape has one script which attempts to format all of your
hard drives (but it starts out attempting to format c: - well duh!).</p>

<p>It should have little effect on our Linux systems, but I still would not go
there with any active content (Java or JavaScript) enabled!</p>

</quote>

<p>Bernhard Rosenkraenzer added, <quote who="Bernhard Rosenkraenzer">Another warning: The sender of this SPAM is using its
recipients in the From: field, as well. At least two of the messages so far
were sent from my addresses. The people in the From: field are valid
addresses, but not at all responsible for whatever is happening. (I know -
two people already complained to my sysadmin about having received the
message from me).</quote></p>

<p>Rick Franchuk analyzed some of the site's html and found that one page
forced visitors to send spam in their own name. Rick pointed out that the
site was apparently being served from ixcis.net; Gerhard Mack replied:</p>

<quote who="Gerhard Mack">

<p>Uhh no offence, but instead
of complaining to the list why doesn't somone document all of this and
complain to the uplink?</p>

<blockquote>

<tt>

<p>14  sl-smartt-1-0-0-T3.sprintlink.net (144.228.135.6)  289.606 ms  218.194
ms  219.797 ms</p>

<p>15  blackhat-T1.austtx.ixcis.net (216.140.128.10)  359.599 ms  228.010 ms
270.004 ms</p>

<p>16  sex.interactwithme.com (216.140.158.119)  229.419 ms  238.185 ms 219.788
ms</p>

</tt>

</blockquote>

<p>Don't rant, protect the week and destroy the evil :) (if worst come to worst
that's only a t1)</p>

</quote>

<p>And Derek Martin said:</p>

<quote who="Derek Martin">

<p>Well, the guy wasn't very
bright. He sent it to an address that didn't exist, and the list got the
bounce message from his relay.</p>

<p>From the headers:</p>

<blockquote>

<tt>|------------------------- Failed addresses follow: ---------------------|<br />
 &lt;gjmichel@earthlink.net&gt; ... transport smtp: 550<br />
&lt;gjmichel@earthlink.net&gt;... User unknown<br />
|------------------------- Message text follows: ------------------------|<br />
Received: from ---(really [198.142.239.33]) by mailarray.mpx.com.au<br />
        via smtpd with smtp<br />
        id &lt;m11nl4z-000JWeC@mailarray.mpx.com.au&gt;<br />
        for &lt;unknown&gt;; Wed, 17 Nov 1999 03:03:37 +1100<br />
        (/\##/\ Smail3.1.30.13.Y2K #30.35 built 1-mar-01)</tt>

</blockquote>

<p>The address the relay received it from was 198.142.239.33, which nslookup
says is:</p>

<blockquote>

<tt>Name:    dialup-mdc23933.mpx.com.au<br />
Address:  198.142.239.33</tt>

</blockquote>

<p>It's one of their own customers.  Call them and complain. There's probably
some charge you could bring against them, like stealing computer resources
or some such thing, but they're in Australia, so good luck.</p>

</quote>

</section>

<section
  title="Adaptec Quartet64 Driver For Linux"
  subject="Adaptec Quartet64 (ana-62044) support for linux ?"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00330.html"
  posts="3"
  startdate="17 Nov 1999 00:00:00 -0800"
  enddate="17 Nov 1999 00:00:00 -0800"
>
<topic>BSD</topic>
<topic>Networking</topic>

<mention>Donald Becker</mention>

<p>Harald Evensen asked if the Adaptec Quartet64 were supported under Linux.
Anton Ivanov replied:</p>

<quote who="Anton Ivanov">

<p>I asked adaptec about a
month anda half ago and got the usual blah, blah and Win + Novell praise and
they were unable to answer anything about support under linux, solaris and
BSD.</p>

<p>After that I asked this question on linux-network on Oct 13 and the answer
from Donald Becker was yes. Check the linux-network archive for the full
thread... (I am not subscribed to linux-net).</p>

<p>The driver for the new ones is not tulip (as per the old web page
instructions on what google returns for you) it is the starfire:</p>

<a
href="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/test/starfire.c">ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/test/starfire.c</a>

</quote>

<p>Jes Sorensen added, <quote who="Jes Sorensen">it's
included in recent 2.3.x and works just fine (I have one of them
here).</quote></p>

</section>

<section
  title="When LVM And Others Will Go Into The Main Tree"
  subject="Re: Announce: LVM Patch against kernel 2.3.28"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00506.html"
  posts="17"
  startdate="19 Nov 1999 00:00:00 -0800"
  enddate="21 Nov 1999 00:00:00 -0800"
>
<topic>Disk Arrays: LVM</topic>
<topic>FS: JFS</topic>
<topic>FS: ReiserFS</topic>
<topic>FS: ext2</topic>
<topic>FS: ext3</topic>

<mention>Heinz Mauelshagen</mention>
<mention>Linus Torvalds</mention>

<p>David Weinehall asked when LVM (Logical Volume Manager) would be folded into
the Linus Torvalds tree. He opined, <quote who="David Weinehall">this is
imho one of the most important things to go into the kernel, from an
enterprise point of view.</quote> Ulrik De Bie replied that patches had been
sent to Linus, but had not been acknowledged. Ulrik guessed Linus was pretty
busy lately. Heinz Mauelshagen also said Linus had received it several times
but had not replied. He suggested that maybe some noise from David would
make a difference. Christopher Horn asked if anyone knew any reason why LVM
should <i>not</i> be folded into the kernel, and said wistfully, <quote
who="Christopher Horn">It would be a blessing, especially if the journaling
Ext2 or Reiserfs stuff was also folded into 2.4 as well. The lack of a LVM
and a JFS have unfortunately kept any serious Linux use out of our shop for
a while now.</quote></p>

<p>Hans Reiser replied, <quote who="Hans Reiser">I think
that if you use the SuSE kernel you'll get a nicely patched well supported
LVM for which we are developing a reiserfs resizer which SuSE will also
support. (SuSE is a sponsor for ReiserFS.) I expect that LVM will eventually
make it into the kernel, all of the FS developers that I know of for Linux
have recommended that Linus add it. If you use a SuSE patched kernel you'll
just get it somewhat earlier is all.</quote></p>

<p>Alan Cox also replied to Christopher, saying, <quote who="Alan Cox">I can
see LVM getting into a standard kernel but not really ext3 (journalling
ext2) or reiserfs. Ext3 adds stuff to the buffer cache behaviour that needs
further figuring for 2.3.x to make Linus happy. Reiserfs exports half of the
buffer cache into itself and includes extra C files in fs/buffer.c and has
similar questions to solve. There is also a problem that right now neither
ext3 or reiserfs can journal over software raid.</quote></p>

<p>Hans and Alan had a bit of respectful dispute over the problems of reiserfs,
in which Alan said things like, <quote who="Alan Cox">I'm not blaming anyone for it. Someone asked for a state of
play,</quote> and Hans said things like, <quote who="Hans Reiser">It's your decision to make and I respect it.</quote></p>

</section>

<section
  title="Raw Vs. Medium Raw Keyboard Mode"
  subject="Mark keyboard RAW mode deprecated"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_9911_03/msg00745.html"
  posts="12"
  startdate="19 Nov 1999 00:00:00 -0800"
  enddate="24 Nov 1999 00:00:00 -0800"
>

<mention>David S. Miller</mention>

<p>Pavel Machek said that raw keyboard mode no longer made any sense, given the
diversity of hardware in the world. He posted a patch to warn users that raw
mode was deprecated. David S. Miller objected that X used raw mode
exclusively; but Pavel replied that it would be trivial to convert X to
medium raw mode, and would be necessary to get Mac's working properly. But
to this, Linus Torvalds replied, <quote who="Linus Torvalds">Why? Let people
do whatever they want. I don't see the whole point of medium-raw being so
incredibly superior.</quote> Pavel and others discussed the various problems
for a bit, but at some point Pavel said, <quote who="Pavel Machek">Anyway,
vojtech told me medium raw has big problem: limitation to 128 keys. Bad. So
I'm stopping this.</quote> EOT.</p>

</section>

</kc>
