<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="153" date="11 Feb 2002 00:00:00 -0800" />

<stats posts="3201" size="14822" contrib="753" multiples="375" lastweek="273">

<person posts="116" size="301" who="Alan Cox " />
<person posts="86" size="326" who="Daniel Phillips " />
<person posts="71" size="262" who="&quot;H. Peter Anvin&quot; " />
<person posts="70" size="206" who="Jeff Garzik " />
<person posts="63" size="213" who="Dave Jones " />
<person posts="61" size="215" who="Ingo Molnar " />
<person posts="52" size="209" who="Robert Love " />
<person posts="51" size="188" who="Andrew Morton " />
<person posts="45" size="170" who="Linus Torvalds " />
<person posts="42" size="241" who="Rob Landley " />
<person posts="39" size="135" who="Rik van Riel " />
<person posts="37" size="434" who="Hans Reiser " />
<person posts="37" size="127" who="Daniel Nofftz " />
<person posts="36" size="168" who="Larry McVoy " />
<person posts="34" size="147" who="Keith Owens " />
<person posts="33" size="179" who="James Simmons " />
<person posts="33" size="169" who="Denis Vlasenko " />
<person posts="32" size="111" who="Jens Axboe " />
<person posts="25" size="99" who="Roy Sigurd Karlsbakk " />
<person posts="25" size="85" who="Horst von Brand " />
<person posts="24" size="149" who="&quot;David S. Miller&quot; " />
<person posts="23" size="95" who="Andreas Dilger " />
<person posts="23" size="86" who="Greg KH " />
<person posts="23" size="75" who="Zwane Mwaikambo " />
<person posts="23" size="72" who="Alexander Viro " />
<person posts="22" size="100" who=" (Eric W. Biederman)" />
<person posts="22" size="78" who="Andi Kleen " />
<person posts="22" size="77" who="Thomas Hood " />
<person posts="22" size="69" who="Oliver Xymoron " />
<person posts="21" size="145" who="Pavel Machek " />
<person posts="21" size="65" who="Martin Dalecki " />
<person posts="21" size="62" who="Jeff Garzik " />
<person posts="19" size="97" who="Andrea Arcangeli " />
<person posts="19" size="70" who="&quot;Calin A. Culianu&quot; " />
<person posts="19" size="64" who="Russell King " />
<person posts="18" size="60" who="Bill Davidsen " />
<person posts="17" size="208" who="Momchil Velikov " />
<person posts="17" size="65" who="Dieter =?iso-8859-15?q?N=FCtzel?= " />
<person posts="16" size="56" who="Roman Zippel " />
<person posts="15" size="82" who="Richard Gooch " />
<person posts="15" size="78" who="Rusty Russell " />
<person posts="15" size="75" who="Andi Kleen " />
<person posts="15" size="55" who="&quot;Richard B. Johnson&quot; " />
<person posts="15" size="51" who="Timothy Covell " />
<person posts="14" size="171" who="Evgeniy Polyakov " />
<person posts="14" size="60" who="" />
<person posts="14" size="56" who="William Lee Irwin III " />
<person posts="14" size="54" who="" />
<person posts="13" size="72" who="Pete Zaitcev " />
<person posts="13" size="59" who="Trond Myklebust " />
<person posts="13" size="42" who="Jamie Lokier " />
<person posts="13" size="38" who="Stevie O " />
<person posts="12" size="57" who="Oleg Drokin on behalf of Hans Reiser " />
<person posts="12" size="43" who="Stephan von Krawczynski " />
<person posts="12" size="35" who="David Woodhouse " />
<person posts="11" size="91" who="Christoph Hellwig " />
<person posts="11" size="51" who="Hans-Peter Jansen " />
<person posts="11" size="39" who="Erik Andersen " />
<person posts="11" size="31" who="&quot;Drew P. Vogel&quot; " />
<person posts="10" size="120" who="Dipankar Sarma " />
<person posts="10" size="70" who="Nathan " />
<person posts="10" size="43" who="Ken Brownfield " />
<person posts="10" size="37" who="Geert Uytterhoeven " />
<person posts="10" size="37" who="Vojtech Pavlik " />
<person posts="10" size="33" who="Oleg Drokin " />
<person posts="10" size="32" who=" (Kai Henningsen)" />
<person posts="10" size="30" who="Chris Wedgwood " />
<person posts="10" size="30" who="Kristian " />
<person posts="10" size="29" who="Arnaldo Carvalho de Melo " />
<person posts="9" size="61" who="Francois Romieu " />
<person posts="9" size="51" who="Andre Hedrick " />
<person posts="9" size="46" who="Christoph Hellwig " />
<person posts="9" size="40" who="Alessandro Suardi " />
<person posts="9" size="33" who="Daniel Jacobowitz " />
<person posts="9" size="28" who="John Levon " />
<person posts="9" size="20" who="" />
<person posts="8" size="244" who="David Howells " />
<person posts="8" size="50" who="&quot;Jack F. Vogel&quot; " />
<person posts="8" size="37" who="Rainer Krienke " />
<person posts="8" size="32" who="Stuart Young " />
<person posts="8" size="31" who="Patrick Mochel " />
<person posts="8" size="31" who="Jeff Chua " />
<person posts="8" size="29" who="Tom Rini " />
<person posts="8" size="29" who="Roger Larsson " />
<person posts="8" size="27" who="Jakub Jelinek " />
<person posts="8" size="24" who="Pierre Rousselet " />
<person posts="7" size="130" who="Jean Tourrilhes " />
<person posts="7" size="74" who="Krzysztof Halasa " />
<person posts="7" size="38" who="David Ford " />
<person posts="7" size="32" who="Petr Vandrovec " />
<person posts="7" size="30" who="&quot;Guillaume Boissiere&quot; " />
<person posts="7" size="30" who="Anton Altaparmakov " />
<person posts="7" size="29" who="Ed Sweetman " />
<person posts="7" size="27" who="Douglas Gilbert " />
<person posts="7" size="26" who="Chris Mason " />
<person posts="7" size="25" who="Luigi Genoni " />
<person posts="7" size="22" who="Miles Lane " />
<person posts="7" size="22" who="Nigel Gamble " />
<person posts="7" size="22" who="&quot;George Bonser&quot; " />
<person posts="7" size="21" who="Mark Zealey " />
<person posts="7" size="20" who="Matti Aarnio " />
<person posts="7" size="18" who=" (Oliver Neukum)" />
<person posts="6" size="158" who="Dave McCracken " />
<person posts="6" size="117" who="Paul Mackerras " />
<person posts="6" size="35" who="Hugh Dickins " />
<person posts="6" size="30" who="=?iso-8859-1?Q?Rasmus_B=F8g_Hansen?= " />
<person posts="6" size="30" who="Nicholas Lee " />
<person posts="6" size="28" who="Kris Urquhart " />
<person posts="6" size="27" who="&quot;Nix N. Nix&quot; " />
<person posts="6" size="26" who=" (Linus Torvalds)" />
<person posts="6" size="26" who="Joe Thornber " />
<person posts="6" size="24" who="David Brownell " />
<person posts="6" size="23" who="Eli Carter " />
<person posts="6" size="22" who="Peter =?iso-8859-1?Q?W=E4chtler?= " />
<person posts="6" size="22" who="Martin Bahlinger " />
<person posts="6" size="21" who="Steffen Persvold " />
<person posts="6" size="20" who="David Weinehall " />
<person posts="6" size="18" who="Xavier Bestel " />
<person posts="6" size="15" who="Kevin Breit " />
<person posts="5" size="115" who="Doug Ledford " />
<person posts="5" size="68" who="Paulo Andre' " />
<person posts="5" size="51" who="Sebastian =?ISO-8859-1?Q?Dr=F6ge?= " />
<person posts="5" size="26" who="Harald Welte " />
<person posts="5" size="25" who="Bob Miller " />
<person posts="5" size="23" who="Xinwen - Fu " />
<person posts="5" size="21" who="Marcelo Tosatti " />
<person posts="5" size="21" who="Hartmut Holz " />
<person posts="5" size="20" who="Josh MacDonald " />
<person posts="5" size="20" who="Rick Stevens " />
<person posts="5" size="18" who="Michal Jaegermann " />
<person posts="5" size="17" who="&quot;Stephen C. Tweedie&quot; " />
<person posts="5" size="17" who="Dave Hansen " />
<person posts="5" size="16" who="Skip Ford " />
<person posts="5" size="15" who="Adrian Bunk " />
<person posts="5" size="14" who="Dana Lacoste " />
<person posts="5" size="14" who="Helge Hafting " />
<person posts="5" size="12" who="Alexander Sandler " />
<person posts="5" size="12" who="" />
<person posts="5" size="12" who="&quot;Diego Calleja&quot; " />
<person posts="5" size="11" who="Alex Davis " />
<person posts="4" size="56" who="Tim Moore " />
<person posts="4" size="50" who="&quot;Daniel E. Shipton&quot; " />
<person posts="4" size="47" who="Duncan Sands " />
<person posts="4" size="38" who="Russ Weight " />
<person posts="4" size="30" who="Ben Greear " />
<person posts="4" size="22" who="Martin Wilck " />
<person posts="4" size="21" who="J Sloan " />
<person posts="4" size="18" who="&quot;Kevin P. Fleming&quot; " />
<person posts="4" size="18" who="Steve Lord " />
<person posts="4" size="17" who="Stephen Lord " />
<person posts="4" size="17" who="Stelian Pop " />
<person posts="4" size="16" who="&quot;Martin Eriksson&quot; " />
<person posts="4" size="16" who="&quot;Heinz J . Mauelshagen&quot; " />
<person posts="4" size="16" who="Benjamin Pharr " />
<person posts="4" size="15" who="Suparna Bhattacharya " />
<person posts="4" size="15" who="" />
<person posts="4" size="15" who="Nathan Field " />
<person posts="4" size="15" who="Rene Rebe " />
<person posts="4" size="14" who="Krzysztof Oledzki " />
<person posts="4" size="14" who="Disconnect " />
<person posts="4" size="14" who="=?ISO-8859-1?Q?G=E9rard_Roudier?= " />
<person posts="4" size="14" who="Borsenkow Andrej " />
<person posts="4" size="14" who="" />
<person posts="4" size="13" who="Anuradha Ratnaweera " />
<person posts="4" size="13" who="Dan Chen " />
<person posts="4" size="13" who="&quot;Tim Pepper&quot; " />
<person posts="4" size="13" who="Manuel McLure " />
<person posts="4" size="13" who="Olaf Dietsche " />
<person posts="4" size="13" who="Val Henson " />
<person posts="4" size="13" who="&quot;Henning P. Schmiedehausen&quot; " />
<person posts="4" size="12" who="Brian Gerst " />
<person posts="4" size="12" who="&quot;Karl&quot; " />
<person posts="4" size="12" who="Richard Zidlicky " />
<person posts="4" size="11" who="Ville Herva " />
<person posts="4" size="11" who="Lars Christensen " />
<person posts="4" size="11" who="&quot;william fitzgerald&quot; " />
<person posts="4" size="11" who="Peter Monta " />
<person posts="4" size="11" who="Shawn Starr " />
<person posts="4" size="10" who="Louis Garcia " />
<person posts="4" size="10" who="Mark Hahn " />
<person posts="4" size="10" who="John Weber " />
<person posts="4" size="8" who="Pozsar Balazs " />
<person posts="3" size="62" who="Dave Olien " />
<person posts="3" size="44" who="&quot;Yann E. MORIN&quot; " />
<person posts="3" size="43" who="Tim Coleman " />
<person posts="3" size="29" who="&quot;Marcel Kunath&quot; " />
<person posts="3" size="26" who="Badari Pulavarty " />
<person posts="3" size="26" who="Joachim Steiger " />
<person posts="3" size="24" who="Corey Minyard " />
<person posts="3" size="19" who="Alan Cox " />
<person posts="3" size="17" who=" (Michel Angelo da Silva Pereira)" />
<person posts="3" size="16" who="Mingming cao " />
<person posts="3" size="16" who="Peter Makholm " />
<person posts="3" size="15" who="&quot;Robbert Kouprie&quot; " />
<person posts="3" size="15" who="Jim McDonald " />
<person posts="3" size="15" who="Werner Almesberger " />
<person posts="3" size="14" who="Ed Tomlinson " />
<person posts="3" size="14" who="&quot;Balbir Singh&quot; " />
<person posts="3" size="14" who="Troy Benjegerdes " />
<person posts="3" size="13" who="Ralf Oehler " />
<person posts="3" size="13" who="Liakakis Kostas " />
<person posts="3" size="13" who="Andrew Pimlott " />
<person posts="3" size="12" who="christophe =?iso-8859-15?Q?barb=E9?= " />
<person posts="3" size="12" who="Chris Friesen " />
<person posts="3" size="12" who="&quot;Albert D. Cahalan&quot; " />
<person posts="3" size="12" who="&quot;W. Michael Petullo&quot; " />
<person posts="3" size="11" who="&quot;Eric S. Raymond&quot; " />
<person posts="3" size="11" who="Francesco Munda " />
<person posts="3" size="11" who="Martin Knoblauch " />
<person posts="3" size="11" who="Lionel Bouton " />
<person posts="3" size="11" who="&quot;Petr Vandrovec&quot; " />
<person posts="3" size="11" who="Andrey Panin " />
<person posts="3" size="11" who="Juan Quintela " />
<person posts="3" size="10" who="Ragnar Hojland Espinosa " />
<person posts="3" size="10" who="DervishD " />
<person posts="3" size="10" who="Arjan van de Ven " />
<person posts="3" size="10" who="Rasmus Andersen " />
<person posts="3" size="10" who="Jesse Pollard " />
<person posts="3" size="10" who="Benjamin Herrenschmidt " />
<person posts="3" size="9" who="Paul Gortmaker " />
<person posts="3" size="9" who="Thomas Davis " />
<person posts="3" size="9" who="&quot;William Scott Lockwood III&quot; " />
<person posts="3" size="9" who="Neale Banks " />
<person posts="3" size="9" who="Robert Schwebel " />
<person posts="3" size="9" who="Giacomo Catenazzi " />
<person posts="3" size="9" who="Shawn " />
<person posts="3" size="9" who="&quot;Manfred Spraul&quot; " />
<person posts="3" size="9" who="Richard Henderson " />
<person posts="3" size="9" who="&quot;Matthew D. Pitts&quot; " />
<person posts="3" size="9" who="&quot;Anish Srivastava&quot; " />
<person posts="3" size="8" who="David Balazic " />
<person posts="3" size="8" who="&quot;J.A. Magallon&quot; " />
<person posts="3" size="8" who="Mikael Pettersson " />
<person posts="3" size="8" who="&quot;Ro0tSiEgE&quot; " />
<person posts="3" size="8" who="&quot;James Stevenson&quot; " />
<person posts="3" size="8" who="Oliver Feiler " />
<person posts="3" size="8" who="Wakko Warner " />
<person posts="3" size="8" who="Mohammed Sameer " />
<person posts="3" size="8" who="&quot;Dan Maas&quot; " />
<person posts="3" size="7" who="Andrea Ferraris " />
<person posts="3" size="7" who="Zwane Mwaikambo " />
<person posts="3" size="7" who="&quot;Andreas Happe&quot; " />
<person posts="3" size="7" who="Steven Hassani " />
<person posts="3" size="6" who="Britt Park " />
<person posts="3" size="6" who="Alex Khripin " />
<person posts="3" size="6" who="=?iso-8859-1?q?Yours=20Lovingly?= " />
<person posts="2" size="47" who="&quot;Mike Spreitzer&quot; " />
<person posts="2" size="39" who="&quot;Andrew Griffiths&quot; " />
<person posts="2" size="38" who="Michael May " />
<person posts="2" size="35" who="Patrick Mansfield " />
<person posts="2" size="33" who="Urban Widmark " />
<person posts="2" size="29" who="Kent Yoder " />
<person posts="2" size="27" who="A Guy Called Tyketto " />
<person posts="2" size="19" who="frode " />
<person posts="2" size="18" who="Stefani Seibold " />
<person posts="2" size="18" who="&quot;Guido Leenders&quot; " />
<person posts="2" size="16" who="Ross Wakelin " />
<person posts="2" size="14" who="&quot;Grover, Andrew&quot; " />
<person posts="2" size="14" who="Bernd Schubert " />
<person posts="2" size="13" who="David Hajek " />
<person posts="2" size="12" who="Taco IJsselmuiden " />
<person posts="2" size="12" who="Tom Lord " />
<person posts="2" size="12" who="Austin Gonyou " />
<person posts="2" size="11" who="Alex Bligh - linux-kernel " />
<person posts="2" size="11" who="Brian Lavender " />
<person posts="2" size="10" who="Andrew Clausen " />
<person posts="2" size="10" who="&quot;Rajasekhar Inguva&quot; " />
<person posts="2" size="10" who="Stephen Rothwell " />
<person posts="2" size="10" who="David Lang " />
<person posts="2" size="10" who="Nathan Poznick " />
<person posts="2" size="10" who="Kilobug " />
<person posts="2" size="10" who="Alan Stern " />
<person posts="2" size="9" who="Daniel Robbins " />
<person posts="2" size="9" who="&quot;Duc Vianney&quot; " />
<person posts="2" size="9" who="Athanasius " />
<person posts="2" size="9" who="ken " />
<person posts="2" size="9" who="&quot;Erik A. Hendriks&quot; " />
<person posts="2" size="9" who="&quot;Cabaniols, Sebastien&quot; " />
<person posts="2" size="9" who="J Sloan " />
<person posts="2" size="9" who="&quot;Roger Massey&quot; " />
<person posts="2" size="8" who="Justin A " />
<person posts="2" size="8" who="Terje Eggestad " />
<person posts="2" size="8" who="Sven Heinicke " />
<person posts="2" size="8" who="Joerg Pommnitz " />
<person posts="2" size="8" who="Jeff Chua " />
<person posts="2" size="8" who="&quot;Jon Anderson&quot; " />
<person posts="2" size="8" who="&quot;Deepinder Singh&quot; " />
<person posts="2" size="8" who="Nikita Gergel " />
<person posts="2" size="8" who="Joel Becker " />
<person posts="2" size="7" who="Andreas Schwab " />
<person posts="2" size="7" who="Xeno " />
<person posts="2" size="7" who="&quot;kumar M&quot; " />
<person posts="2" size="7" who="&quot;Ishan O. Jayawardena&quot; " />
<person posts="2" size="7" who="Francois-Xavier 'FiX' KOWALSKI" />
<person posts="2" size="7" who="&quot;Peter Wong&quot; " />
<person posts="2" size="7" who="David Mosberger " />
<person posts="2" size="7" who="Fabrice Eudes " />
<person posts="2" size="7" who="" />
<person posts="2" size="7" who="john carmack " />
<person posts="2" size="7" who="&quot;Edward S. Marshall&quot; " />
<person posts="2" size="7" who="&quot;&quot; " />
<person posts="2" size="7" who="Catalin Marinas " />
<person posts="2" size="7" who="Jan Harkes " />
<person posts="2" size="7" who="&quot;Daniel J Blueman&quot; " />
<person posts="2" size="7" who=" (Mirian Crzig Lennox)" />
<person posts="2" size="7" who="Wayne Whitney " />
<person posts="2" size="7" who="&quot;Kent E Yoder&quot; " />
<person posts="2" size="7" who="Anthony Kong " />
<person posts="2" size="6" who="syzygy " />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="" />
<person posts="2" size="6" who="Felix von Leitner " />
<person posts="2" size="6" who="&quot;Justin T. Gibbs&quot; " />
<person posts="2" size="6" who="Heinz Diehl " />
<person posts="2" size="6" who=" (David Wagner)" />
<person posts="2" size="6" who="Mike Dresser " />
<person posts="2" size="6" who="Holger Lubitz " />
<person posts="2" size="6" who="Todor Todorov " />
<person posts="2" size="6" who="&quot;AaZbooks.com&quot; " />
<person posts="2" size="6" who=" (H. Peter Anvin)" />
<person posts="2" size="6" who="&quot;Alpha Beta&quot; " />
<person posts="2" size="6" who="Ruben Safir " />
<person posts="2" size="6" who="John Kodis " />
<person posts="2" size="6" who="Patrick Mauritz " />
<person posts="2" size="6" who="Charles Cazabon " />
<person posts="2" size="6" who="Petr Baudis " />
<person posts="2" size="6" who="Tobias Wollgam " />
<person posts="2" size="6" who="&quot;Jeffrey W. Baker&quot; " />
<person posts="2" size="6" who="Anthony Campbell " />
<person posts="2" size="6" who="Gregor Jasny " />
<person posts="2" size="6" who="Denis Oliver Kropp " />
<person posts="2" size="6" who="&quot;Simon Turvey&quot; " />
<person posts="2" size="6" who="Sam Ravnborg " />
<person posts="2" size="6" who="Florian Weimer " />
<person posts="2" size="6" who="Thomas Winischhofer " />
<person posts="2" size="6" who="Brendan J Simon " />
<person posts="2" size="6" who="Andreas Tscharner " />
<person posts="2" size="6" who="&quot;=?iso-8859-2?Q?Burj=E1n_G=E1bor?=&quot;" />
<person posts="2" size="6" who="&quot;mumismo&quot; " />
<person posts="2" size="6" who="&quot;Trever L. Adams&quot; " />
<person posts="2" size="6" who="Tim Schmielau " />
<person posts="2" size="6" who="Ryan Cumming " />
<person posts="2" size="6" who="Jose Luis Domingo Lopez " />
<person posts="2" size="6" who="Matej Pfajfar " />
<person posts="2" size="6" who="&quot;Axel H. Siebenwirth&quot; " />
<person posts="2" size="5" who="Paul P Komkoff Jr " />
<person posts="2" size="5" who="Gunther Mayer " />
<person posts="2" size="5" who="Ricardo Galli " />
<person posts="2" size="5" who="Wartan Hachaturow " />
<person posts="2" size="5" who="Thomas Capricelli " />
<person posts="2" size="5" who="Davide Libenzi " />
<person posts="2" size="5" who="Chris Ricker " />
<person posts="2" size="5" who="Padraig Brady " />
<person posts="2" size="5" who="Gregory Maxwell " />
<person posts="2" size="5" who="Frank van Maarseveen " />
<person posts="2" size="5" who="Dylan Griffiths " />
<person posts="2" size="5" who="Mika Liljeberg " />
<person posts="2" size="5" who="Ben Clifford " />
<person posts="2" size="5" who="&quot;Sergey S. Kostyliov&quot; " />
<person posts="2" size="5" who="Sten " />
<person posts="2" size="5" who="&quot;Mendelson, Tsippy&quot; " />
<person posts="2" size="5" who="Greg Boyce " />
<person posts="2" size="5" who="Simon Richter " />
<person posts="2" size="5" who="Peter Samuelson " />
<person posts="2" size="5" who="Bernd Schmidt " />
<person posts="2" size="5" who="&quot;Maciej W. Rozycki&quot; " />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="Guillaume Chamberland-Larose" />
<person posts="2" size="5" who="Martin Josefsson " />
<person posts="2" size="4" who="Jochen Friedrich " />
<person posts="2" size="4" who="David Dyck " />
<person posts="2" size="4" who="=?big5?q?Ka=20Fai=20Lau?= " />
<person posts="2" size="4" who="Nickolaos Fotopoulos " />
<person posts="2" size="4" who="Marcus Grando " />
<person posts="2" size="4" who="Joe Wong " />
<person posts="1" size="54" who="Ken " />
<person posts="1" size="51" who="Matt Domsch " />
<person posts="1" size="50" who="Carlos E Gorges " />
<person posts="1" size="48" who=" (Christian Koenig)" />
<person posts="1" size="42" who="" />
<person posts="1" size="37" who="&quot;Mr. James W. Laferriere&quot; " />
<person posts="1" size="34" who="Jim Houston " />
<person posts="1" size="32" who="&quot;Susan G. Kleinmann&quot; " />
<person posts="1" size="30" who="Hubertus Franke " />
<person posts="1" size="25" who=" (Andrew Williams)" />
<person posts="1" size="25" who="Carlo Scarfoglio " />
<person posts="1" size="24" who="Tomasz Wegrzanowski " />
<person posts="1" size="23" who="Brett " />
<person posts="1" size="21" who=" (Johannes Ruscheinski)" />
<person posts="1" size="18" who="Robbert Kouprie " />
<person posts="1" size="18" who="Nathan Scott " />
<person posts="1" size="17" who="&quot;Stephen J. Gowdy&quot; " />
<person posts="1" size="16" who="&quot;Vincenzo Cuciti&quot; " />
<person posts="1" size="15" who="Stephen Degler " />
<person posts="1" size="14" who="Erik Mouw " />
<person posts="1" size="13" who="Philipp Benner " />
<person posts="1" size="12" who="&quot;Markus Jordan&quot; " />
<person posts="1" size="12" who=" (Craig DeForest)" />
<person posts="1" size="12" who="Philipp Matthias Hahn " />
<person posts="1" size="11" who="Kevin Corry " />
<person posts="1" size="10" who="&quot;John L. Males&quot; " />
<person posts="1" size="10" who="Paul Bristow " />
<person posts="1" size="10" who="" />
<person posts="1" size="10" who="Bjorn Helgaas " />
<person posts="1" size="9" who="Ralf Oehler " />
<person posts="1" size="9" who="Jordan Mendelson " />
<person posts="1" size="9" who="Morten Holm " />
<person posts="1" size="9" who="Kurt Garloff " />
<person posts="1" size="9" who="TDSCAF " />
<person posts="1" size="8" who="george anzinger " />
<person posts="1" size="8" who="Robert Stuart " />
<person posts="1" size="8" who="Anders Larsen " />
<person posts="1" size="8" who="Andres Salomon " />
<person posts="1" size="8" who="Paolo Mantegazza " />
<person posts="1" size="8" who="Fabian Svara " />
<person posts="1" size="8" who="&quot;jeev&quot; " />
<person posts="1" size="7" who="&quot;Moore, Robert&quot; " />
<person posts="1" size="6" who="Luca Montecchiani " />
<person posts="1" size="6" who="Clifford Kite " />
<person posts="1" size="6" who="Yusuf Goolamabbas " />
<person posts="1" size="6" who="tluxt " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="Its Squash " />
<person posts="1" size="6" who="Mike Paul " />
<person posts="1" size="6" who="" />
<person posts="1" size="6" who="Andrew Theurer " />
<person posts="1" size="6" who="&quot;Ulrich Windl&quot; " />
<person posts="1" size="6" who="=?ISO-8859-1?Q? &quot;Ren=E9?= Camu&quot; " />
<person posts="1" size="6" who="&quot;Therien, Guy&quot; " />
<person posts="1" size="5" who="" />
<person posts="1" size="5" who="vic " />
<person posts="1" size="5" who="Spider " />
<person posts="1" size="5" who="Vince Weaver " />
<person posts="1" size="5" who="Stefan Frank " />
<person posts="1" size="5" who="&quot;Marcel J.E. Mol&quot; " />
<person posts="1" size="5" who="&quot;Todd M. Roy&quot; " />
<person posts="1" size="5" who="&quot;Michael H. Warfield&quot; " />
<person posts="1" size="5" who="Andrey Nekrasov " />
<person posts="1" size="5" who="" />
<person posts="1" size="5" who="Paul Menage " />
<person posts="1" size="5" who="Meme Engineer " />
<person posts="1" size="5" who="Craig Schlenter " />
<person posts="1" size="5" who="&quot;Chris Funderburg&quot; " />
<person posts="1" size="5" who=" (Brugier Pascal)" />
<person posts="1" size="5" who="Hiroshi MIURA " />
<person posts="1" size="5" who="Damian Wrobel " />
<person posts="1" size="4" who="Marinho Paiva Duarte " />
<person posts="1" size="4" who="Martin Wirth " />
<person posts="1" size="4" who="tchiwam " />
<person posts="1" size="4" who="Tomasz Rola " />
<person posts="1" size="4" who="&quot;David Gordon (LMC)&quot; " />
<person posts="1" size="4" who="&quot;Stolle, Martin (KIV)&quot; " />
<person posts="1" size="4" who="Tommy Reynolds " />
<person posts="1" size="4" who="Daniel Bunzendahl " />
<person posts="1" size="4" who="&quot;Adam McKenna&quot; " />
<person posts="1" size="4" who="&quot;Little, John&quot; " />
<person posts="1" size="4" who="Andre Tomt " />
<person posts="1" size="4" who="Matthias Andree " />
<person posts="1" size="4" who="Serguei Miridonov " />
<person posts="1" size="4" who="&quot;Lakshmikantha  A.S&quot; " />
<person posts="1" size="4" who="Nilmoni Deb " />
<person posts="1" size="4" who="Eduardo Pereira Habkost " />
<person posts="1" size="4" who="Arnaud Launay " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Athanasius " />
<person posts="1" size="4" who="Kervin Pierre " />
<person posts="1" size="4" who="&quot;Chris Funderburg&quot; " />
<person posts="1" size="4" who="&quot;Steve Pratt&quot; " />
<person posts="1" size="4" who="Maneesh Soni " />
<person posts="1" size="4" who="Brak " />
<person posts="1" size="4" who="David Lang " />
<person posts="1" size="4" who="Matthew Dharm " />
<person posts="1" size="4" who="Jeff Meininger " />
<person posts="1" size="4" who="Rainer krienke " />
<person posts="1" size="4" who="&quot;Ed Sweetman&quot; " />
<person posts="1" size="4" who="Roger Larsson  (by way of Roger Larsson" />
<person posts="1" size="4" who="Erich Focht " />
<person posts="1" size="4" who="=?iso-8859-1?Q?Jakob_=D8stergaard?= " />
<person posts="1" size="4" who="'Brugier Pascal' " />
<person posts="1" size="4" who="&quot;Johan Ekenberg&quot; " />
<person posts="1" size="4" who="Bob Toxen " />
<person posts="1" size="4" who="&quot;Guo, Liang&quot; " />
<person posts="1" size="4" who="&quot;Lee Packham&quot; " />
<person posts="1" size="4" who="Felix Triebel " />
<person posts="1" size="4" who=" (Christoph Bartelmus)" />
<person posts="1" size="4" who="&quot;Torrey Hoffman&quot; " />
<person posts="1" size="4" who="&quot;Kirill Ratkin&quot; " />
<person posts="1" size="4" who="&quot;Daniela Engert&quot; " />
<person posts="1" size="4" who="&quot;Vlodavsky, Zvi&quot; " />
<person posts="1" size="4" who="Tony Lindgren " />
<person posts="1" size="4" who="Sean Hunter " />
<person posts="1" size="4" who="thunder7 " />
<person posts="1" size="4" who="&quot;Manuel McLure&quot; " />
<person posts="1" size="3" who="Mark McClelland " />
<person posts="1" size="3" who="GNUOrder " />
<person posts="1" size="3" who="Pavel Zaitsev " />
<person posts="1" size="3" who="Neil Brown " />
<person posts="1" size="3" who="Marinho Paiva Duarte " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="salvador " />
<person posts="1" size="3" who="James Cassidy " />
<person posts="1" size="3" who="&quot;Mark H. Wood&quot; " />
<person posts="1" size="3" who="Thomas Tonino " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Jeremy Jackson " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="=?iso-8859-2?Q?Martin_Ma=E8ok?= " />
<person posts="1" size="3" who="&quot;Rick A. Hohensee&quot; " />
<person posts="1" size="3" who="Stuffed Crust " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Matthew Sell " />
<person posts="1" size="3" who="&quot;Mario 'BitKoenig' Holbe&quot; " />
<person posts="1" size="3" who="Kenneth Johansson " />
<person posts="1" size="3" who="Luis Miguel Tavora " />
<person posts="1" size="3" who="Gianluca Anzolin " />
<person posts="1" size="3" who="Malcolm Mallardi " />
<person posts="1" size="3" who="John Alvord " />
<person posts="1" size="3" who="Tim Waugh " />
<person posts="1" size="3" who="David Mansfield " />
<person posts="1" size="3" who="&quot;Steve Best&quot; " />
<person posts="1" size="3" who="hugang " />
<person posts="1" size="3" who="Nico Schottelius " />
<person posts="1" size="3" who="&quot;Thomas Hood&quot; " />
<person posts="1" size="3" who="Studierende der Universitaet des Saarlandes" />
<person posts="1" size="3" who="&quot;Andrew Tipton&quot; " />
<person posts="1" size="3" who="Eduardo =?iso-8859-1?Q?Tr=E1pani?= " />
<person posts="1" size="3" who="&quot;Adam McKenna&quot; " />
<person posts="1" size="3" who="Martin Garton " />
<person posts="1" size="3" who="Vincent Bernat " />
<person posts="1" size="3" who="Fabrice Eudes " />
<person posts="1" size="3" who="Andreas Ferber " />
<person posts="1" size="3" who="Ragnar Hojland Espinosa " />
<person posts="1" size="3" who="Bernd Schubert " />
<person posts="1" size="3" who="Eric Weigle " />
<person posts="1" size="3" who="&quot;Randal, Phil&quot; " />
<person posts="1" size="3" who="ASA " />
<person posts="1" size="3" who="Ralf Baechle " />
<person posts="1" size="3" who=" (Jonathan Corbet)" />
<person posts="1" size="3" who="Alex Riesen " />
<person posts="1" size="3" who="Brandon Low " />
<person posts="1" size="3" who="john slee " />
<person posts="1" size="3" who="Kim Oldfield " />
<person posts="1" size="3" who="Craig Christophel " />
<person posts="1" size="3" who="&quot;Georg Nikodym&quot; " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Gabriel Rosa " />
<person posts="1" size="3" who="Chris Dellicker " />
<person posts="1" size="3" who=" (Matthew Sackman)" />
<person posts="1" size="3" who="Ulrich Weigand " />
<person posts="1" size="3" who="Christian =?iso-8859-1?q?Borntr=E4ger?= " />
<person posts="1" size="3" who="Alexei Podtelezhnikov " />
<person posts="1" size="3" who="Nicolas Aspert " />
<person posts="1" size="3" who="Garrett Marone " />
<person posts="1" size="3" who="=?ISO-8859-2?Q?Tomasz_K=B3oczko?= " />
<person posts="1" size="3" who="Jurriaan on Alpha " />
<person posts="1" size="3" who="&quot;Joseph L. Hill&quot; " />
<person posts="1" size="3" who="Adrian Partenie " />
<person posts="1" size="3" who="Jarno Paananen " />
<person posts="1" size="3" who="Joel Jaeggli " />
<person posts="1" size="3" who="Roland Arendes " />
<person posts="1" size="3" who="Erich Focht " />
<person posts="1" size="3" who="=?iso-8859-1?q?szonyi=20calin?= " />
<person posts="1" size="3" who="=?iso-8859-2?B?R+Fib3IgTOlu4XJ0?= " />
<person posts="1" size="3" who="Allan Sandfeld " />
<person posts="1" size="3" who="Masoud Sharbiani " />
<person posts="1" size="3" who="Wayne Scott " />
<person posts="1" size="3" who="Jim " />
<person posts="1" size="3" who="Dan Kegel " />
<person posts="1" size="3" who="SI Reasoning " />
<person posts="1" size="3" who="Rolf Eike Beer " />
<person posts="1" size="3" who="Olivier Galibert " />
<person posts="1" size="3" who="Chris " />
<person posts="1" size="3" who="Sander van Malssen " />
<person posts="1" size="3" who="Philippe Troin " />
<person posts="1" size="3" who="Jan Kasprzak " />
<person posts="1" size="3" who="Tom Sightler " />
<person posts="1" size="3" who="CaT " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="c o r e " />
<person posts="1" size="3" who="Ben Bridgwater " />
<person posts="1" size="3" who="&quot;Burjan Gabor&quot; " />
<person posts="1" size="3" who="Karl &amp; Betty Schendel " />
<person posts="1" size="3" who="&quot;David C. Hansen&quot; " />
<person posts="1" size="3" who="Marek Zawadzki " />
<person posts="1" size="3" who="&quot;Alex Scheele&quot; " />
<person posts="1" size="3" who="Anton Altaparmakov " />
<person posts="1" size="3" who="Richard Guenther " />
<person posts="1" size="3" who="Brinkley Sprunt " />
<person posts="1" size="3" who="Eyal Lebedinsky " />
<person posts="1" size="3" who="Christoph Rohland " />
<person posts="1" size="3" who="Francesco Munda " />
<person posts="1" size="3" who="Jan Hudec " />
<person posts="1" size="3" who="Dragan Stancevic " />
<person posts="1" size="3" who="root " />
<person posts="1" size="3" who="Ingo Oeser " />
<person posts="1" size="3" who="mukesh agrawal " />
<person posts="1" size="3" who="Pawel Worach " />
<person posts="1" size="3" who="Jari Ruusu " />
<person posts="1" size="3" who="Guennadi Liakhovetski " />
<person posts="1" size="3" who="Joerg Mayer " />
<person posts="1" size="3" who="David Garfield " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Kenneth MacDonald " />
<person posts="1" size="3" who="&quot;Buddy Lumpkin&quot; " />
<person posts="1" size="3" who="Marcin Prejsnar " />
<person posts="1" size="3" who="IPmonger " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Mike Phillips " />
<person posts="1" size="3" who="Adam Keys " />
<person posts="1" size="3" who="&quot;Neulinger, Nathan&quot; " />
<person posts="1" size="3" who="Manfred Spraul " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Israel Alvarez " />
<person posts="1" size="3" who="DevilKin " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Ben Collins " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Alastair Stevens " />
<person posts="1" size="2" who="Ian Molton " />
<person posts="1" size="2" who="&quot;A. Castro&quot; " />
<person posts="1" size="2" who="bert hubert " />
<person posts="1" size="2" who="Pete Wyckoff " />
<person posts="1" size="2" who="&quot;Chris Mason&quot; " />
<person posts="1" size="2" who="Roland Dreier " />
<person posts="1" size="2" who="Oleg Drokin " />
<person posts="1" size="2" who="rudmer " />
<person posts="1" size="2" who="Panagiotis Moustafellos " />
<person posts="1" size="2" who="&quot;Mark Peloquin&quot; " />
<person posts="1" size="2" who="Pavel Machek " />
<person posts="1" size="2" who="&quot;Pedro M. Rodrigues&quot; " />
<person posts="1" size="2" who="Patrick Scharrenberg " />
<person posts="1" size="2" who="Marco Colombo " />
<person posts="1" size="2" who=" (Frank Heldt)" />
<person posts="1" size="2" who="Carl " />
<person posts="1" size="2" who="Bryce Nesbitt " />
<person posts="1" size="2" who="Martin Loschwitz " />
<person posts="1" size="2" who="&quot;Paul G. Allen&quot; " />
<person posts="1" size="2" who="&quot;Carl Bowden&quot; " />
<person posts="1" size="2" who="&quot;Daniel A. Newby&quot; " />
<person posts="1" size="2" who="&quot;Graeme Read&quot; " />
<person posts="1" size="2" who="&quot;Andrew Hatfield&quot; " />
<person posts="1" size="2" who="Konstantin Boldyshev " />
<person posts="1" size="2" who="&quot;John Hawkes&quot; " />
<person posts="1" size="2" who="Simon Richter " />
<person posts="1" size="2" who="&quot;Yven J. Leist&quot; " />
<person posts="1" size="2" who="&quot;Thomas Widmann&quot; " />
<person posts="1" size="2" who="Florian Schmitt " />
<person posts="1" size="2" who="Chris Meadors " />
<person posts="1" size="2" who="Steven Walter " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Craig Knox " />
<person posts="1" size="2" who=" (Kees Bakker)" />
<person posts="1" size="2" who="Benjamin LaHaise " />
<person posts="1" size="2" who="=?iso-8859-1?q?Kurt=20Johnson?= " />
<person posts="1" size="2" who="Ben Ryan " />
<person posts="1" size="2" who="Keith Owens " />
<person posts="1" size="2" who="Ian Soboroff " />
<person posts="1" size="2" who="&quot;Kobus Jooste&quot; " />
<person posts="1" size="2" who="Andreas Jaeger " />
<person posts="1" size="2" who="Arjan van de Ven " />
<person posts="1" size="2" who="Gianni Tedesco " />
<person posts="1" size="2" who="&quot;Jim Lu&quot; " />
<person posts="1" size="2" who="=?iso-8859-1?Q?Andr=E9?= Dahlqvist " />
<person posts="1" size="2" who="paule " />
<person posts="1" size="2" who="&quot;chus Medina&quot; " />
<person posts="1" size="2" who="Davidovac Zoran " />
<person posts="1" size="2" who="Chris Chabot " />
<person posts="1" size="2" who="Santiago Garcia Mantinan " />
<person posts="1" size="2" who="Harald Dunkel " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Olaf Titz " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="The Candyman " />
<person posts="1" size="2" who="&quot; Don  Dupuis&quot; " />
<person posts="1" size="2" who="&quot;Randy.Dunlap&quot; " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Kurt Roeckx " />
<person posts="1" size="2" who="Juri Haberland " />
<person posts="1" size="2" who="lord latex " />
<person posts="1" size="2" who="&quot;Dave Francheski&quot; " />
<person posts="1" size="2" who="Martin Wirth " />
<person posts="1" size="2" who="andrew may " />
<person posts="1" size="2" who="&quot;Anish Srivastava&quot; " />
<person posts="1" size="2" who="Kai Germaschewski " />
<person posts="1" size="2" who="Florian Weimer " />
<person posts="1" size="2" who="Marcelo Roberto Jimenez " />
<person posts="1" size="2" who="Ryan Mack " />
<person posts="1" size="2" who="Anton Blanchard " />
<person posts="1" size="2" who="Ingo Molnar " />
<person posts="1" size="2" who="&quot;David Christensen&quot; " />
<person posts="1" size="2" who="ertzog " />
<person posts="1" size="2" who="Charles Cazabon " />
<person posts="1" size="2" who="David Mosberger-Tang " />
<person posts="1" size="2" who="Xavier Bestel " />
<person posts="1" size="2" who="Tommy Johansson " />
<person posts="1" size="2" who="&quot;Brenneke, Matthew Jeffrey (UMR-Student)&quot; " />
<person posts="1" size="2" who="Thomas Hood " />
<person posts="1" size="2" who="The Doctor What " />
<person posts="1" size="2" who="Daniel Egger " />
<person posts="1" size="2" who="Bugtraq Mailing Lists " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Brad Chapman " />
<person posts="1" size="2" who="Jan Ciger " />
<person posts="1" size="2" who="&quot;Ron Pagani / San Francisco / San Jose, CA&quot; " />
<person posts="1" size="2" who="Jacob Luna Lundberg " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Marek Kassur " />
<person posts="1" size="2" who="Jussi Laako " />
<person posts="1" size="2" who="&quot;Adam J. Richter&quot; " />
<person posts="1" size="2" who="Michael Schmitz " />
<person posts="1" size="2" who="Emmanuel Fuste " />
<person posts="1" size="2" who="&quot;M. Edward Borasky&quot; " />
<person posts="1" size="2" who="Blomberg David " />
<person posts="1" size="2" who="&quot;Vladimir Trebicky&quot; " />
<person posts="1" size="2" who="Tobias Ringstrom " />
<person posts="1" size="2" who="=?iso-8859-1?q?willy=20tarreau?= " />
<person posts="1" size="2" who="Johannes Erdfelt " />
<person posts="1" size="2" who="&quot;Per Jessen&quot; " />
<person posts="1" size="2" who="sathish jayapalan " />
<person posts="1" size="2" who="Marian Jancar " />
<person posts="1" size="2" who="System Attendant " />
<person posts="1" size="2" who="Kirk Reiser " />
<person posts="1" size="2" who="&quot;Girish  Pujar&quot; " />
<person posts="1" size="2" who="Tim Sullivan " />
<person posts="1" size="2" who="&quot;Peter C. Norton&quot; " />
<person posts="1" size="2" who="Dimitrie Paun " />
<person posts="1" size="2" who="&quot;Kristberg Karlsson&quot; " />
<person posts="1" size="2" who="ANTIGEN_S99MAIL02 " />
<person posts="1" size="2" who="ANTIGEN_PLUTO " />
<person posts="1" size="2" who="Ramya Ravichandran " />
<person posts="1" size="2" who="Willy Tarreau " />
<person posts="1" size="2" who="&quot;=?iso-8859-1?Q?Anjaneya_Pal?=&quot; " />
<person posts="1" size="2" who=" (H. Peter Anvin)" />
<person posts="1" size="2" who="&quot;Shiva Raman Pandey&quot; " />
<person posts="1" size="2" who="Jeff Dike " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="&quot;Michael Sterrett -Mr. Bones.-&quot; " />
<person posts="1" size="2" who="Joel Hollingsworth " />
<person posts="1" size="2" who="Veselin Mijuskovic " />
<person posts="1" size="2" who="Denis Zaitsev " />
<person posts="1" size="2" who="&quot;T. A.&quot; " />
<person posts="1" size="2" who="Raul Sanchez Sanchez " />
<person posts="1" size="2" who="migrate linux " />
<person posts="1" size="2" who="David Beckett " />
<person posts="1" size="2" who="Richard Russon " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="&quot;Astinus&quot; " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="j y " />
<person posts="1" size="2" who="&quot;Rick A. Hohensee&quot; " />
<person posts="1" size="1" who="Todd Underwood " />
<person posts="1" size="1" who="&quot;H. Peter Anvin&quot; " />

</stats>

<section
  title="Maximum Number Of Anonymous Filesystem Mounts In 2.4"
  subject="2.4.17:Increase number of anonymous filesystems beyond 256?"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.2/0403.html"
  posts="27"
  startdate="17 Jan 2002 05:51:39 -0800"
  enddate="25 Jan 2002 10:42:48 -0800"
>
<topic>FS: NFS</topic>
<topic>FS: autofs</topic>

<p>Rainer Krienke needed to increase the maximum number of
anonymous filesystems in 2.4.17, so he changed the default value of
the unnamed_dev_in_use array from 256 to 1024; however, he still hit a
ceiling of 800, after which he got errors when trying to mount more NFS
filesystems. Andi Kleen felt this was an NFS problem, saying, <quote who="Andi
Kleen">Some NFS servers only accept connections from 'secure ports' &lt; 1024.
You need one local port per connections. Some Ports &lt;1024 are already
used by other services. This a natural limit with secure ports.  If you can
configure your NFS server to not insist on secure ports (it's usually an
export option, unfortunately defaulting to on with many OS) you can just use
any ports.</quote> He posted a patch to accomplish this, and added, <quote
who="Andi Kleen">Another way if you wanted to avoid source patching would be
to make sure that different connections go via different source IP addresses;
e.g. by defining multiple IP aliases on the server and the client and defining
different routes for the server aliases with different local ip addresses as
prefered from address (=from option in iproute2).  This way the ports would be
unique again because they're for multiple local IP addresses; you would have
800 ports per local IP. Using the patch is probably cleaner though.</quote></p>

<p>Pete Zaitcev also replied to Rainer's initial post with a patch, saying
that he'd also changed unnamed_dev_in_use, but that he'd also had to modify
the 'mount' command to accept a "-o nores" argument. He explained, <quote
who="Pete Zaitcev">Initially I did a sysctl, but Trond M. asked for a mount
argument, in case you have to mount from several servers, some of which
require reserved ports, some do not.</quote> He also remarked that anyone
needing so many mounted filesystems would probably be better off redesigning
their setup. Rainer defended his setup, saying:</p>

<quote who="Rainer Krienke">

<p>At our site we store all user (~4000 users) data centrally on several NFS
servers (running solaris up to now). In order to ease administration we chose
the approach to mount each user directory direcly (via automount configured
by NIS) on a NFS client where the user wants to access his data. The most
important effect of this is, that each users directory is always reachable
under the path /home/&lt;user&gt;. This proofed to be very useful (from the
administrators point of view) when moving users from one server to another,
installing additionl NFS servers etc, because the only path the user knows
about and sees when e.g. issuing pwd is /home/&lt;user&gt;. The second
advantage is, that there is no need to touch the client system: No need for
NFS mounts in /etc/fstab to mount the servers export directory and so there
are no unneeded dependencies frpm any client to the NFS servers.</p>

<p>Now think of a setup where no user directory mounts are configured but
the whole directory of a NFS server with many users is exported. Of course
this makes things easyer for the NFS-system since only one mount is needed
but on the client you need to create link trees or something similar so the
user still can access his home under /home/&lt;user&gt; and not something
like /home/server1/&lt;user&gt;. Moreover even if you create link trees when
you issue commands like pwd you see the real path (eg /server1/&lt;user&gt;)
instead of the logical (/home/&lt;user&gt;). Such paths are soon written
into scripts etc, so that if the user is moved sometime later  things will
be broken.  You simply loose a layer of abstraction if you do not mount
the users dir directly. The only other solution I know of would be amd. Amd
automatically places a link. But since we come from the sun world, we simply
uses suns automounter and there were no problems up to now.</p>

<p>As another not umcommon setup you might think of  NAS storage in a larger
company. Again you have  the choice to mount on a per user basis or you
mount the parent directory containing many users. In  the latter case again
you loose the /home abstraction to some degree.</p>

<p>So I think it would be really good to have at least the option to have more
than 256 NFS mounts even if one has to use unsecure ports for this purpose.</p>

</quote>

<p>H. Peter Anvin replied, <quote who="H. Peter Anvin">can easily be resolved
with vfsbinds.  Even Sun has a specific syntax in their automounter to deal
with this (server:common_root:tail).  If I ever do another autofs v3 release
I will probably try to incorporate that via vfsbinds.</quote></p>

</section>

<section
  title="Latest O(1) Scheduler Patch For 2.5"
  subject="[patch] O(1) scheduler, -J4"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.2/1267.html"
  posts="8"
  startdate="21 Jan 2002 07:05:41 -0800"
  enddate="26 Jan 2002 09:19:20 -0800"
>
<topic>Big Memory Support</topic>
<topic>Big O Notation</topic>
<topic>Real-Time</topic>
<topic>SMP</topic>
<topic>Scheduler</topic>

<mention>Robert Love</mention>
<mention>Erich Focht</mention>

<p>Ingo Molnar announced:</p>

<quote who="Ingo Molnar">

<p>the -J4 scheduler patch is available:</p>

<p>    <a href="http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.5.3-pre2-J4.patch">http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.5.3-pre2-J4.patch</a><br />
    <a href="http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.4.17-J4.patch">http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.4.17-J4.patch</a></p>

<p>there are no open/reported bugs, and no bugs were found since -J2. The
scheduler appears to be stabilizing steadily.</p>

<p>-J4 includes two changes to further improve interactiveness:</p>

<p>

<ol>

<li>

<p>the introduction of 'super-long' timeslices, max timeslice is 500
    msecs - it was 180 msecs before. The new default timeslice is 250
    msecs, it was 90 msecs before.</p>

<p>the reason for super-long timeslices is that IMO we now can afford them.
The scheduler is pretty good at identifying true interactive tasks these
days. So we can increase timeslice length without risking the loss of good
interacte latencies. Long timeslices have a number of advantages:</p>

<p>

<ul>

<li>nice +19 CPU hogs take up less CPU time than they used to.</li>

<li>interactive tasks can gather a bigger 'reserve' timeslice they can use
   up to do bursts of processing.</li>

<li>CPU hogs will get better cache affinity, due to longer timeslices
   and less context-switching.</li>

</ul>

</p>

<p>Long timeslices also have a disadvantage:</p>

<p>

<ul>

<li>under high load, if an interactive task manages to fall into the
   CPU-bound hell then it will take longer for it to get the next slice of
   processing.</li>

</ul>

</p>

<p>i have measured the pros to beat the cons under the workloads i tried, but
YMMV - more testing by more people is needed, comparing -J4's interactive
feel (and nice behavior, and kernel compilation performance) against -J2's
interactive feel/performance.</p>

</li>

<li>

<p>slight shrinking of the bonus/penalty range a task can get.</p>

<p>i've shrunk the bonus/penalty range from +-19 priority levels to +-14
priority levels. (from 90% of the full range to 70% of the full range.)
The reason why this can be done without hurting interactiveness is that
it's no longer a necessity to use the maximum range of priorities - the
interactiviness information is stored in p->sleep_avg, which is not
sensitive to the range of priority levels.</p>

<p>The shrinking has two benefits:</p>

<p>

<ul>

<li>slightly denser priority arrays, slightly better cache utilization.</li>

<li> more isolation of nice levels from each other. Eg. nice -20 tasks now
   have a 6 priority levels 'buffer zone' which cannot be reached by
   normal interactive tasks. nice -20 audio daemons should benefit from
   this. Also, normal CPU hogs are better isolated from nice +19 CPU hogs,
   with the same 6 priority levels 'buffer zone'.</li>

</ul>

</p>

<p>(by shrinking the bonus/penalty range, the -3 rule in the TASK_INTERACTIVE
definition was shrunk as well, to -2.)</p>

</li>

</ol>

</p>

<p>Changelog:</p>

<p>

<ul>

<li>Erich Focht: optimize max_load, remove prev_max_load.</li>

<li>Robert Love: simplify unlock_task_rq().</li>

<li>Robert Love: fix the -&gt;cpu offset value in x86's entry.S, used by the
                preemption patch.</li>

<li>me: interactiveness updates.</li>

<li>me: sched_rr_get_interval() should return the timeslice value based on
       -&gt;__nice, not based on -&gt;prio.</li>

</ul>

</p>

</quote>

<p>Martin J. Bligh reported that a fix he'd submitted to Ingo, and that had been
accepted, was now partially missing from Ingo's current patch. Without it, his
8-way NUMA box wouldn't boot. They went back-and-forth on it a bit, and
evidently resolved the discrepency, because Martin later reported:</p>

<quote who="Martin J. Bligh">

<p>Measuring the performace of a parallelized kernel compile with warm caches
on a 8 way NUMA-Q box. Highmem support is turned OFF so I'm only using the
first 1Gb or so of RAM (it's much faster without HIGHMEM).</p>

<p>prepare:<br />
make -j16 dep; make -j16 bzImage; make mrproper; make -j16 dep;</p>

<p>measured:<br />
time make -j16 bzImage</p>

<p>2.4.18-pre7</p>

<p>330.06user 99.92system 1:00.35elapsed 712%CPU (0avgtext+0avgdata 0maxresident)k<br />
0inputs+0outputs (411135major+486026minor)pagefaults 0swaps</p>

<p>2.4.18-pre7 with J6 scheduler</p>

<p>307.19user 88.54system 0:57.63elapsed 686%CPU (0avgtext+0avgdata 0maxresident)k<br />
0inputs+0outputs (399255major+484472minor)pagefaults 0swaps</p>

<p>Seems to give a significant improvement, not only giving a shorter elapsed
time, but also lower CPU load.</p>

</quote>

</section>

<section
  title="VM Update And Benchmarks"
  subject="2.4.18pre4aa1"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.2/1470.html"
  posts="28"
  startdate="21 Jan 2002 22:48:06 -0800"
  enddate="29 Jan 2002 05:05:51 -0800"
>
<topic>Big Memory Support</topic>
<topic>Raw IO</topic>
<topic>Virtual Memory</topic>

<p>Andrea Arcangeli announced:</p>

<quote who="Andrea Arcangeli">

<p>This is the first release moving the pagetables in highmem. It only
compiles on x86 and it is still a bit experimental. I couldn't reproduce
problems yet though. the new pte-highmem patch can be downloaded from here:</p>

<p><a
href="ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1/20_pte-highmem-6">ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1/20_pte-highmem-6</a></p>

<p>Next relevant things to do are the non-x86 archs compilation, and I'd like
to sort out the vary-IO for rawio and the hardblocksize-O_DIRECT patch.</p>

<p><a href="ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1.bz2">ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1.bz2</a><br />
<a href="ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1/">ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.18pre4aa1/</a></p>

</quote>

<p>Randy Hron posted a <a
href="http://home.earthlink.net/~rwhron/kernel/2.4.18pre4aa1.html">Changelog</a>
for these patches, as well as some <a
href="http://home.earthlink.net/~rwhron/kernel/k6-2-475.html">benchmarks</a>
comparing many kernels, including these. Andrea thanked him kindly for putting
up those pages. Daniel Phillips took exception to Randy's use of dbench in
the benchmarks, saying that it produced "flakey" results. But Andrea said,
<quote who="Andrea Arcangeli">dbench has a value. the only problem with
dbench is that you can trivially cheat and change the kernel in a broken way,
but optimal _only_ for dbench, just to get stellar dbench numbers, but this
is definitely not the case with the -aa tree, -aa tree is definitely not
optimized for dbench.</quote> Daniel insisted that dbench results could vary
wildly between identical tests, and were useful for benchmarks. But Andrea
replied, <quote who="Andrea Arcangeli">Anyways dbench tells you mostly about
elevator etc... it's a good test to check the elevator is working properly,
the ++ must be mixed with the dots etc... if the elevator is aggressive
enough. Of course that means the elevator is not perfectly fair but that's
the whole point about having an elevator. It is also an interesting test for
page replacement, but with page replacement it would be possible to write
a broken algorithm that produces good numbers, that's the thing I believe
to be bad about dbench (oh, like tiotest fake numbers too of course). Other
than this it just shows rmap12a has an elevator not aggressive enough which
is probably true, I doubt it has anything to do with the VM changes in rmap
(of course rmap design significant overhead is helping to slow it down
too though), more likely the bomb_segments logic from Andrew that Rik has
included, infact the broken page replacement that lefts old stuff in cache
if something might generate more unfairness that should generate faster
dbench numbers for rmap, but on this last bit I'm not 100% sure (AFIK to
get a fast dbench by cheating with the vm you need to make sure to cache
lots of the readahead as well (also the one not used yet), but I'm not 100%
sure on the effect of lefting old pollution in cache rather than recycling
it, I never attempted it).</quote> Daniel was impressed with this analysis,
and added, <quote who="Daniel Phillips">It's a hint at how hard the elevator
problem really is.</quote> But he was still suspicious of dbench results.</p>

<p>Elsewhere, even Randy agreed that <quote who="Randy Hron">dbench results
are not perfectly repeatable.  I agree that dbench results that vary by 20%
or so may not be meaningful.  I think dbench is of some value though. In some
cases the difference between kernels is 200% or more.</quote> He posted some
numbers, showing the discrepencies between identical runs, and also showing
that the fundamental conclusions were unchanged in spite of that.</p>

</section>

<section
  title="VM Subsystem Documentation"
  subject="White Paper on the Linux kernel VM?"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/0012.html"
  posts="12"
  startdate="23 Jan 2002 19:36:18 -0800"
  enddate="25 Jan 2002 08:51:49 -0800"
>
<topic>Virtual Memory</topic>

<mention>Andrea Arcangeli</mention>
<mention>Rik van Riel</mention>
<mention>Derek Glidden</mention>

<p>D. L. Beaman asked where to find docs on Andrea Arcangeli's new VM code.
David Beckett gave a link to <a href="http://www.nks.net/linux-vm.html">a
doc by Derek Glidden</a>. Rik van Riel gave a link to a
<a href="http://surriel.com/lectures/">lecture on the old 2.4
VM</a>. Dave Jones remarked, <quote who="Dave Jones">probably the closest
thing to documentation for the newer 2.4 VM is in some slides from Andrea..  <a
href="ftp://ftp.suse.com/pub/people/andrea/talks/2001/pluto-dec-pub-0.tar.gz">ftp://ftp.suse.com/pub/people/andrea/talks/2001/pluto-dec-pub-0.tar.gz</a>.
Some bits may have changed a little since those slides were done, (especially
in -aa VM) but for the most part they make interesting reading.</quote></p>

<p>Elsewhere, Denis Vlasenko said that the source code was all the
documentation anyone should need. He added, <quote who="Denis Vlasenko">Writing
docs wastes developer's time: they will write how they want VM to operate
or how they think it operates (while some bug can make actual VM operate
differently) instead of improving/debugging current VM code.</quote> Daniel
Phillips replied:</p>

<quote who="Daniel Phillips">

<p>No you're wrong.  Not writing docs wastes the time of other developers.
It sends the message 'my time is more important than yours'.  In the case
of Linus, that may be true, but it's very definitely not true for any other
core developer.</p>

<p>It is the responsibility of each developer to prepare at least minimal -
but sufficient - documentation for the work they do.  Others who specialize
in preparing documentation can then use that material as a starting point
for preparing clearer, more extensive documentation.  But if core developers
shirk their responsibility in this area, we will continue to suffer from a
chronic shortage of good, current kernel documentation.</p>

</quote>

<p>Olaf Dietsche added, <quote who="Olaf Dietsche">I don't want to judge,
wether writing docs wastes developer's time. But, when I first tried
understanding file systems, it was of tremendous help having docs like
Documentation/filesystems/vfs.txt and the like. I couldn't have done it
without.</quote></p>

</section>

<section
  title="New Features On kernel.org"
  subject="If you haven't seen it yet..."
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/0231.html"
  posts="7"
  startdate="24 Jan 2002 14:47:41 -0800"
  enddate="25 Jan 2002 12:56:09 -0800"
>

<p>H. Peter Anvin announced, <quote who="H. Peter Anvin">If you haven't noticed
yet, there are two new links on the <a href="http://kernel.org">kernel.org</a>
front page: V and VI (View and View Incremental.)  Both take you to a diff
viewer application and display the full diff and incremental diff (when
available), respectively.</quote> Erik Andersen replied, <quote who="Erik
Andersen">Wonderful, thanks!  Adding diffstat output would also be very nice so
I can easily see if the stuff I'm messing with is or isn't changed.</quote></p>

</section>

<section
  title="Catching Boot Messages"
  subject="Linux console at boot"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/0304.html"
  posts="11"
  startdate="24 Jan 2002 21:05:45 -0800"
  enddate="26 Jan 2002 14:04:54 -0800"
>

<mention>George Bonser</mention>
<mention>Keith Owens</mention>

<p>George Bonser wanted to pause the console during boot, so he could take
note of error messages before they scrolled by. He couldn't wait until after
boot, because his box was crashing during startup. Folks suggested holding
down ctrl-pgup to keep the earliest text visible; using ctrl-s and ctrl-q
to pause and unpause the display; changing the source to add a delay between
each console message; and taking photographs of the screen.</p>

<p>Keith Owens and others said that using a serial console was really the
best bet.</p>

</section>

<section
  title="Tuning Scheduler Parameters At Run-Time"
  subject="[PATCH]: O(1) 2.4.17-J6 tuneable parameters"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/0305.html"
  posts="4"
  startdate="24 Jan 2002 21:18:52 -0800"
  enddate="25 Jan 2002 09:55:49 -0800"
>
<topic>Big O Notation</topic>
<topic>FS: sysfs</topic>
<topic>Scheduler</topic>

<p>Jack F. Vogel posted a patch, and said to Ingo Molnar (author of the
new O(1) scheduler), <quote who="Jack F. Vogel">Our group has a customer
request for a scheduler that will give them some tuneable parameters, and
your changes have actually had some parameters change thru the deltas you've
made. It seemed like it might be useful to take them and make them tweakable
on a running system. I am not 100% convinced of the goodness of this, but I
wanted to submit it for your consideration. The current code performs great
btw, thanks for all your hard work.</quote> Ingo replied that it would slow
the code down too much to include run-time tuneable parameters, but that as
a development tool that patch could be useful. He said:</p>

<quote who="Ingo Molnar">

<p>i'd suggest to name the /proc/sys/sched/ values the same way the constants
are called. Eg. /proc/sys/sched/CHILD_FORK_PENALTY. This makes it easier
to communicate suggested parameter changes.</p>

<p>i have a script that dumps the current sched-parameters state:</p>

<p> [root@mars root]# ./getsched<br />
 echo 95 &gt; /proc/sys/kernel/CHILD_FORK_PENALTY<br />
 echo 3 &gt; /proc/sys/kernel/EXIT_WEIGHT<br />
 echo 3 &gt; /proc/sys/kernel/INTERACTIVE_DELTA<br />
 echo 200 &gt; /proc/sys/kernel/MAX_SLEEP_AVG<br />
 echo 30 &gt; /proc/sys/kernel/MAX_TIMESLICE<br />
 echo 100 &gt; /proc/sys/kernel/PARENT_FORK_PENALTY<br />
 echo 70 &gt; /proc/sys/kernel/PRIO_BONUS_RATIO<br />
 echo 60 &gt; /proc/sys/kernel/PRIO_CPU_HOG_RATIO<br />
 echo 20 &gt; /proc/sys/kernel/PRIO_INTERACTIVE_RATIO<br />
 echo 200 &gt; /proc/sys/kernel/STARVATION_LIMIT</p>

<p>the script is very simple:</p>

<p> cd /proc/sys/kernel</p>

<p> for N in *[A-Z]*; do echo "echo "`cat $N`" &gt; /proc/sys/kernel/$N";
done</p>

<p>otherwise our approach is identical. This patch would always stay
separate, but could be readily applied by people who want more control
over the scheduler for development or whatever other reasons.</p>

</quote>

<p>Jack liked this, and they took the discussion off-line.</p>

</section>

<section
  title="Doing 64-Bit Arithmetic In Kernel Modules"
  subject="unresolved symbols __udivdi3 and __umoddi3"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/0421.html"
  posts="12"
  startdate="24 Jan 2002 22:31:10 -0800"
  enddate="30 Jan 2002 00:43:02 -0800"
>
<topic>Assembly</topic>

<mention>Andreas Dilger</mention>
<mention>Jeff Garzik</mention>
<mention>Richard B. Johnson</mention>
<mention>Horst von Brand</mention>

<p>Simon Haynes needed to do 64-bit arithmetic in a module he was working on,
but the code to allow this was in libc, which can't be linked from the kernel.
Andreas Dilger and Richard B. Johnson suggested just doing left and right
bit-shifts to accomplish multiplication and division, and Tim Schmielau
added, <quote who="Tim Schmielau">If 64-bit arithmetics cannot be avoided,
the do_div64() macro defined in include/asm/div64.h comes in handy.</quote>
Simon replied that bit-shifting wouldn't work for him, because he was dealing
with numbers that were not restricted to powers of 2. The div64 solution
seemed to work well, but he added:</p>

<quote who="Simon Haynes">

<p>I have looked at this header file and I do not understand the asm
syntax.</p>

<p>In particular the only x86 div instruction I know only returns a 32 bit
div result. Because I don't understand the div64 header I cannot see how a
64 bit result is calculated.</p>

</quote>

<p>Tim and Daniel Phillips replied that this actually couldn't be done with
that macro, because of platform-dependent restrictions. Tim said, <quote
who="Tim Schmielau">I think do_div(x,y) should work for all platforms if
y&#160;&lt;&#160;2^16 and x/y&#160;&lt;&#160;2^32, but I may stand corrected.
Actually, Momchil Velikov just pointed out that some archs only do 32 bit
divs in do_div64, where at least the C code from asm-parisc/div64.h should be
used.</quote> And Daniel added, <quote who="Daniel Phillips">64bits/32bits
= 64bits is easily calculated with two 64/32 hardware divides, in
assembly.</quote></p>

<p>Simon had also, in the same post, asked if there were any
documentation available on that code, and Daniel said, <quote who="Daniel
Phillips">It's painful, isn't it?  And no, I don't know where it's
documented.</quote> But Mark Zealey dredged from the misty past, and found <a
href="http://pkl.net/~mark/GCC_INLINE_ASM_HOWTO">GCC_INLINE_ASM_HOWTO</a>
and <a
href="http://pkl.net/~mark/rmiyagi-inline-asm.txt">rmiyagi-inline-asm.txt</a>.
Momchil Velikov also gave a link to to spot in <a
href="http://gcc.gnu.org/onlinedocs/gcc-3.0.3/gcc_5.html#SEC103">Using and
Porting GNU Compiler Collection</a> that covered it as well, although Daniel
wondered if there were any supplemental docs covering the assembly-language
instructions themselves. Momchil and Horst von Brand pointed him to Intel's
reference manuals, but Daniel replied:</p>

<quote who="Daniel Phillips">

<p>I was afraid somebody would say that.</p>

<p>I need look no further than the shelf at my right hand for a full set of
Pentium documentation.  I do not consider that an adequate substitute for a
document expressing the syntax of all machine instructions of a particular
architecture in the GNU syntax.</p>

<p>The only excuse I can think of for not having such a document is "we're
all so busy we couldn't write it, please use the Intel documentation".
Please don't suggest that we have no need for our own documentmentation,
written in a form familiar to us.</p>

</quote>

<p>Jeff Garzik suggested writing a script to extract the needed information
from the data provided in binutils, and dump that into a document of some
kind, but there was no reply.</p>

</section>

<section
  title="Linus Gives BitKeeper A Test Run"
  subject="A modest proposal -- We need a patch penguin"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/1000.html"
  posts="397"
  startdate="28 Jan 2002 06:10:56 -0800"
  enddate="06 Feb 2002 02:52:37 -0800"
>
<topic>Compression</topic>
<topic>FS: ext3</topic>
<topic>Forward Port</topic>
<topic>Hot-Plugging</topic>
<topic>Networking</topic>
<topic>PCI</topic>
<topic>USB</topic>
<topic>Version Control</topic>

<mention>Tom Rini</mention>
<mention>Dave Jones</mention>
<mention>Jeff Garzik</mention>
<mention>Kai Germaschewski</mention>
<mention>Alexey Kuznetsov</mention>
<mention>Andrew Morton</mention>
<mention>Ben Collins</mention>

<p>Rob Landley proposed the creation of a new office in kernel development:
the "patch penguin", who's duties would be to <quote who="Rob Landley">make
Linus's life easier by doing what Alan Cox used to do, and what Dave Jones is
unofficially doing right now. (In fact, I'd like to nominate Dave Jones for
the office, although it's Linus's decision and it would be nice if Dave got
Alan Cox's blessing as well.)</quote> He added that this was needed because
<quote who="Rob Landley">Linus doesn't scale, and his current way of coping
is to silently drop the vast majority of patches submitted to him onto the
floor. Most of the time there is no judgement involved when this code gets
dropped.</quote> A number of people agreed with this assessment and the
proposal, and there was some discussion about it. But Linus Torvalds said:</p>

<quote who="Linus Torvalds">

<p>One "patch penguin" scales no better than I do. In fact, I will claim
that most of them scale a whole lot worse.</p>

<p>The fact is, we've had "patch penguins" pretty much forever, and they are
called subsystem maintainers.  They maintain their own subsystem, ie people
like David Miller (networking), Kai Germaschewski (ISDN), Greg KH (USB),
Ben Collins (firewire), Al Viro (VFS), Andrew Morton (ext3), Ingo Molnar
(scheduler), Jeff Garzik (network drivers) etc etc.</p>

<p>If there are problems with certain patches, it tends to be due to one or
more of:</p>

<p>

<ul>

<li>the subsystem is badly modularized (quite common, originally. I don't
   think many people realize how _far_ Linux has come in the last five
   years wrt issues like architectures, driver independence, filesystem
   infrastructure etc). And it still happens.</li>

<li>

<p>lack of maintainer interest. Many "maintainers" are less interested
   in true merging than in trying to just push whatever code they have,
   and only ever grow their patches instead of keeping them in pieces.</p>

<p>   This is usually a matter of getting used to it, and the best people
   get used to it really quickly (Andrea, for example, used to not do this
   well at all, but look at how he does it now! From a merge standpoint,
   his patches have gone from "horrible" to "very good")</p>

</li>

<li>

<p>personality/communication issues. Yes, they happen. I've tried to
   have other people be "filters" for the people I cannot work with, but
   I have to say that most of the time when I can't work with somebody,
   others have real problems with those people too.</p>

<p>   (An example of a very successful situation: David Miller and Alexey
   Kuznetsov: Alexey used to have these rather uncontrolled patches that I
   couldn't judge or work with but that obviously had a lot of potential,
   and David acting as a filter made them a very successful team.)</p>

</li>

</ul>

</p>

<p>In short, if you have areas or patches that you feel have had problems,
ask yourself _why_ those areas have problems.</p>

<p>A word of warning: good maintainers are hard to find.  Getting more
of them helps, but at some point it can actually be more useful to help
the _existing_ ones.  I've got about ten-twenty people I really trust, and
quite frankly, the way people work is hardcoded in our DNA.  Nobody "really
trusts" hundreds of people.  The way to make these things scale out more
is to increase the network of trust not by trying to push it on me, but by
making it more of a _network_, not a star-topology around me.</p>

<p>In short: don't try to come up with a "patch penguin".  Instead try to
help existing maintainers, or maybe help grow new ones. THAT is the way
to scalability.</p>

</quote>

<p>There was a ton of discussion on this, but the
main highlight of the thread was the attention given to <a
href="http://www.bitkeeper.com/">BitKeeper</a>. At one point, Rik van Riel
remarked in a different context, <quote who="Rik van Riel">bitkeeper is a
really nice tool to help me carry the patch from version to version.</quote>
Elsewhere but shortly thereafter, Linus said in a completely different
subthread:</p>

<quote who="Linus Torvalds">

<p>One thing intrigued me in this thread - which was not the discussion
itself, but the fact that Rik is using bitkeeper.</p>

<p>How many other people are actually using bitkeeper already for the kernel?
I know the ppc guys have, for a long time, but who else is? bk, unlike CVS,
should at least be _able_ to handle a "network of people" kind of approach.</p>

</quote>

<p>Greg KH replied:</p>

<quote who="Greg KH">

<p>I am, for the USB and PCI hotplug stuff:</p>

<p><a href="http://linuxusb.bkbits.net/">http://linuxusb.bkbits.net/</a></p>

<p>It makes tracking what patches got applied, and which didn't, and forward
porting those that didn't to the next release, a breeze.</p>

<p>My trees are world readable, and people are welcome to send me patches
against it, or even bitkeeper changesets, but I have yet to receive one of
those yet :)</p>

</quote>

<p>Alan Cox asked, <quote who="Alan Cox">can bitkeeper easily be persuaded
to take "messages" back all the way to the true originator of a change. Ie
if a diff gets to Linus he can reject a given piece of change and without
passing messages back down the chain ensure they get the reply as to why it
was rejected, and even if nobody filled anything in that it was looked at
and rejected by xyz at time/date ?</quote> Larry McVoy (BitKeeper creator)
replied:</p>

<quote who="Larry McVoy">

<p>It's certainly possible and there are changes we could make to make it
more useful.  Right now, there is no record of a change if it goes and then
gets rejected right back out; it's as if you patched and then you did a
reverse patch.</p>

<p>The good news is that each change (patch) has an identifier, they look
like</p>

<p>    awc@bitmover.bitmover.com|ChangeSet|20011230212716|39200</p>

<p>and if we kept a record of those that were rejected, it would be trivial
for a developer to track whether his change was in/not seen/rejected.</p>

</quote>

<p>Slightly elsewhere and down the road, but ultimately also in Linus' same
subthread, Rik put in:</p>

<quote who="Rik van Riel">

<p>Bitkeeper also seems to have some problems applying out-of-order
changesets or applying them partially.</p>

<p>Changesets sent by 'bk send' are also much harder to read than
unidiffs ;)</p>

<p>I think for bitkeeper to be useful for the kernel we really need:</p>

<p>

<ol>

<li>'bk send' format Linus can read easily</li>

<li>the ability to send individual changes (for example, the foo_net.c fixes
from 1.324 and 1.350) in one nice unidiff</li>

<li>the ability for Linus to apply patches that are slightly "out of order"
- a direct consequence of (2)</li>

</ol>

</p>

</quote>

<p>Larry said that item 1 was already done, though it wasn't the default. He
felt that item 3 was really the main problem, and he wanted to discuss
it. He said:</p>

<quote who="Larry McVoy">

<p>There are two issues, one is out of order and the other is what we call
"false dependencies".  I think it is the latter that bites you most of the
time.  The reason you want out of order is because of the false dependencies,
at least that is my belief, let me tell you what they are and you tell me.</p>

<p>Suppose that you make 3 changes, a driver change, a vm change, and a
networking change.  Suppose that you want to send the networking change
to Linus.  With patch, you just diff 'em and send and hope that patch can
put it together on the other end.  With BK as it stands today, there is
a linear dependency between all three changes and if you want to send the
networking change, you also have to send the other 2.</p>

<p>How much of the out order stuff goes away if you could send changes out
of order as long as they did not overlap (touch the same files)?</p>

</quote>

<p>Tom Rini thought this would help in a lot of cases, and Larry explained his
corporate requirements:</p>

<quote who="Larry McVoy">

<p>here's the deal on this topic.  The out of order thing is a much bigger
deal for a large open source project than it is for our commercial customers.
It's also hard to do correctly, it would take at least a month.  Linus has
flirted with using BitKeeper multiple times and then gotten distracted.  If we
had dropped everything and fixed the issues he needs fixed rather than the
issues our commercial customers need fixed, we'd be out of business and you'd
have the lovely task of trying to make this work in the BitKeeper source.
You can believe me or not, but you'd have very little chance of getting
it to work, the BK source base is a lot larger and more complex than the
generic part of the Linux kernel.</p>

<p>If enough of the kernel people start using BitKeeper and demanding the out
of order stuff, we'll do it.  The lead time is about a month, so you have to
deal with that.  On the other hand, if this turns into yet another kernel
"she loves, she loves me not, she loves me, she loves me not" about BK,
we're not going to fix the out of order stuff until it is the most important
issue for our commercial customers.</p>

<p>Hopefully, you'll take this in the spirit in which it is intended.  We want
to help out the kernel team, that was the reason for writing BitKeeper.
We have to survive, however, and that means paying attention to the commercial
needs as well.  If/when it looks like Linus &amp; Co are serious about using BK,
I'll staff a couple of people to address the out of order stuff and commit
to a delivery date.  It's clear that it is the biggest "gotcha" about BK &amp;
the kernel work flow.</p>

</quote>

<p>Ingo Molnar also replied to Larry's question, asking in turn, <quote
who="Ingo Molnar">could this be made: 'as long as they do not touch the
same lines of code, taking 3 lines of context into account'? (ie. unified
diff definition of 'collisions' context.)</quote> Rik thought this would be
excellent, and would actually fix a problem he experienced with BitKeeper. But
Larry said to Ingo, <quote who="Larry McVoy">What you described is diff/patch.
We have that already and if it really worked in all the cases there would
be no need for BitKeeper to exist.  I'll be the first to admit that BK is
too pedantic about change ordering and atomicity, but you need to see that
there is a spectrum and if we slid BK over to what you described it would be a
meaningless tool, it would basically be a lot of code implementing what people
already do with diff/patch.</quote> Ingo replied with a concrete example:</p>

<quote who="Ingo Molnar">

<p>i sent 8 different scheduler update patches 5 days ago:</p>

<p> [patch] [sched] fork-fix 2.5.3-pre5<br />
 [patch] [sched] yield-fixes 2.5.3-pre5<br />
 [patch] [sched] SCHED_RR fix, 2.5.3-pre5<br />
 [patch] [sched] set_cpus_allowed() fix, 2.5.3-pre5<br />
 [patch] [sched] entry.S offset fix, 2.5.3-pre5.<br />
 [patch] [sched] cpu_logical_map fixes, balancing, 2.5.3-pre5<br />
 [patch] [sched] compiler warning fix, 2.5.3-pre3<br />
 [patch] [sched] unlock_task_rq() cleanup, 2.5.3-pre3</p>

<p>these patches, while many of them are touching the same file (sched.c)
are functionally orthogonal, and can be applied in any order. Linus has
applied all of them, but he might have omitted any questionable one and
still apply the rest.</p>

<p>how would such changes be expressed via BK, and would it be possible for
Linus to reject/accept an arbitrary set of these patches?</p>

</quote>

<p>Larry replied:</p>

<quote who="Larry McVoy">

<p>There is a way to do this in BK that would work just fine.  It pushes
some work back onto the developer, but if you are willing to do it, we have
no problem doing what you want with BK in its current form and I suspect
that the work is very similar to what you are already doing.</p>

<p>In your list above, all of the patches are against 2.5.3-pre5.  If you
did the work for each patch against the 2.5.3-pre5 baseline, checking it in,
saving the BK patch, removing that changeset from the tree, and then going
onto the next change, what you'd have is exactly the same set of patches as
you have no.  Literally.  You could type the appropriate command to BK and
you should be able to generate a bit for bit identical patch.</p>

<p>In BK's mind, what you have done is to make a very "bushy" set of
changes, they are all "side by side".  If you think of a graph of changes,
you started with</p>

<p align="center">
                        [older changes]<br />
                              v<br />
                          [2.5.3-pre4]<br />
                              v<br />
                          [2.5.3-pre5]
</p>

<p>and then you added one change below that, multiple times.  If you were
to combine all of those changes in a BK tree, it would look like</p>

<p align="center">
                        [older changes]<br />
                              v<br />
                          [2.5.3-pre4]<br />
                              v<br />
                          [2.5.3-pre5]<br />
  [sched1] [sched2] [sched3] [sched4] [sched5] [sched6] [sched7]
</p>

<p>and BK would be happy to allow you to send any subset of the sched changes
to Linus and it would work *exactly* how you want it to work.  If we could
get people to work like this, there are no problems.  Just to make it really
clear you would do this</p>

<p>
        for p in patch_list<br />
        do      bk vi sched.c   # that will lock it if isn't
<blockquote>
                hack, debug, test<br />
                bk citool       # check it in and make a changeset<br />
                bk makepatch -r+ &gt; ~/bk-patches/patch.$p<br />
                bk undo -fr+    # get back to the same baseline
</blockquote>
        done
</p>

<p>Here's what people actually do.  They make the first change, then make the
second change in the same tree that already has the first change, and so on.
BitKeeper faithfully records the linear sequence of changes and enforces
that the changes propogate as that linear sequence.  You can skip some at
the end but you can't skip any in the middle.</p>

<p>In your particular case, we really need out of order changesets to
allow the second type of work flow and cherry picking.  However, a fairly
common case is that the changes are all in unrelated files and *even then*
BitKeeper enforces the linearity.  That's the problem I think we need to
fix first, it's not a complete solution, but it is the 80-90% solution.
Until we give you a 100% solution, you have to realize that you are making
side by side changes and actually do it that way.</p>

<p>If any of this is not clear to anyone, please speak up and I'll try and
draw some pictures and add some explanation.</p>

</quote>

<p>However, Linus had some criticisms, but proposed a case where he would test
out BitKeeper in preparation to adopting it for the long term. He said:</p>

<quote who="Linus Torvalds">

<p>The thing is, bk should be able to do this on its own.</p>

<p>The rule on check-in should be: if the resultant changeset can be
automatically merged with an earlier changeset, it should be _parallel_ to
that changeset, not linear.</p>

<p>And note the "automatically merged" part. That still guarantees your
database consistency at all levels.</p>

<p>Let us assume that you have a tree that looks like</p>

<pre>        a -&gt; b -&gt; c</pre>

<p>together with modifications "d". Now, "bk ci" (or, because this is more
expensive than a plain "ci", you can call it "bk backmerge" or something,
and all sane people will just stop using "ci") should instead of doing a
plain</p>

<pre>        a -&gt; b -&gt; c -&gt; d</pre>

<p>it would see how far back it can go with an automatic merge and add "d" at
the _furthest_ point possible. So let's assume that "d" really cannot be
merged with "b" but doesn't clash with "c", so what you'd create with "bk 
backmerge" is the "maximally parallel version:   </p>

<pre>        a -&gt; b -&gt; c
                \
                 &gt; d</pre>

<p>Now, you'll say that this is exponentially expensive to do, and I agree.
But CPU-time is cheap, and notice that this "backmerge" would be done not
in one centralized location, but in parallel at different developers.</p>

<p>(Yeah, my example may look "cheap", but if you do exclusively backmerging,
then after a while your trees will have lots of very wide development,
and the m,ore interesting backmerge is when you already have</p>

<pre>        a -&gt; b -&gt; c -&gt; f

                -&gt; d

                -&gt; e</pre>

<p>and you're adding "g", and it doesn't merge with "c" but not with "d"
and "e", so you have to test every path backwards to see where you can push
it. In this case you'd end up with</p>

<pre>        a -&gt; b  -&gt; c -&gt; f

                     -&gt; g

                -&gt; d

                -&gt; e</pre>

<p>kind of tree.)</p>

<p>Just how expensive would that be? I'd be willing to make my machine sweat
a bit, if it would just automatically generate the most parallel changesets
possible.. And I bet you could do _this_ fairly easily if you didn't care
too much about trying to be too efficient.</p>

<p>You're saying your merges are perfect. USE that knowledge, and make it do
"bk backmerge".</p>

<p>(Once you do backmerge, the false dependencies no longer exist, AND suddenly
"bk" actually gives people information that they didn't have before: the
revision history actually tells you the _true_ dependencies in the tree,
not some stupid "this is the order in which things were checked in" stuff
that doesn't add any value that can't be seen from the changeset directly)</p>

<p>Larry, give me that, and I'll promise to use bk exclusively for two months
to shake it out..</p>

</quote>

<p>Georg Nikodym was impressed with Linus' analysis, but pointed out that
'g' in BitKeeper's world was not just a change, but was:</p>

<quote who="Georg Nikodym">

<p>actually a label that implies a point in time as well as all the
change that came before it.  Stated differently, it is a set.</p>

<p>Using your graph:</p>

<pre>        a -&gt; b -&gt; c -&gt; f

                -&gt; d

                -&gt; e</pre>

<p>and the way that people currently think (and thus speak) of these things,
saying that you're using a version 'e' kernel is ambiguous because it may
or may not have 'c' or 'd'.  This ambiguity also complicates the task of
reproducing a tree at some known state later.  </p>

<p>You, as the center of the known universe may not need to concern yourself
with such trifles, but speaking as one of those fabled commercial customers,
the ability to say unambiguously say what's been changed (read: fixed)
is really important.</p>

<p>All that said, I like your idea about revision graph compression.
My concerns might simply be mitigated by being able to insert "release"
points (simply a tag that implies/includes all the preceding changesets).</p>

</quote>

<p>Linus replied:</p>

<quote who="Linus Torvalds">

<p>I disagree.</p>

<p>"g" is really just one thing: it is "the changes".</p>

<p>However, you are obviously correct that any changes are inherently dependent
on the context those changes are in. And there are multiple contexts.</p>

<p>One context is simply the "when in time" context, which is interesting,
as when you serialize all changesets you see the time-wise development. And
this is really the _only_ context that BK (and most other source control
tools) really think about.</p>

<p>However, in another sense, the "when in time" context is completely
meaningless. Should you care what the _temporal_ relationship between two
independent patches is? I say "Absolutely not!". The temporal relationship
only hides the _real_ revision information, which is what the patch actually
depends on.</p>

<p>And note that my suggestion to have a "bk backmerge" does not remove
the temporal relationships. All changesets already have a timestamp (they
clearly have to have it, just so that you can see when they happened and
say "what did this tree look like one month ago?"). So we already _have_
the temporal information, and encoding that temporal information into the
"relationship" information actually ends up costing you quite dearly.   </p>

<p>I'd say that most (maybe all) of the complaints about not being able
to apply changesets in any random order comes exactly from the fact that
developers _know_ that temporal relationships are often not relevant. From
a development standpoint, temporal relationships are only relevant if they
match the _causal_ relationships, and even then you can often find patches
that are _caused_ by previous patches, but that are valid on their own (and
can indeed be more important, or even completely obviate the need for the
original patch).</p>

<p>So what I'm saying is that from a patch revision standpoint, temporal
information is useless. You still have enough information to recreate the tree
"at time 'g'" by just doing the equivalent of "bk get -c&lt;date-of-g&gt;".</p>

</quote>

<p>Regarding the need to know exactly what's been changed, Linus added:</p>

<quote who="Linus Torvalds">

<p>you don't lose that ability. You still have all the information you used
to have, you just have even _more_ information. You have the information on
not just when the change was checked in (temporal), you have the information
on what files/changes it really _depended_ on.</p>

<p>Now, after those arguments, I'll just finish off with saying that I actually
agree with you to some degree - as I already said in private email to Larry,
I would definitely also want to have a way of stopping back-merging at some
point. In particular, when I'd tag a relase (ie something like Linux-2.5.3,
I would potentially also want to set a "backmerge marker tag" which basically
tells the backmerge logic that it's not worth it to try to backmerge past
that version tag.</p>

<p>That would decrease the chance of confusion considerably, and it would
also avoid the exponential complexity problem. Let's face it, exponential
algorithms can be really useful, but you do want to have some way of making
sure that the bad behaviour never happens in practice. A way of limiting
the set of changelogs to be considered for backmerging not only means that
humans don't get as confused, the computer also won't have to work insanely
to try to go back to Linux version 0.01 if a small patch happened to apply
all the way back.</p>

</quote>

<p>Eli Carter gave a hypothetical situation, in which a <quote who="Eli
Carter">Changeset adds driver for device Q.  Now, let's further suppose
that in 2.5.x we have perfect modularity for drivers and at that time Q is
added... we just add a directory, linux/drivers/Qdrv.  It won't conflict
with 2.5, 2.4.x, 2.2.x, etc..  However, because 2.2.x does not have the hooks
necesary to see it, Q won't work on those kernels.  There is a design-level
dependency in changeset q.</quote> Linus replied:</p>

<quote who="Linus Torvalds">

<p>Not so hypothetical, and entirely true. Which is, why I suggest that such
"deep merging" wouldn't actually go past tags.</p>

<p>Let's face it, the source control tool cannot know what works and what
doesn't. The only thing it can ever know about is "what applies". It can
take the approach that everything only applies to the last branch - which
is the traditional approach, but which introduces dependencies that simply
aren't there, and that _cannot_ be cut. This is what bk does now.</p>

<p>But the other approach is to say "whatever applies, applies, and as
long as I don't lose revision information I'll move it backwards". That has
other problems (as you point out), but now those problems are manageable,
and have solutions.</p>

<p>I'd rather take the problem that can be solved over the problem that
cannot.</p>

<p>The fact is, development _often_ is in the situation where somebody does
a quick-and-dirty fix, and then only later goes in and digs deeper and does
the right fix that makes the original fix completely unnecessary.</p>

<p>The way BK works now, if we call the quick-and-dirty fix "A", and the real
fix "B", the developer has a really hard time just sending "B" to me. He'd
have to re-clone an earlier BK tree, re-do B in that tree, and then send me
the second version.</p>

<p>I'm suggesting that he just send me B, and get rid of his tree. There
are no dependencies on A, and I do not want _crap_ in my tree just because
A was a temporary state for him.</p>

</quote>

<p>Larry replied that this would lose useful information, but Linus said,
<quote who="Linus Torvalds">No. If the useless crap ends up hiding the real
points in the revision history, getting rid of crud is _good_.  Remember how
I asked for a way to "batch up" revision history? Same issue.  Crap is
crap, and it more often hides the real issues than enlightens anything at
all.</quote></p>

<p>The discussion skewed of toward flames at this point, but a little ways
further down the subthread, Alexander Viro said:</p>

<quote who="Alexander Viro">

<p>I can't speak for Linus, but my main problem with BK is similar to what
you'd described.  Here's what I'm usually doing and what I'd like to
be able to do with BK:</p>

<p>Suppose I have 5 deltas - A, B, C, D, E.  I want to kill A.</p>

<p>I add a branch that consists of B' (B backported to original) and
ABB'^{-1}.  It joins the original at AB.</p>

<p>I backport C to B'.  Now I've got B', C', ABC(B'C')^{-1}.  Again, it
joins the original branch.</p>

<p>Repeat for D and E.  Now I've got the following picture (apologies for
BUAG):</p>

<pre>* -B'-&gt; * -C'-&gt; * -D'-&gt; * -E'-&gt; *
|                              /
A                            crap
V                            V
* -B-&gt; * -C-&gt; * -D-&gt; * -E-&gt; *</pre>

<p>_Now_ I change the direction of last arrow.  Yes, it's more or less
reverted A.  And now I want to consider the top branch as the main history.</p>

<p>IOW, what I want is ability to play revisionist.  And it's not limited to
removing patches - if I've found a bug in A,  I want to be able to add A-fix
and move it all way back to right after A.  And merge them.  B, C, D and
E might have changed from that, but that's what I want.  Moreover, I might
have some junk left in the end (i.e. ABCDEA-fix == (AA-fix)B'C'D'E'noise)
and I'd really like to be able to say that (AA-fix)B'C'D'E' is the main
history now and other path (ABCDE A-fix noise^{-1}) is buried.</p>

<p>If you can give a way to do that - I'm happy.</p>

</quote>

<p>Larry didn't quite get what Alexander was saying, and Alexander tried again:</p>

<quote who="Alexander Viro">

<p>I don't want A (or entire old path) to disappear.  What I want is ability
to have two paths leading to the same point + ability to mark one of them as
"more interesting".</p>

<p>I.e. the result I want is _two_ sets of changesets with the same
compositions.</p>

<p>And _that_ is compatible with replication - I simply want the new path
in revision graph to be propagated.  Along with the "this path is more
interesting" being written on the new one.</p>

<p>Can that be done?  I want a way to re-split the set of deltas.  I'm
perfectly happy with old one staying around, as long as we remember that
results of old and new are the same object and that new is a prefered way
to look at the damn thing.</p>

<p>I suspect that it could be doable with with something as simple as "if you
ask to merge two identical nodes, I'll just mark them as such and ask which
is more interesting".  IIRC, BK doesn't require tree topology on the graph -
it can have converging branches.</p>

<p>_If_ that is feasible - the rest can be scripted around it.</p>

</quote>

<p>Larry replied:</p>

<quote who="Larry McVoy">

<p>Ahh, you want LODs.  And they neatly solve the problem you described.
And a bunch of others.  Think of a LOD as a revision history graph.  Imagine
being able to create a new, empty (or partially populated) "container".
That container is a LOD.  You can do set operations from one LOD to the other.
They are a lot like branches except that they themselves can branch &amp;
merge.</p>

<p>The way that we'd do what you wanted is you'd create a new LOD, stick B,
C, D, E into it, and make it the default LOD in your repository.</p>

<p>LODs have some very nice attributes - each change is a set element,
the LOD is nothing more than a recorded history of what set elements are in
this LOD, and you can cherry pick from one LOD to the other.  Out of order,
sparsely, whatever.</p>

<p>The only restriction is that you have to have all the changes in your graph.
There is no concept of a sparse graph.  You can trim off stuff that happens
after some point but you can't remove points in the middle, even if they
are in the other LOD.  Is that OK?</p>

<p>Linus first sounded like he'd accept this as an answer and then later it
fell out of favor because even though he could hide a bad changeset in another
LOD, he didn't want it in the graph at all.  I don't know how to do that.</p>

<p>The other gotcha is that LODs are only partially implemented and are going
to stay that way until we achieve concensus on how BK should work for you.</p>

</quote>

<p>Elsewhere, in a "Linus should use BitKeeper" subthread, Linus said, <quote
who="Linus Torvalds">The thing is, I actually _want_ to use BK (as opposed
to CVS, which I really don't think cuts it).</quote> And again elsewhere,
he remarked:</p>

<quote who="Linus Torvalds">

<p>right now I'm trying to see if it makes any difference if I try to use
BK for a month or two. I seriously doubt it will really "fix" everything,
but neither do I think big re-organizations and patch-lists will. But I'd
be stupid if I wasn't willing to try something.</p>

<p>(So far, trying out BK has only meant that I have spent _none_ of my
time merging patches and reading email, and most of my time writing helper
scripts and emails to Larry to make it possible to use BK in sane ways that
suit me. And I'll doubt you'll see any real productivity increase from me
for a while ;)</p>

</quote>

<p>Larry replied, <quote who="Larry McVoy">Hey, we're hacking away as well,
we'll have some fixes for you ASAP.  I'm just adding a few touches to Wayne's
diff change you wanted.</quote></p>

</section>

<section
  title="Booting Multiple OSes From Linux"
  subject="[RFC] x86 ELF bootable kernels/Linux booting Linux/LinuxBIOS"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/1800.html"
  posts="52"
  startdate="30 Jan 2002 11:54:46 -0800"
  enddate="04 Feb 2002 23:45:33 -0800"
>
<topic>Executable File Format</topic>
<topic>Kexec</topic>
<topic>Networking</topic>
<topic>SMP</topic>

<p>Eric W. Biederman announced:</p>

<quote who="Eric W. Biederman">

<p>I have been working on this quietly and now my pieces generally work, and
I am down to dotting the i's, and crossing the t's.  As my start of pushing
for inclusion I want to get some feedback (in case I have missed something),
and to give some feedback so people understand what I am doing.</p>

<p>First the connections.</p>

<p>

<ul>

<li>I have a patch I am maintaining (kexec) for booting linux and other
  OS's from linux.  This patch is not x86 specific (it does take architecture
  specific code). It takes as input an ELF file.</li>

<li>I am working on a native LinuxBIOS port of Linux, and LinuxBIOS
  takes as an input a ELF formated kernel.</li>

<li>I need regularly network boot with etherboot, and an ELF formated
  kernel can be used natively.  bzImage needs help.</li>

<li>It is a pain not when switching platforms alpha/ia32/xxx to have to
  completely change your toolchain for booting the linux kernel.</li>

<li>I have a patch that makes the x86 linux kernel natively ELF
  bootable.</li>

</ul>

</p>

<p>What a bootable ELF formatted kernel is.</p>

<p>

<ul>

<li>A list of segments that say load this chunk of file at this physical
  address.</li>

<li>An 32bit entry point. (64bit on 64bit platforms).</li>

<li>Code at that entry point to query from the firmware/BIOS the
  information the kernel needs.</li>

</ul>

</p>

<p>My next step is to integrate all of my pieces and do some cleanup but
I have functioning code for everything.</p>

<p>An x86 ELF bootable kernel: <a
href="ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.elf_bootable.diff">ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.elf_bootable.diff</a></p>

<p>A patch to boot an arbitrary static ELF executeable.  <a
href="ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.eb-kexec-apic-lb-mtd2.diff">ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.eb-kexec-apic-lb-mtd2.diff</a></p>

<p>A kernel fix to do proper SMP shutdown
so that you can kexec on a SMP kernel <a
href="ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.eb-apic-lb-mtd2.diff">ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.17.eb-apic-lb-mtd2.diff</a></p>

<p>A kernel patch that implements minimal some LinuxBIOS support.  <a
href="ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.18-pre7.linuxbios.diff">ftp://download.lnxi.com/pub/src/linux-kernel-patches/linux-2.4.18-pre7.linuxbios.diff</a></p>

<p>A standalone executable to adapt an existing
x86 bzImage to be an ELF bootable kernel.  <a
href="ftp://download.lnxi.com/pub/src/mkelfImage/mkelfImage-1.12.tar.gz">ftp://download.lnxi.com/pub/src/mkelfImage/mkelfImage-1.12.tar.gz</a></p>

<p>A first draft of a specification that goes into detail about how an ELF
image is interpreted, and extensions that can be added so the bootloader name,
the bootloader version, and similar interesting but functionally unnecessary
information can be passed to the loaded image, and so the bootloader can find
out similar kinds of information about the ELF executable it is loading.  <a
href="ftp://download.lnxi.com/pub/src/linuxbios/specifications/draft1_elf_boot_proposal.txt">ftp://download.lnxi.com/pub/src/linuxbios/specifications/draft1_elf_boot_proposal.txt</a></p>

<p>For what it is worth I have gotten fairly positive feedback from both
the Etherboot and the LinuxBIOS communities so far.   And etherboot and
memtest86 have both been modified already to be ELF bootable.  And there is
current work that gets a long ways with Plan9.</p>

<p>My kexec work is direct competition to two kernel monte, bootimage, lobos.
I have been using it in production for about a year, and I haven't encountered
real problems.  The biggest issue I have had is with the kernel not properly
shutting down devices.</p>

<p>In the short term shutting down devices is trivially handled by umounting
filesystems, downing ethernet devices, and calling the reboot notifier chain.
Long term I need to call the module_exit routines but they need a little
sorting out before I can use them during reboot.  In particular calling any
module_exit routing that clears pm_power_off is a no-no.</p>

<p>Also while it should work in most cases any loaded ELF image that
starts using BIOS/firmware services to drive the hardware is on it's own.
Putting all devices back in a state that they match the firmwares cached
state is a poorly defined problem.  However normal firmware calls that ask
if for the memory size or IRQ routing information should work correctly.</p>

<p>More on etherboot can be found at: <a
href="http://www.etherboot.org">http://www.etherboot.org</a></p>

<p>More on LinuxBIOS can be found at: <a
href="http://www.linuxbios.org">http://www.linuxbios.org</a></p>

</quote>

<p>Andrew Morton threw his hat up in the air and did a little jig, saying,
<quote who="Andrew Morton">Great work, and thanks!  I look forward to
2-second SMP reboots.</quote> A bunch of folks followed up with some technical
suggestions and discussion. There was some idea that the design was flawed,
and folks discussed alternatives.</p>

</section>

<section
  title="LVM Rewrite"
  subject="[ANNOUNCE] LVM reimplementation ready for beta testing"
  archive="http://www.uwsg.indiana.edu/hypermail/linux/kernel/0201.3/1808.html"
  posts="11"
  startdate="30 Jan 2002 12:22:54 -0800"
  enddate="05 Feb 2002 02:18:37 -0800"
>
<topic>Disk Arrays: EVMS</topic>
<topic>Disk Arrays: LVM</topic>

<mention>Andreas Dilger</mention>
<mention>Daniel Phillips</mention>
<mention>Patrick Caulfield</mention>

<p>Joe Thornber announced that he, Patrick Caulfield, Alasdair Kergon,
and Heinz Mauelshagen, of Sistina, had rewritten LVM. He said:</p>

<quote who="Joe Thornber">

<p>the LVM2 software is ready for beta testing.</p>

<p>This is a complete reimplementation of the existing LVM system, both
driver and userland tools.</p>

<p>We encourage you to give it a try and feed back your test results,
bug-fixes, enhancement requests etc. through the normal lists
linux-lvm@sistina.com and lvm-devel@sistina.com.</p>

<p>The new kernel driver (known as "device-mapper") supports volume management
in general and is no longer Linux LVM specific.  As such it is a separate
package from LVM2 which you will need to download and install before building
LVM2.</p>

<p><a
href="ftp://ftp.sistina.com/pub/LVM2/device-mapper/device-mapper-beta1.tgz">ftp://ftp.sistina.com/pub/LVM2/device-mapper/device-mapper-beta1.tgz</a></p>

<p>The userland tools are available from here:</p>

<p><a
href="ftp://ftp.sistina.com/pub/LVM2/tools/LVM2.0-beta1.tgz">ftp://ftp.sistina.com/pub/LVM2/tools/LVM2.0-beta1.tgz</a></p>

<p>This release does not support snapshots or pvmove.  These features will
go into a subsequent beta release, hopefully within the next fortnight.</p>

<p>This is Beta software which is *not* meant to be running on your
production systems.  If necessary, keep backups of your data and LVM metadata
(/etc/lvmconf/*).</p>

</quote>

<p>Daniel Phillips was very happy about the new code, but Andreas Dilger
wanted to know what the license of the new code would be. Joe replied,
<quote who="Joe Thornber">LVM2 is GPL/LGPL-licensed - just like the original
version of LVM.  This means the whole Linux community benefits from this
aspect of Sistina's work.  The device-mapper and LVM2 packages will *always*
be GPL/LGPL.</quote> He encouraged anyone who wanted to, to submit patches
and other contributions.</p>

<p>Close by, however, Heinz added, <quote who="Heinz Mauelshagen">OTOH we need
to survive as a company and therefore will implement comercial enhancements
which will BTW enable us to do support and further development of the
above free software.</quote> Jeff Garzik also asked for a clarification of
"GPL/LGPL". He asked, <quote who="Jeff Garzik">Are certain parts GPL and
other parts LGPL?  If so, which parts?</quote> Heinz replied:</p>

<quote who="Heinz Mauelshagen">

<p>The LVM2 sofware no longer uses a particular driver which is just usable for
its own purpose.  It rather accesses a different, so-called 'device-mapper'
driver, which implements a generic volume management service for the Linux
kernel by supporting arbitray mappings of address ranges to underlying
block devices.  Because this is a generic service rather than an application
within the kernel, it is open to be used by multiple LVM implementations
(for eg. EVMS could be ported to use it :-)</p>

<p>The device-mapper driver is under the GPL and our Beta1 release dated
Wednesday, which included the LVM2 tools as well, supports 2.4 kernels. We are
aiming to get it integrated into the stock kernel and are implementing the
necessary changes (bio interface) for 2.5 now.  We released a device-mapper
library (implements a generic API for the device-mapper) which is under the
LGPL with it.</p>

<p>The LVM2 tools have a library with routines to for eg. access the
device-mapper library, deal with LVM metadata (VGDA), support different
metadata formats and offer configuration file support which is under the LGPL
as well.  The tools themselves (vgcreate, lvcreate, ...) are under the GPL.</p>

</quote>

<p>To sum up, he said, the LVM2 tools and device-mapper driver were GPL,
while the LVM2 library and device-mapper library were LGPL.</p>

</section>

</kc>

