<?xml version="1.0" ?>

<kc>

<title>Kernel Traffic</title>

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

<issue num="64" date="24 Apr 2000 00:00:00 -0800" />

<stats posts="1435" size="6025" contrib="415" multiples="188" lastweek="153">

<person posts="62" size="177" who="Alan Cox " />
<person posts="60" size="218" who="Richard Gooch " />
<person posts="46" size="155" who="Ed Carp " />
<person posts="35" size="123" who="Alexander Viro " />
<person posts="33" size="122" who="H. Peter Anvin " />
<person posts="23" size="239" who="Jeff V. Merkey " />
<person posts="22" size="81" who="Andrea Arcangeli " />
<person posts="21" size="94" who="Johannes Erdfelt " />
<person posts="21" size="69" who="George Bonser " />
<person posts="21" size="65" who="Stephen C. Tweedie " />
<person posts="20" size="203" who="Jens Axboe " />
<person posts="20" size="67" who="Jeff Garzik " />
<person posts="20" size="66" who="bert hubert " />
<person posts="20" size="64" who="Jamie Lokier " />
<person posts="18" size="95" who="Jeremy Fitzhardinge " />
<person posts="18" size="59" who="Andre Hedrick " />
<person posts="17" size="80" who="Linus Torvalds " />
<person posts="16" size="66" who="Andrew Morton " />
<person posts="15" size="49" who="Ulrich Drepper " />
<person posts="14" size="49" who="David S. Miller " />
<person posts="13" size="58" who="David Ford " />
<person posts="13" size="48" who="Manfred Spraul " />
<person posts="12" size="45" who="Steve Dodd " />
<person posts="12" size="41" who="Bill Wendling " />
<person posts="11" size="74" who=" (david parsons)" />
<person posts="11" size="48" who="Theodore Y. Ts'o " />
<person posts="11" size="47" who="Borislav Deianov " />
<person posts="11" size="42" who="Horst von Brand " />
<person posts="10" size="37" who="Khimenko Victor " />
<person posts="10" size="36" who="Ricky Beam " />
<person posts="10" size="31" who="" />
<person posts="10" size="28" who="Tigran Aivazian " />
<person posts="9" size="48" who="Michael H. Warfield " />
<person posts="9" size="31" who="David Hinds " />
<person posts="9" size="28" who="Albert D. Cahalan " />
<person posts="9" size="26" who="Alejandro Conty " />
<person posts="7" size="44" who="Joseph A. Martin " />
<person posts="7" size="30" who="Wakko Warner " />
<person posts="7" size="29" who="Andrew Pam " />
<person posts="7" size="28" who=" (Kai Henningsen)" />
<person posts="7" size="27" who=" (H. Peter Anvin)" />
<person posts="7" size="27" who="Chip Salzenberg " />
<person posts="7" size="22" who="Thomas S. Iversen " />
<person posts="7" size="21" who="David Woodhouse " />
<person posts="6" size="23" who=" (Marek Habersack)" />
<person posts="6" size="23" who="Andi Kleen " />
<person posts="6" size="23" who="Olaf Titz " />
<person posts="6" size="22" who="Horst von Brand " />
<person posts="6" size="22" who="Guy Hutchison " />
<person posts="6" size="21" who="Richard B. Johnson " />
<person posts="6" size="21" who="Terje Kvernes " />
<person posts="6" size="20" who="Philippe Troin " />
<person posts="6" size="20" who="" />
<person posts="6" size="18" who="Rik van Riel " />
<person posts="6" size="18" who="" />
<person posts="6" size="17" who="Keith Owens " />
<person posts="6" size="15" who="Velizar Bodoursky " />
<person posts="5" size="76" who=" (Graham Stoney)" />
<person posts="5" size="30" who="David Elliott " />
<person posts="5" size="25" who="Dunlap, Randy " />
<person posts="5" size="25" who="Mr. James W. Laferriere " />
<person posts="5" size="24" who=" (Kanoj Sarcar)" />
<person posts="5" size="21" who="Jan-Simon Pendry " />
<person posts="5" size="18" who="Mike Galbraith " />
<person posts="5" size="17" who="Christoph Hellwig " />
<person posts="5" size="16" who="Pavel Machek " />
<person posts="5" size="16" who="Ivan Passos " />
<person posts="5" size="15" who="Richard June " />
<person posts="5" size="15" who="Matthias Andree " />
<person posts="5" size="15" who="Brian Gerst " />
<person posts="5" size="14" who="Maciej W. Rozycki " />
<person posts="5" size="13" who="Jeff Dike " />
<person posts="4" size="35" who="Martin Lucina " />
<person posts="4" size="33" who="Rafal Maszkowski " />
<person posts="4" size="33" who="Daniel Marmier " />
<person posts="4" size="20" who="Elmer Joandi " />
<person posts="4" size="15" who="=?iso-8859-1?q?willy=20tarreau?= " />
<person posts="4" size="15" who="Mike Porter " />
<person posts="4" size="14" who="Mike Castle " />
<person posts="4" size="13" who="Anthony Barbachan " />
<person posts="4" size="13" who="Ion Badulescu " />
<person posts="4" size="13" who="Miles Lane " />
<person posts="4" size="12" who="Pierfrancesco Caci " />
<person posts="4" size="12" who="Dennis " />
<person posts="4" size="12" who="Thomas Sailer " />
<person posts="4" size="12" who="G. Allen Morris III " />
<person posts="4" size="12" who="Garst R. Reese " />
<person posts="4" size="11" who="Tim Waugh " />
<person posts="4" size="11" who="Matthew Kirkwood " />
<person posts="4" size="10" who="" />
<person posts="3" size="81" who="Ingo Molnar " />
<person posts="3" size="56" who="Thomas Mohr " />
<person posts="3" size="42" who="Dylan Griffiths " />
<person posts="3" size="30" who="Stahl, David " />
<person posts="3" size="29" who="Matt Aubury " />
<person posts="3" size="22" who="Rick van Rein " />
<person posts="3" size="16" who="Alexander Viro " />
<person posts="3" size="15" who=" (Robert Broughton)" />
<person posts="3" size="13" who="Vojtech Pavlik " />
<person posts="3" size="13" who="Urban Widmark " />
<person posts="3" size="13" who="David Bronaugh " />
<person posts="3" size="13" who="=?iso-8859-1?Q?Jakob_=D8stergaard?= " />
<person posts="3" size="13" who="Paul Mackerras " />
<person posts="3" size="13" who="Paul Barton-Davis " />
<person posts="3" size="12" who="Peter Samuelson " />
<person posts="3" size="12" who="Peter Stuge " />
<person posts="3" size="11" who="Kjetil Torgrim Homme " />
<person posts="3" size="11" who="Alan Curry " />
<person posts="3" size="11" who=" (Rogier Wolff)" />
<person posts="3" size="11" who="Andreas Dilger " />
<person posts="3" size="11" who="Andi Kleen " />
<person posts="3" size="11" who=" (Stephen Harris)" />
<person posts="3" size="10" who="Geert Uytterhoeven " />
<person posts="3" size="10" who="Bradley D. LaRonde " />
<person posts="3" size="10" who="Andrew McNabb " />
<person posts="3" size="10" who="Andrzej Krzysztofowicz " />
<person posts="3" size="10" who="Henning P. Schmiedehausen " />
<person posts="3" size="10" who="Dan Kegel " />
<person posts="3" size="10" who="Raghavendra Bhat " />
<person posts="3" size="9" who="Helge Hafting " />
<person posts="3" size="9" who="Frank de Lange " />
<person posts="3" size="9" who="Dave Jones " />
<person posts="3" size="9" who="Matthew Vanecek " />
<person posts="3" size="9" who="Peter Steiner " />
<person posts="3" size="9" who="Oliver Xymoron " />
<person posts="3" size="9" who="Niels Kristian Bech Jensen " />
<person posts="3" size="8" who="Guest section DW " />
<person posts="3" size="8" who="" />
<person posts="3" size="8" who="Alan Modra " />
<person posts="2" size="25" who="Linda Walsh " />
<person posts="2" size="18" who="Johannes Erdfelt " />
<person posts="2" size="16" who="Scott A. Yoder " />
<person posts="2" size="13" who="Jim Bauer " />
<person posts="2" size="12" who="Willy Tarreau " />
<person posts="2" size="12" who="Christopher Smith " />
<person posts="2" size="11" who="Michael K. Johnson " />
<person posts="2" size="10" who="=?ISO-8859-1?Q?G=E9rard_Roudier?= " />
<person posts="2" size="9" who="Matti Aarnio " />
<person posts="2" size="8" who="Russell King " />
<person posts="2" size="8" who="Lee Mitchell " />
<person posts="2" size="8" who="Christoph Martin " />
<person posts="2" size="8" who="Russ Allbery " />
<person posts="2" size="8" who="Martin Mares " />
<person posts="2" size="8" who="Simon Kirby " />
<person posts="2" size="7" who="Adam Sampson " />
<person posts="2" size="7" who="German Jose Gomez Garcia " />
<person posts="2" size="7" who="Mark H. Wood " />
<person posts="2" size="7" who="Stephen Frost " />
<person posts="2" size="7" who="Peter T. Breuer " />
<person posts="2" size="7" who="Arthur Pedyczak " />
<person posts="2" size="7" who="Jaromir Koutek " />
<person posts="2" size="7" who="Rado " />
<person posts="2" size="7" who="Steven J. Hill " />
<person posts="2" size="7" who="Joe " />
<person posts="2" size="7" who="dean gaudet " />
<person posts="2" size="7" who="Mike Harrelson " />
<person posts="2" size="7" who="dLux " />
<person posts="2" size="7" who="Brian Parris " />
<person posts="2" size="6" who="Guus Sliepen " />
<person posts="2" size="6" who="David A. Bandel " />
<person posts="2" size="6" who="Bernard Sebastien " />
<person posts="2" size="6" who="Philipp Matthias Hahn " />
<person posts="2" size="6" who="Marcelo de Paula Bezerra " />
<person posts="2" size="6" who=" (Stuart Lynne)" />
<person posts="2" size="6" who=" (Eugene Crosser)" />
<person posts="2" size="6" who="Koroush Saraf " />
<person posts="2" size="6" who="George Anzinger " />
<person posts="2" size="6" who="Tom Leete " />
<person posts="2" size="6" who="Marcus Meissner " />
<person posts="2" size="6" who="Roger Larsson " />
<person posts="2" size="6" who="Nils Philippsen " />
<person posts="2" size="6" who="Michael T. Babcock " />
<person posts="2" size="6" who="Matthias Juchem " />
<person posts="2" size="6" who=" (Aaron Denney)" />
<person posts="2" size="5" who="" />
<person posts="2" size="5" who="Aaron Sethman " />
<person posts="2" size="5" who="Michael Harnois " />
<person posts="2" size="5" who="Benjamin Redelings I " />
<person posts="2" size="5" who="Jun Sun " />
<person posts="2" size="5" who="Rusty Russell " />
<person posts="2" size="5" who="Neal Becker " />
<person posts="2" size="5" who="Michal Ostrowski " />
<person posts="2" size="5" who="Alex Buell " />
<person posts="2" size="5" who="Vrushabhendra K G " />
<person posts="2" size="5" who="Joerg Stroettchen " />
<person posts="2" size="5" who="Trever Adams " />
<person posts="2" size="4" who="Kernel User " />
<person posts="2" size="4" who="" />
<person posts="1" size="27" who="Matthias Juchem " />
<person posts="1" size="21" who="Jim Breton " />
<person posts="1" size="16" who="Roy Sigurd Karlsbakk " />
<person posts="1" size="15" who="" />
<person posts="1" size="14" who="Matt " />
<person posts="1" size="12" who="Torben Mathiasen " />
<person posts="1" size="11" who="" />
<person posts="1" size="10" who="Thorsten Knabe " />
<person posts="1" size="9" who="Ladislav Lhotka " />
<person posts="1" size="9" who="Anton Altaparmakov " />
<person posts="1" size="8" who="Matthew Hanselman " />
<person posts="1" size="8" who="H . J . Lu " />
<person posts="1" size="8" who="Herbert Xu " />
<person posts="1" size="7" who="" />
<person posts="1" size="7" who="Matt Luker " />
<person posts="1" size="6" who="Robert Cohen " />
<person posts="1" size="6" who="Chris Fearnley " />
<person posts="1" size="6" who="Vann, Mark " />
<person posts="1" size="6" who="Martin Josefsson " />
<person posts="1" size="6" who="Harald Welte " />
<person posts="1" size="6" who="Phil Brutsche " />
<person posts="1" size="6" who="Remi Turk " />
<person posts="1" size="6" who="Larry McVoy " />
<person posts="1" size="6" who="" />
<person posts="1" size="5" who="Klaas Naaijkens " />
<person posts="1" size="5" who="Sean Connor " />
<person posts="1" size="5" who="Dimitris Michailidis " />
<person posts="1" size="5" who="Stefan Traby " />
<person posts="1" size="5" who="Christopher Thompson " />
<person posts="1" size="5" who="Paul Jakma " />
<person posts="1" size="5" who="Frodo Looijaard " />
<person posts="1" size="5" who="Kelly French " />
<person posts="1" size="5" who="Antonio Miguel F. M. Trindade " />
<person posts="1" size="4" who="Nick Hibma " />
<person posts="1" size="4" who="Cyrille Chepelov (home) " />
<person posts="1" size="4" who="Steve Ruby " />
<person posts="1" size="4" who="Pierre Fortin " />
<person posts="1" size="4" who="Nicholas Vinen " />
<person posts="1" size="4" who="f5ibh " />
<person posts="1" size="4" who="Chuck Lever " />
<person posts="1" size="4" who="Anton Altaparmakov " />
<person posts="1" size="4" who="Harald Koenig " />
<person posts="1" size="4" who="Gunther Mayer " />
<person posts="1" size="4" who="John Levon " />
<person posts="1" size="4" who="Jordan Mendelson " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Marcus Sundberg " />
<person posts="1" size="4" who="Romano Giannetti " />
<person posts="1" size="4" who="Eric Youngdale " />
<person posts="1" size="4" who="Horst von Brand " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Mircea Damian " />
<person posts="1" size="4" who=" (Kees Bakker)" />
<person posts="1" size="4" who="Anton Ivanov " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="cumulus nimbus " />
<person posts="1" size="4" who="=?big5?B?vEK+SsLX?= " />
<person posts="1" size="4" who=" (John Alvord)" />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="Junjiro Okajima " />
<person posts="1" size="4" who="Robert Collier " />
<person posts="1" size="4" who="Marc Duponcheel " />
<person posts="1" size="4" who="Liran Liss " />
<person posts="1" size="4" who="FORT David ou popo " />
<person posts="1" size="4" who="Abramo Bagnara " />
<person posts="1" size="4" who="Jesse Pollard " />
<person posts="1" size="4" who="Detlef Struessmann " />
<person posts="1" size="4" who="" />
<person posts="1" size="4" who="David Luyer " />
<person posts="1" size="4" who="ZINKEVICIUS,MATT (HP-Loveland,ex1) " />
<person posts="1" size="3" who="Richard Adams " />
<person posts="1" size="3" who=" (Eric W. Biederman)" />
<person posts="1" size="3" who="Christopher Barton " />
<person posts="1" size="3" who="Ben Greear " />
<person posts="1" size="3" who=" (Grendel)" />
<person posts="1" size="3" who="Trond Myklebust " />
<person posts="1" size="3" who="Tuomas Heino " />
<person posts="1" size="3" who="Oystein Viggen " />
<person posts="1" size="3" who="Eric Buddington " />
<person posts="1" size="3" who="John Alvord " />
<person posts="1" size="3" who="Jeff Moyer " />
<person posts="1" size="3" who="Bernhard Rosenkraenzer " />
<person posts="1" size="3" who="Khimenko Victor " />
<person posts="1" size="3" who="Eirik Fuller " />
<person posts="1" size="3" who="Zack Brown " />
<person posts="1" size="3" who="Werner Almesberger " />
<person posts="1" size="3" who="Martin Tessun " />
<person posts="1" size="3" who="Joel Jaeggli " />
<person posts="1" size="3" who=" (Linus Torvalds)" />
<person posts="1" size="3" who="Jeff DeFouw " />
<person posts="1" size="3" who="Clayton, Mark " />
<person posts="1" size="3" who="Felix von Leitner " />
<person posts="1" size="3" who="Mark A. Mays " />
<person posts="1" size="3" who="pramodh mallipatna " />
<person posts="1" size="3" who="Mark Lord " />
<person posts="1" size="3" who="Mitchell Blank Jr " />
<person posts="1" size="3" who="Vardhan Varma " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Nick Clifford " />
<person posts="1" size="3" who="Rodrigo Barbosa " />
<person posts="1" size="3" who="Michael Bacarella " />
<person posts="1" size="3" who="Joe Pranevich " />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Dominik Kubla " />
<person posts="1" size="3" who="JONNA  SANDAGER " />
<person posts="1" size="3" who="Dale Amon " />
<person posts="1" size="3" who="Lech Szychowski " />
<person posts="1" size="3" who="Manuel Estrada " />
<person posts="1" size="3" who="Jonathan Case Nicklin " />
<person posts="1" size="3" who="kiran keshava " />
<person posts="1" size="3" who="Damien Miller " />
<person posts="1" size="3" who="David Weinehall " />
<person posts="1" size="3" who="Erik Kruus " />
<person posts="1" size="3" who="Jan Niehusmann " />
<person posts="1" size="3" who="Chris Evans " />
<person posts="1" size="3" who="Clemens Huebner " />
<person posts="1" size="3" who="John Anthony Kazos Jr. " />
<person posts="1" size="3" who="Olaf Dabrunz " />
<person posts="1" size="3" who="Nicholas Dronen " />
<person posts="1" size="3" who="=?iso-8859-1?Q?Ragnar_Kj=F8rstad?= " />
<person posts="1" size="3" who="Arjan van de Ven " />
<person posts="1" size="3" who="Tigran Aivazian " />
<person posts="1" size="3" who="Brian Swetland " />
<person posts="1" size="3" who="Laurent Klefstad " />
<person posts="1" size="3" who="George " />
<person posts="1" size="3" who="Michael Marxmeier " />
<person posts="1" size="3" who="Ph. Marek " />
<person posts="1" size="3" who="Jarl Friis " />
<person posts="1" size="3" who="john " />
<person posts="1" size="3" who="Justin Hahn " />
<person posts="1" size="3" who="Chris Noe " />
<person posts="1" size="3" who="Leslie Donaldson " />
<person posts="1" size="3" who="manfreds " />
<person posts="1" size="3" who="Arne Georg Gleditsch " />
<person posts="1" size="3" who="Matthias Schniedermeyer " />
<person posts="1" size="3" who=" (Prasanna Narayana)" />
<person posts="1" size="3" who="" />
<person posts="1" size="3" who="Jim Roland " />
<person posts="1" size="3" who=" (Robert Kaiser)" />
<person posts="1" size="3" who="Hank Leininger " />
<person posts="1" size="3" who="Frederic L . W . Meunier " />
<person posts="1" size="3" who="Pierre Etchemaite " />
<person posts="1" size="3" who="Larry Colen - Open Source Group " />
<person posts="1" size="3" who="Frank Krauss " />
<person posts="1" size="3" who="Keith Bottner " />
<person posts="1" size="3" who="david parsons " />
<person posts="1" size="3" who="Peter Firmstone " />
<person posts="1" size="3" who="Rob Braun " />
<person posts="1" size="3" who=" (Andreas Steffan)" />
<person posts="1" size="3" who="Achim Flammenkamp " />
<person posts="1" size="3" who="Paul Mackerras " />
<person posts="1" size="3" who="Sanjeev Dwivedi " />
<person posts="1" size="3" who="Michael Westermann " />
<person posts="1" size="3" who="Steve Lord " />
<person posts="1" size="3" who=" (Ruud de Rooij)" />
<person posts="1" size="3" who="Gustav Kristoffer Ek " />
<person posts="1" size="3" who="Mark Zealey " />
<person posts="1" size="3" who="Michael Mess " />
<person posts="1" size="3" who="=?ISO-8859-1?Q?Mattias Engdeg=E5rd?= " />
<person posts="1" size="3" who="Ookhoi " />
<person posts="1" size="3" who="Florian Lohoff " />
<person posts="1" size="2" who="Jes Sorensen " />
<person posts="1" size="2" who="Mario Mikocevic " />
<person posts="1" size="2" who="Remi Turk " />
<person posts="1" size="2" who="FAVRE =?ISO-8859-1?Q?Gr=E9goire?= " />
<person posts="1" size="2" who="Karel Srsen " />
<person posts="1" size="2" who="Pete Zaitcev " />
<person posts="1" size="2" who="Pete Clements " />
<person posts="1" size="2" who="Walter Hofmann " />
<person posts="1" size="2" who="Brad Parker " />
<person posts="1" size="2" who="Bjorn Wesen " />
<person posts="1" size="2" who="=?ISO-8859-1?Q? =C4=E5=AA=E1=B5=D3=A4l ?= " />
<person posts="1" size="2" who="Ronald Cole " />
<person posts="1" size="2" who="Robert S. Irrgang " />
<person posts="1" size="2" who="Ian Soboroff " />
<person posts="1" size="2" who="Christoph Rohland " />
<person posts="1" size="2" who="Dr. Kelsey Hudson " />
<person posts="1" size="2" who="Michael Gerdts " />
<person posts="1" size="2" who="Luca Montecchiani " />
<person posts="1" size="2" who="Chipzz " />
<person posts="1" size="2" who="Dan Malek " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Patrick Cole " />
<person posts="1" size="2" who="Olivier Galibert " />
<person posts="1" size="2" who=" (David=?iso-8859-1?q?_K=E5gedal?=)" />
<person posts="1" size="2" who="Jeff Garzik " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="=?iso-8859-1?Q?Gr=E9goire?= Favre " />
<person posts="1" size="2" who=" (Ben Pfaff)" />
<person posts="1" size="2" who="Andreas Jaeger " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Mathieu Chouquet-Stringer " />
<person posts="1" size="2" who="Andrew Ryan " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Ingo Molnar " />
<person posts="1" size="2" who="DeRobertis " />
<person posts="1" size="2" who="octave klaba " />
<person posts="1" size="2" who="Volker W. Elling " />
<person posts="1" size="2" who="Robert L. Harris " />
<person posts="1" size="2" who="Michael David " />
<person posts="1" size="2" who="Blu3Viper " />
<person posts="1" size="2" who="Sandeep Sundaram " />
<person posts="1" size="2" who="Dmitry Kargapolov " />
<person posts="1" size="2" who="Bruno Boettcher " />
<person posts="1" size="2" who="Jones D (ISaCS) " />
<person posts="1" size="2" who="Raj, Ashok " />
<person posts="1" size="2" who="Alexander S A Kjeldaas " />
<person posts="1" size="2" who="Paul " />
<person posts="1" size="2" who="Laurence Anderson " />
<person posts="1" size="2" who="Kurt Roeckx " />
<person posts="1" size="2" who="" />
<person posts="1" size="2" who="Murat Parlakisik " />
<person posts="1" size="2" who="Robert de Vries " />
<person posts="1" size="2" who="Andrey Savochkin " />
<person posts="1" size="2" who="Erik Tews " />
<person posts="1" size="2" who="pilora " />
<person posts="1" size="2" who="Per Lundberg " />
<person posts="1" size="2" who="I Lee Hetherington " />
<person posts="1" size="2" who="shannon loi " />
<person posts="1" size="2" who="Patrick Lerda " />
<person posts="1" size="2" who="Tiger " />
<person posts="1" size="2" who="Bhagyashree Hirve " />
<person posts="1" size="2" who="Ludovic Abbou " />
<person posts="1" size="2" who="Dan Yefimov " />
<person posts="1" size="2" who="Ralph C Blach " />
<person posts="1" size="2" who="Tim Waugh " />

</stats>

<section
  title="Linus On devfs"
  subject="Suggested dual human/binary interface for proc/devfs"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_01/msg00494.html"
  posts="253"
  startdate="04 Apr 2000 00:00:00 -0800"
  enddate="19 Apr 2000 00:00:00 -0800"
>
<topic>FS: autofs</topic>
<topic>FS: devfs</topic>
<topic>FS: ramfs</topic>
<topic>Hot-Plugging</topic>

<p>This was a very meaty thread, in which Linus Torvalds finally explained his
thinking behind including 'devfs' in the kernel, and where he expects it to
go in the future. In the course of a very interesting discussion, he started
off by explaining his view about /proc files containing binary data, which
are easier to parse, as opposed to ASCII strings, which are more
human-readable:</p>

<quote who="Linus Torvalds">

<p>I want the numberic crap to GO AWAY. It's
stupid, it's unmaintainable, and I do _not_ want to have the same old
"device number" problems in new guises.</p>

<p>A hierarchical name-space with true names is the obviously correct way to
name kernel parameters. And doing that any other way than exporting it as a
filesystem is stupid and wrong.</p>

<p>Guys, remember what made UNIX successful, and Plan-9 seductive? The
"everything is a file" notion is a powerful notion, and should NOT be
dismissed because of some petty issues with people being too lazy to parse a
full name.</p>

<p>The same is true of ASCII contents. Binary files for configuration data are
BAD. This is true for kernel interfaces the same way it is true of
interfaces outside the kernel.</p>

<p>I tell you, you don't want the mess of having things like the Windows
registry - we want to have dot-files that are ASCII, and readable with a
regular editor, that you can do grep's on, and that can be manipulated
easily with perl.</p>

<p>Think of /etc/password. And think of the STUPIDITIES that a lot of UNIX
vendors made with their user managment databases - it happened not once, but
multiple times. All in the name of unified tools (never mind the fact that
none of the standard tools worked any more), and in the name of efficiency
(the "parsing ASCII wastes CPU cycles").</p>

<p>Do people think that .bashrc would be better in a binary format that uses
special tools to edit it? I don't think so. Don't make the kernel interface
files fall into that classic _stupid_ black hole.</p>

<p>Plain-text ASCII is a goodness. Readable naming is a goodness. Yes, it takes
more care, but the end result is simply _better_.</p>

<p>Don't expand on the failures of a numeric sysctl(). Let it die in peace.
Trust me, in the big picture everybody will end up happier.</p>

</quote>

<p>A number of people replied to this and there were several long and
interesting threads; but later, Linus posted some sample code for a very
simple RAM-based filesystem. He explained, <quote who="Linus Torvalds">let
me append the ramfs thing I wrote as a dynamic ramdisk, and note how it
leaves everything in the VFS caches. This is how any virtual filesystem
should end up looking some day (Al Viro is looking at making /proc use this
approach too - get rid of the "proc_directory_entry" thing, and just use the
VFS layer dentry instead).</quote> He went on, <quote who="Linus Torvalds">
One of the arguments against /proc as opposed to sysctl() has been
complexity and size: this thing is _small_. It uses the VFS logic (which has
to be there anyway if you have any filesystem at all) to do all the
maintenance. Add number parsing and output, and you have a sysctl() without
all the sysctl()-specific crud.</quote></p>

<p>Finally, he added,<quote who="Linus Torvalds">Btw, richard, this approach
would lend itself quite well to devfs too,</quote> and this determined the
course of future discussion. From this point on, the subthread focused on
'devfs'.</p>

<p>Richard had a lot of questions about Linus' suggestion. In particular, he
didn't understand how (for example) a 'chmod' operation would persist across
reboots, unless 'devfs' explicitly added the complexity Linus was trying to
remove, and saved the information somewhere. But Linus explained that this
didn't matter. He said that even something like 'tar' was good enough to
save those permissions at shutdown and restore them at bootup; and no other
special infrastructure was really needed aside from the normal VFS. Richard
couldn't get his head around this at first, and argued that a number of
people felt the 'tar' approach to be an ugly kludge. Ted was one of those
who felt that way, and made a lengthy case about how devfs wanted to have it
both ways; i.e. to make use of the virtual filesystem, and also have control
over the underlying disk. As he put it, <quote who="Theodore Y. Ts'o">This
is really all about moving the dirt around. You can sweep it under the
carpet, but the dirt is still going to be there. The different solutions
simply sweep it under different corners of the rug, and with the lump in
some cases better distributed than others. :-)</quote></p>

<p>Horst von Brand was also repelled by the 'tar' approach, and said, <quote
who="Horst von Brand">Would you advocate using a filesystem for your home
where you have to drag permissions and ownership for files out of a backup
each time you log in?</quote> And he added:</p>

<quote who="Horst von Brand">

<p>Keep devices in inodes on disk. To do
persistence right, you'll have to keep them in inodes on disk anyway... so
this whole kludge can go. Solves the different devices visible with
different permissions in different chroot(2)s too, without any extra effort.</p>

<p>You know, there were flamewars about this exact point around devfs for
_years_... and no magic solution came forth, not even an idea for a
workable solution.</p>

</quote>

<p>But Linus replied:</p>

<quote who="Linus Torvalds">

<p>How many times a week do you reboot?</p>

<p>And how many scripts do you already run on reboot?</p>

<p>In short, what's wrong with running one more script on reboot and shutdown,
if it means that the filesystem magically becomes much less involved.</p>

<p>Permissions can (and obviously in my opinion, should) be handled by a
user-space agent. The kernel uses some default permissions in the absense of
any other knowledge, but this is not all that dis-similar from what /proc
does in the end.</p>

<p>You're arguing for removing devfs, so you _like_ to make it sound like there
is no solution. I'm telling you that you're wrong.</p>

</quote>

<p>Then later, he revealed his thinking more fully, saying, <quote who="Linus
Torvalds">I don't actually seriously think that using "tar" is a good
idea.</quote> He went on:</p>

<quote who="Linus Torvalds">

<p>What I envision is more like "autofs", in fact.
I really like autofs, and it has nothing to do with the fact that Peter
works in the room next-door. It has everything to do with facts like being
able to lookup the information over NIS etc - which is exactly the kind of
feature that I think in the long run would be extremely cool for /devfs. And
it's still reasonably small, because the kernel doesn't make any real
decisions.</p>

<p>Think of the administration advantages of something like _that_. And that's
why I think devfs is eventually really cool - not because of what it does,
but because of the _potential_.</p>

<p>The main reason for me to include devfs into the kernel was to try to move
the bickering about it from pure bickering to a more productive level. Still
bickering, but now, because it's integrated, I hope that not only discussion
but changes will be more open to people who might not otherwise have
cared.</p>

</quote>

<p>Alexander replied bitterly, <quote who="Alexander Viro">Arrgh. In that
you've definitely succeeded...</quote></p>

<p>Elsewhere, Linus went on:</p>

<quote who="Linus Torvalds">

<p>I'm definitely envisioning something like
autofs, where the decisions on naming, permissions, meaning etc can be made
in user space.</p>

<p>At the same time it's definitely more than autofs, due to the interactions
with hot-plug devices, and the kernel having a way of telling the deamon
when a new device gets added. So if you just extended autofs to handle
special devices too, it wouldn't be very interesting yet.</p>

<p>At least I'm thinking of it as a "autofs"+"device manager" kind of
thing.</p>

</quote>

</section>

<section
  title="ioctl() Bug Hunt And Fix"
  subject="Bug with FIONREAD for TCP?"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00199.html"
  posts="8"
  startdate="10 Apr 2000 00:00:00 -0800"
  enddate="12 Apr 2000 00:00:00 -0800"
>
<topic>Ioctls</topic>

<mention>David S. Miller</mention>
<mention>Alexey Kuznetsov</mention>

<p>Richard Gooch reported that the FIONREAD ioctl(), which normally returns the
number of bytes that are immediately available to be read on a file
descriptor, had been yielding 1 byte on freshly closed descriptors, for the
past few months. He described the situation:</p>

<quote who="Richard Gooch">

<p>The server creates a socket, binds to a port and
listens and accepts the first connection. It does a select(2) on the FD, and
upon an input event, calls ioctl(2) with FIONREAD. This yields 1 byte
readable. Any attempt to read that byte fails, as it's not really there.</p>

<p>The client connects, waits a second, then calls close(2). It doesn't matter
if the client writes some data (which the server reads), the server still
gets 1 byte readable when the connection closes. This really doesn't seem
right, since there is no data to read. Besides, how else is the server to
know that the "input" event is in fact a closure (I can't use
poll(2))?</p>

</quote>

<p>David S. Miller felt this was probably a bug, and asked how other systems
behaved. Richard replied, <quote who="Richard Gooch">I've been using this
technique for nearly 10 years, and FIONREAD has always yielded 0 bytes
readable on close for ConvexOS, SunOS 4.x, Solaris 2.x, IRIX 5.x and 6.x,
AIX 3.x, HP-UX ?.?, UNICOS ?.?, Ultrix, DEC OSF/1 (aka Digital Unix aka
Tru64 Unix aka tomorrow's new name). Even Linux worked this way, until
sometime in the last 4 months, while I was away (2.3.x series of
course).</quote> Alexey Kuznetsov posted a short patch and asked for
comments, and Richard and David both agreed it was a dead-on fix.</p>

</section>

<section
  title="Cornering A Slowdown"
  subject="Asynch I/O gets easily overloaded on 2.2.15 and 2.3.99"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00337.html"
  posts="38"
  startdate="10 Apr 2000 00:00:00 -0800"
  enddate="13 Apr 2000 00:00:00 -0800"
>
<topic>Big O Notation</topic>
<topic>Ioctls</topic>

<p>Jeff V. Merkey noticed that increasing the LRU of his Netware Filesystem
to over 3000 buffers, would slow linux down by a huge amount. This didn't
seem to jibe with what he knew of LRU's. As "Unix Internals: The New
Frontiers" by Uresh Vahalia, puts it on page 285, "When the buffer is not
locked, it is kept on a free list. The free list is maintained in least
recently used (LRU) order. Whenever the kernel needs a free buffer, it
chooses the buffer that has not been accessed for the longest time. This
rule is based on the fact that typical system usage demonstrates a strong
locality of reference: recently accessed data is more likely to be accessed
before data that has not been accessed in a long time. When a buffer is
accessed and then released, it is placed at the end of the free list (it is
at this point most recently used). As time passes, it advances towards the
list head. If at any time it is accessed again, it returns to the end of the
list. When it reaches the head of the list, it is the least recently used
buffer and will be allocated to any process that needs a free buffer."
Normally, adding more buffers to the cache would tend to speed things up
rather than slow them down, and Jeff felt he'd tracked this problem to the
kernel itself, rather than his NWFS code. Andi Kleen replied that he felt
the problem was probably the elevator code from ll_rw_blk. The elevator
algorithm would sort I/O requests so as minimize the number of scans over
the hard drive. Jeff said he'd do some benchmarks and report on them, but
Stephen C. Tweedie replied, <quote who="Stephen C. Tweedie">The elevator
doesn't sort buffers, it only sorts requests --- and there is a strict limit
on how many requests we can have outstanding at once. I wouldn't have
thought that elevator scalability would have had anything to do with
performance going downhill above 3000 buffers.</quote> But he agreed that
only profiling could tell for sure. Andrea Arcangeli also felt that Andi
must be wrong about the elevator code being the problem. Using formal
theta-notation to refer to the relative worst-case running time of various
algorithms (using 'O' as the ascii representation of theta, where O(1)
represents a better running time than O(n), which is better than O(n^2) etc.
-- see the end of this article), saying that the</p>

<quote who="Andrea Arcangeli">

<p>new elevator merges requests in O(1) if they
are requesting contigous sectors. 2.2.x algorithm is O(N) also for merging
requests of contiougs I/O instead.</p>

<p>If they are seeking all over the place then, yes we have an O(n) complexity
there but the queue is limited. It's hard limit and you are hitting such
limit _each_ time you write to disk some mbyte of data. So if you have not
hangs while kupdate runs, then the elevator isn't going to be the
culprit.</p>

</quote>

<p>But Andi asked, <quote who="Andi Kleen">I was more thinking about lots of
wakeups in get_request_wait causing the elevator to do much work (kupdate is
single threaded so there are only a few wakeups). With lots of threads
calling ll_rw_block in parallel it may look differently.</quote> Andrea
replied (semi-) historically, <quote who="Andrea Arcangeli">With the
previous elevator code in 2.3.5x if there wasn't available requests you are
right, the revalidation was quite expensive. However with the 2.3.99-prex I
fixed that,</quote> and went on to say that the only remaining slowdown in
the code was still very fast and shouldn't account for Jeff's problem.</p>

<p>There was a bit more technical discussion, and then Jeff posted the results
of his benchmarks, almost exactly 24 hours after the thread began. He said:</p>

<quote who="Jeff V. Merkey">

<p>I tries runs of 500 buffers, 1000 buffers, 2000
buffers, 3000 buffers, and 4000 buffers.</p>

<p>And the winners are!</p>

<p>
<ol>

<li>

<p>ll_rw_blk (and add_request/make_request)  (oink, oink..... oink, oink
... rooting around down in the hardware -- I think it's looking for
truffles)</p>

<p>and a close second:</p>

</li>

<li>ide_do_request<br />
    ide_delay_50ms (huge!!!)<br />
    ide_ioctl</li>

</ol>
</p>

</quote>

<p>There were a lot of replies to this. Dimitris Michailidis shared his
experience regarding item 1 of Jeff's report:</p>

<quote who="Dimitris Michailidis">

<p>I suspect that add_request/make_request
are not the real culprits here. My experience with heavy disk I/O tests is
that the bottleneck is usually __get_request_wait(), but that executes with
interrupts off so profiling charges the callers instead. Here's an excerpt
from a call graph profile (kernel is 99-pre3):</p>

<table border="0">
<tr><td>         </td><td>       </td><td>0.87    </td><td>1.19   </td><td>20662/20662        </td><td>generic_make_request &#91;22&#93;</td></tr>
<tr><td>&#91;51&#93;     </td><td>0.5    </td><td>0.87    </td><td>1.19   </td><td>20662              </td><td>__get_request_wait &#91;51&#93;</td></tr>
<tr><td>         </td><td>       </td><td>1.15    </td><td>0.04   </td><td>200799/379645      </td><td>schedule &#91;47&#93;</td></tr>
</table>

<p>As you can see processes sleep/wake_up a lot in __get_request_wait and
generate more than half of all the scheduling activity.  This is despite the
wake_one, and actually having all processes wake up simultaneously doesn't
make things all that worse (increases calls to schedule() by about 20% in my
case).  The real bottleneck under disk I/O load is the single request array,
IMO.</p>

</quote>

<p>Jeff was very interested in this, and said he'd post new numbers as soon as
he had them. Elsewhere, Andre Hedrick replied to item 2 of Jeff's
benchmarks, particularly the huge ide_delay_50ms time, saying, <quote
who="Andre Hedrick">You are stuck! It is a hardware issue in clocking..... I
have begun adjusting to a schedule to easy the loop load and it appears
harmless and stable.</quote></p>

<p>The rest of the discussion focused on an oops Jeff had reported with his
benchmarks, which was subsequently fixed. No actual solution surfaced for
Jeff's original slowdown.</p>

<p>There were two descriptions of theta-notation on the list this week, both
occurring in a completely unrelated thread. Bert Hubert described it as
follows:</p>

<quote who="Bert Hubert">

<p>O(whatever) is a notation by which you can describe
how the running time of your algorithm depends on the amount of input.
Finding books in a randomly ordered library is O(N) - if you have twice as
many books to search, it will take twice as long.</p>

<p>In a perfectly ordered library, the time it takes is described by O(1) - you
will always find your book in the same time. Perhaps O(sqrt(N)) would be
more appropriate, because if there are more books, you may need to walk
further before you are at the right place. The sqrt is because your library
is two dimensional.</p>

<p>Naive sorting is O(N^2) - which can be good or bad. With large N, it is most
surely bad. But you should know that the *actual* running time is described
by something that looks more like t= offset + alpha*O(N^2) - if offset or
alpha are large, the O(N^2) algorithm might be faster for small N.</p>

<p>Do yourself a favor and get the Knuth trilogy. Not meant to be read cover to
cover, but very useful none the less.</p>

</quote>

<p>Andrea himself described it like this:</p>

<quote who="Andrea Arcangeli">

<p>Note it's not 0(1) but O(1).  In this context
it means that right now when you want a page, you get it at a fixed cost
that doesn't change in function of how many pages are available and how many
of them are of the kind we are interested about.</p>

<p>Take these two symbols:</p>

<p>O(1)<br />
O(N)</p>

<p>N is a variable number. Assume N to be infinite. O(N) means that an
algorithm needs to check all the N objects to give you a result, and in our
case it will take infinite time. If the algorithm would had O(1) complexity
it would instead take the usual fixed time despite of how many N objects
exists in the system.</p>

</quote>

</section>

<section
  title="Difficulties Merging Drivers For 2.3.99"
  subject="What to do with 3c59x.c?"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00368.html"
  posts="18"
  startdate="11 Apr 2000 00:00:00 -0800"
  enddate="13 Apr 2000 00:00:00 -0800"
>
<topic>Hot-Plugging</topic>
<topic>Networking</topic>
<topic>PCI</topic>

<mention>David Ford</mention>

<p>Andrew Morton announced/asked:</p>

<quote who="Andrew Morton">

<p>I have pretty much completed the 2.3.99 merge of
drivers/net/3c59x.c and drivers/net/pcmcia/3c575_cb.c.</p>

<p>This driver now supports</p>

<p>3c59x series<br />
3c90x series<br />
3c980 series<br />
3c555 series<br />
3c575 series (Cardbus).<br /></p>

<p>That's EISA, PCI and Cardbus all in the one driver. Fairly cleanly.</p>

<p>I wish to get a patch out for some testing. (As it claims to support 27
different NICs it's gonna need some...)</p>

<p>My question is: how should this driver be integrated into the kernel
tree?</p>

<p>
<ul>

<li>putting it in drivers/net/3c59x.c and removing
drivers/net/pcmcia/3c575_cb.c will break existing /etc/pcmcia/config
settings.</li>

<li>putting it in drivers/net/pcmcia/3c575_cb.c and removing 3c59x.c will
require non-cardbus users to dive down into the "PCMCIA network device
support" configuration menu to enable the driver for their EISA or PCI NICs.
Will also break existing conf.moduleses.</li>

<li>overwriting both drivers/net/3c59x.c and drivers/net/pcmcia/3c575_cb.c
with the same file is obnoxious.</li>

<li>perhaps make a clean break.  Put it in drivers/net/3cxxx.c and remove
the other two.</li>

</ul>
</p>

<p>Any suggestions?</p>

</quote>

<p>After some discussion, he posted again, saying:</p>

<quote who="Andrew Morton">aargh.  I'm screwed.

<p>
<ul>

<li>The consensus here seems to be that I should continue to generate
drivers/net/3c59x.o as well as drivers/net/pcmcia/3c575_cb.o. Fair
enough.</li>

<li>I don't want to copy a single .o file into two places because the source
_should_ be compiled twice. The pcmcia Makefile could at some point in the
future pass additional #defines into the compiler via -D, for example which
may trigger conditional compilation. (In fact, it defines -DPCMCIA for
_some_ targets today. But not all. Bug?)</li>

<li>I don't want to put a special target in the pcmcia/Makefile because this
becomes a maintenance headache. Plus it needs duplication of all the stuff
which generates .3c575_cb.o.flags.</li>

<li>The cleanest way of doing this is to make pcmcia/3c575_cb.c a
one-liner:

<blockquote>

<code>

#include "../3c59x.c".

</code>

</blockquote>

But mkdep doesn't recur!  It only tracks the first-level inclusions, so
pcmcia/.depend says:

<blockquote>

<code>

3c575_cb.o: 3c575_cb.c \<br />
   ../3c59x.c<br />
3c589_cs.o: 3c589_cs.c \

</code>

</blockquote>

This is very, very naughty of mkdep.

</li>

</ul>
</p>

<p>I'll do the cut-n-paste from Rules.make into pcmcia/Makefile for the
while.</p>

<p>Really, mkdep should be taught to recur. This probably explains why a good
old 'make clean' sometimes makes wierd things stop happening.</p>

</quote>

<p>To Andrew's statement that the source <i>should</i> be compiled twice, Jeff
Garzik replied, <quote who="Jeff Garzik">What makes you think this? The
source should not need to be compiled twice. The PCI driver interface is
designed to seamlessly support hotplug and non-hotplug.</quote> Andrew
replied, <quote who="Andrew Morton">One example: 3c59x.o could have been
compiled for static (non-modular) use. Copying that onto 3c575cb.o and
insmodding it wouldn't work very well :)</quote> At this point, Linus
Torvalds came in with:</p>

<quote who="Linus Torvalds">

<p>Andrew, that's _exactly_ what I do with
"tulip.o" - I just compile it into the kernel.</p>

<p>And it works wonderfully well with pcmcia.</p>

<p>PCMCIA does _not_ require modules. In fact, it would be a bug to load the
_cb module when the non-cb one is already compiled into the kernel. There's
absolutely no reason to have two object files, but if you want to maintain
compatibility with the old pcmcia scripts you could have a symlink
(/lib/modules/xxx/pcmcia/3c575cb.o -&gt;
/lib/modules/xxx/net/3c59x.o)</p>

</quote>

<p>However, David Ford reported that compiling tulip directly into the kernel
would not boot if he had a tulip PCMCIA card installed. Linus asked for more
information, but the thread ended there.</p>

</section>

<section
  title="A New Way To Clean Up /proc"
  subject="An alternative way of populating /proc"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00448.html"
  posts="42"
  startdate="11 Apr 2000 00:00:00 -0800"
  enddate="17 Apr 2000 00:00:00 -0800"
>
<topic>Disks: IDE</topic>
<topic>FS: procfs</topic>
<topic>Virtual Memory</topic>

<mention>Linus Torvalds</mention>

<p>Matt Aubury proposed a way of restructuring '/proc' to make it useful again.
He described:</p>

<quote who="Matt Aubury">

<p>The recent debate about the multitude of possible
formats for data in /proc caused me to think about a short-hand way of
populating a /proc directory hierarchy. This scheme uses a format string to
describe the hierarchical data layout, so:</p>

<blockquote>

<code>

        create_proc_entries(NULL, "test:{bar:{x:%d,y:%d,z:%d},foo:%f}", &amp;x, &amp;y, &amp;z, foo_fun);

</code>

</blockquote>

<p>creates a "/proc/test" directory, which further contains a subdirectory
"bar" and a file "foo". The "bar" subdirectory contains three files "x", "y"
and "z".</p>

<p>The formatting argument "%d" takes a pointer to an integer. When reading
such a file (in this case "x", "y", or "z"), the value is shown as ascii.
Writing to the file (again in ascii) updates the value. The "%f" formatting
argument allows you to pass an arbitrary user function for generating
output. Clearly, there are potentially quite a number of standard/useful
formatting arguments.</p>

<p>I've done a quick, dirty, unfinished implementation of this idea, so people
can get the picture. Attached.</p>

<p>Many people will hate this because (1) it's doing parsing within the kernel,
(2) it tends to favour ascii I/O, (3) it tends to favour deep directory
hierarchies,(4) it uses recursion :-)</p>

<p>On the other hand, (1) it's very lightweight (lsmod shows size=744 including
demo code), (2) it makes creating a lot of /proc entries stupidly simple,
(3) it might reduce code duplication.</p>

</quote>

<p>Everyone including Linus Torvalds was very impressed with this idea. There
was a fair bit of discussion, which Matt summarized:</p>

<quote who="Matt Aubury">

<p>All,</p>

<p>The "create_proc_entries" suggestion has caused quite a bit of interest, so
I'm hoping to make a proper patch this weekend. A bunch of issues have been
raised (sorry to address them all in one place):</p>

<p>
<ul>

<li>"%" is hard to generate with sprintf -- I think if you're sprintf'ing
format strings this is probably the wrong interface to be using. This is
only intended for the 90% (?) of cases which are really simple.</li>

<li>"%" is redundant -- Yes, it is. But everyone immediately knew what it
meant, which is why it's there.</li>

<li>We should use "PROC_ENT_FUNCTION" rather than "%f". Well, we could do,
but then the format strings would barely be readable.</li>

<li>No type checking -- I agree that this is unfortunate. I would imagine
that even a brief test would show up type errors, though. I'm used to
programming strongly typed languages so this does pain me.</li>

<li>No checking of the number of arguments -- This is just as bad, but we
could solve this quite easily by making a NULL terminator mandatory. I'm in
two minds about this -- comments?</li>

<li>Multiple reads are non-atomic -- Yes, but I think if you care about
atomicity of the interface then, again, you are probably in the 10% of
tricky cases.</li>

<li>Replacing ":" with "/" for directories -- I'm neutral towards this idea.
Anyone else have an opinion?</li>

<li>Allowing read() on the directories -- A beguiling idea, although I'm
worried about that the silly page size limitations might trip me up.
Regardless, it's something that can easily be added later (perhaps by
someone more skilled) so I'm not going to do it for a first pass.</li>

</ul>
</p>

<p>The remaining issues that I see are:</p>

<p>
<ul>

<li>Setting permissions on files and directories.</li>

<li>Which data types are built in (i.e. have format characters).</li>

</ul>
</p>

<p>Poking around my 2.2.12 /proc I see the following in the root owned
parts:</p>

<blockquote>

<code>

    187 -rw-r--r--<br />
    103 -r--r--r--<br />
     12&#160; -r--------     (kcore, kmsg, IDE stuff -- don't know why)<br />
     11&#160; -rw-------     (IDE, some firewall stuff, some VM stuff)<br />
     52&#160; dr-xr-xr-x<br />

</code>

</blockquote>

<p>So it seems that the vast majority of cases can be boiled down to just
whether or not root is allowed to write.</p>

<p>As for data types, integer I/O (decimal and hex) seems to be very common.
String output is also frequent. We could potentially also do range checked
integers, string input, arrays... How useful would these be? We'll still
have the ability to pass function pointers for output, and I'll be adding
support for generic input too.</p>

<p>As I say, I'll try to put something better together over the weekend. I'd be
very interested in any more thoughts people have.</p>

</quote>

<p>There was more discussion, and Matt posted a new patch, and said:</p>

<quote who="Matt Aubury">

<p>As promised I've created an "proper patch" version
of the create_proc_entries API. Hopefully I've addressed a few of the issues
raised, without making the interface (or code size) too bloated. According
to my numbers (which I'm not sure I believe) it adds only 502 bytes to the
size of vmlinux.</p>

<p>The new API is described in the DocBook'd code comments in the patch; scroll
down for details. (Although I've had trouble actually getting the DocBook
documentation to build properly -- I'd welcome any tips).</p>

<p>Once the API has settled down I'll submit it for inclusion: I think it would
be good if it made it into 2.4.0, but if you don't agree please voice your
objections.</p>

</quote>

<p>The DocBook code comments in the patch explained:</p>

<quote who="Matt Aubury">

<p>This function is used to create a hierarchy of
files and directories in procfs.</p>

<p>The format for a file is "name:contents", where name is the filename, and
contents is zero or more format codes (described below). The contents may be
prefixed with an asterix ("*") to specify that the file is to be created
root writable. Otherwise file permissions are readable by all, writable by
none.</p>

<p>The format for a directory is "name/{contents}", where name is the directory
name, and contents are zero or more files or directories, separated by
commas. Directory permissions are always readable and executable by all.</p>

<p>The valid format codes are:</p>

<p>%d - Decimal integer, input and output. Supply an (int *) as the
argument.</p>

<p>%x - Hexadecimal integer, input and output. Supply an (int *) as the
argument.</p>

<p>%s - Zero-terminated string, output only. Supply a (char *) as the
argument.</p>

<p>%v - "Virtual" entry, supply a (struct proc_dir_entry **) pointer as the
argument and this will be set the the entry that is created. This allows you
to either tweek the settings once the entry is created. For instance, you
may use this to arbitrarily set the read_proc and write_proc functions.</p>

<p>The function returns zero on success, and a negative error code on an error.
Check the source for the meaning of the error code.</p>

<p>Example use is:</p>

<blockquote>

<code>

  int beta;<br />

  char gamma&#91;&#93; = "Gamma";<br />

  struct proc_dir_entry *entry;<br />

  create_proc_entries(NULL, "alpha/{beta:%d,gamma:%s%v}", &amp;beta, gamma, &amp;entry, NULL);<br />

  entry-&gt;uid = 500;

</code>

</blockquote>

</quote>

</section>

<section
  title="SSL Accelerator Cards"
  subject="SSL Accelerator cards"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00564.html"
  posts="7"
  startdate="11 Apr 2000 00:00:00 -0800"
  enddate="16 Apr 2000 00:00:00 -0800"
>
<topic>Networking</topic>
<topic>PCI</topic>

<p>Michael T. Babcock asked if anyone was working on support for
crypto-accelerator cards such as the <a
href="http://www.tandem.com/quickspecs/axl200qs/axl200qs.htm">Compaq AXL 200
SSL</a> card. He added, <quote who="Michael T. Babcock">I realise that true
support for such beasts would need to be done within the software (such as
Apache), but cryptographic module hooks in the kernel (as NT now does) would
probably be useful for plugging drivers into.</quote> There was some small
discussion, and Dan Kegel posted a bunch of relevant URLs. Later, he added
that after more research, he'd put up a dedicated <a
href="http://www.kegel.com/ssl.html">SSL web page</a>. He also described:</p>

<quote who="Dan Kegel">

<p>I list a bunch of products and several reviews on
that page. Here are the vendors that make PCI cards that support Linux:</p>

<p>Phobos makes a transparant SSL proxy thingy for $1900 that might do nicely,
and wouldn't require any software changes. It can live in a Linux box, but
it just gets power and configuration from the PCI bus; all data goes via
ethernet only, not the PCI bus.</p>

<p>nCipher makes a fast card that supposedly supports both Solaris and Linux.
It probably goes for a little more than the Phobos card, and can handle 75
or so SSL connections / second.</p>

<p>IBM makes a well-supported crypto coprocessor, but it's based on a 486, and
you just have to wonder :-)</p>

</quote>

</section>

<section
  title="User Mode Port In The Main Tree"
  subject="user-mode port 0.19-2.3.99-pre4"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg00594.html"
  posts="6"
  startdate="11 Apr 2000 00:00:00 -0800"
  enddate="13 Apr 2000 00:00:00 -0800"
>
<topic>User-Mode Linux</topic>

<mention>Pavel Machek</mention>

<p>Jeff Dike announced the latest release of the user-mode Linux port and gave
URLs to the <a href="http://user-mode-linux.sourceforge.net">SourceForge
page</a> and the <a
href="http://sourceforge.net/project/filelist.php?group_id=429">actual
files</a>. Pavel Machek really liked it, and asked if Jeff would be
submitting it to Linus for inclusion in the main tree. Jeff replied, <quote
who="Jeff Dike">My plan is to submit it to Linus when he opens up 2.5. I'm
also thinking about seeing about getting it into an early 2.4. If those IBM
people can get the S390 port into 2.2, I think I ought to be allowed to get
um into 2.4...</quote> Alan Cox replied, <quote who="Alan Cox">S/390 is a
target for early 2.4 or 2.4pre too. I'd like to see UML in. Its security
value for isolating virtual machines is fascinating.</quote> Jeff did a
little jig, and asked:</p>

<quote who="Jeff Dike">

<p>Are there guidelines anywhere about how best to
submit a largish body of code so it doesn't get dinged for non-functional
reasons? One thing that I know about is changing my 2-char indents to 8-char
ones. Are there others?</p>

<p>Would some 2.4 releases be better to target than others (i.e. should I try
to go for a 2.4pre in preference to 2.4.low)?</p>

<p>I'm currently cleaning things up in preparation for 2.4/2.5, so the sooner I
know what needs doing, the sooner I can get going on them.</p>

</quote>

<p>Alan replied, <quote who="Alan Cox">Format it up nicely so it follows the
coding style. Read over it and look at all the things that make you think
uggh. Then seperate out the changes to the mainstream code and look very
hard at them and see if you can sanely avoid them or if they are pointers to
generic code that needs fixing or are just plain sensible to add. Then send
me a set of diffs.</quote> And that was it.</p>

</section>

<section
  title="Benchmarks Comparing Linux And NT"
  subject="Performance data..."
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg01006.html"
  posts="6"
  startdate="13 Apr 2000 00:00:00 -0800"
  enddate="13 Apr 2000 00:00:00 -0800"
>

<mention>Dan Kegel</mention>
<mention>Ashok Raj</mention>

<p>Ashok Raj asked for benchmarks comparing Linux and NT for I/O and
networking; and some folks gave pointers to the <a
href="http://www.mindcraft.com">Mindcraft test</a>. Rik van Riel put in:</p>

<quote who="Rik van Riel">

<p>After the (carefully tuned) Mindcraft test, which
painfully pointed out some weak points in early 2.2 kernels, Linux has been
improved quite a bit.</p>

<p>There is, however, a somewhat more balanced patch (stresses the whole
system, not just a few points) done by the German magazine C'T. You should
be able to find it on their site: <a
href="http://www.heise.de/">http://www.heise.de/</a>.</p>

</quote>

<p>Dan Kegel also gave a pointer to <a
href="http://www.kegel.com/nt-linux-benchmarks.html">his page</a> containing
all the benchmarks he was aware of on the web.</p>

</section>

<section
  title="More 'devfs' Discussion"
  subject="question on your MOUNT_REWRITE changes."
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_02/msg01200.html"
  posts="9"
  startdate="14 Apr 2000 00:00:00 -0800"
  enddate="17 Apr 2000 00:00:00 -0800"
>
<topic>FS: autofs</topic>
<topic>FS: devfs</topic>
<topic>FS: procfs</topic>
<topic>Feature Freeze</topic>

<p>In the course of discussion, Alexander Viro mentioned, <quote who="Alexander
Viro">lookup_dentry() is going out - walk_name() is the replacement.</quote>
Jamie Lokier raised an eyebrow, and asked sardonically, <quote who="Jamie
Lokier">Dentries have completely changed their meaning during the second
feature freeze this year? How is it you're able to thoroughly mangle this
stuff and I can't get a simple DT_DIR patch looked at?</quote> Alexander
first peacefully pointed out that the new behaviour was not all that
different from the old. But with great venom he added that for the dentry
code changes <quote who="Alexander Viro">you can be grateful to devfs. I
would be _glad_ to postpone these changes. But now they became pretty much
mandatory - thanks to the fs with sufficient set of methods and need to do
multiple mounts.</quote> He also posted this lengthy technical explanation
(quoted in full):</p>

<quote who="Alexander Viro">

<p>the main problem with multiple mounts
is the following:</p>

<p>
<ol>

<li>

We should never have more than one dentry for a writable directory.

Print it and hang it on the wall. It's a fundamental requirement. There is
no way to work around it in our VFS. I tried to invent a scheme that would
allow that for more than a year. And I've done most of namespace-related
code in our VFS since the moment when Bill Hawes stopped working on it, so I
suspect that right now I have the best working knowledge of that stuff.
There is no fscking way to survive multiple dentries for writable directory
without major lossage. Period.

</li>

<li>Consequently, we should not have several dentry trees for the same
filesystem.</li>

<li>Consequently, if we want to have the filesystem mounted in several
places we have to share the dentry tree. Including the root dentry.</li>

<li>Consequently, -&gt;d_covers and -&gt;d_mounts are BAD ideas. We have to
separate that information (mount linkage) from the struct dentry.</li>

</ol>
</p>

<p>Notice that unified tree consists of chunks that come from individual
filesystems. And linkage between them (what is mounted where) is already
kept in a different way than the linkage between dentries within the chunk.
Chunks themselves form a tree. Each node in that tree corresponds to one
mountpoint and thus to the directory tree of filesystem mounted there. 1--4
means that we have to separate that 'tree of chunks' from dentry trees and
make the nodes in that tree _refer_ to dentry trees. Moreover, we must
permit to have several chunks refering to the same dentry tree - that's
precisely what we get for multiple mounts.</p>

<p>Let's explore what changes it would require. First of all, dentry becomes
insufficient for walking through the unified tree. _If_ we want to do such a
walk we also need to know which chunk we are talking about. HOWEVER, we
rarely need such walking. Most of the kernel couldn't care less for the
chunk we are in - if you want rmdir() you don't care about the mounting, you
just want the bloody dentry and that's enough. Even more so for read/write/
stat/lstat/readlink/almost everything. Almost all operations are local to
thei individual filesystem and don't care where and how many times it's
mounted. So we can keep using dentries almost everywhere we used to.</p>

<p>Now, let's see what _will_ change. First of all, we should carry the
information about the chunk we are in through the lookup. Just as we carry
the pointer to dentry we are in. Not a big deal. We should be able to keep
track of crossing the chunk boundaries, but we have to do it anyway.
However, we should know which chunk we are in when we start walking. IOW, we
need to</p>

<p>
<ol>

<li>know the chunk where the cwd is.</li>

<li>know the chunk where the root is. Easy enough - we need to extend
fs_struct a bit and take care to set both "dentry" and "chunk" components
upon chdir()/chroot()/fchdir(). Not a big deal for the first two, but the
third requires to store the chunk in struct file of opened directory.
IOW,</li>

<li>in addition to f_dentry we need to store the chunk. Fine. There is not
that much places where we open files (see below). We also need to</li>

<li>

know which chunk we are in when we follow the link. Trivial, since we
keep track of it in the sole caller of -&gt;follow_link() anyway. That's it
for namespace walking.

Another problem is that we need to know the chunk if we ever want to
know the full pathname of object. It adds to the list above

</li>

<li>chunk where the swap component sits. That's it. The rest is covered in
(1)--(3).</li>

</ol>
</p>

<p>Now, (ignoring the stuff with the places where we open files) we need to
choose the structure that would represent nodes in the "tree of chunks".
Fortunately, we already had such a structure - struct vfsmount. It was a
natural candidate for the per-mountpoint stuff, just as struct super_block
is for mountpoint-independent data. That required moving the quota options
into struct super_block (obviously). With that done we got the material for
chunks tree.</p>

<p>What do we need to know about every chunk? Well, obviously we need dentry of
mountpoint, root dentry of mounted fs and parent chunk. That allows for
trivial crossing the mounpoints, erm, rootwards. For crossing them in other
direction (into the mounted fs) we need a bit more - several mountpoints
_may_ (normally will not, but we have to account for that) have the same
dentry (in differnet chunks, indeed). So we have a _set_ of chunks over the
dentry of mountpoint. They all have different parent chunks, thus crossing
the mountpoint turns into</p>

<blockquote>

        find a chunk that would

<blockquote>

                belong to set over current dentry and<br />
                had the parent equal to current chunk.

</blockquote>

</blockquote>

<p>Data structure for that is a separate story and final choice will take
profiling for different uses, but one of the trivial (and effecient in
normal cases) variants is the cyclic list of vfsmounts anchored in dentry.
In absence of the case when two mountpoints have same dentry (in different
chunks) it's as efficient as the old scheme was.</p>

<p>As for the files opening, the problem was in the binfmt drivers, mostly due
to the fact that do_execve() left opening to the -&gt;load_binary(). Which
was a BAD idea, since it lead to code duplication in all of them. Fixed by
shifting the opening into exec.c and passing struct file instead of struct
dentry.</p>

<p>That's mostly it as far as design counts - everything else was the matter of
coding, choosing decent interfaces, etc. and is the matter of putting it
into the tree in small steps. Large part is already there and I'ld rather
postpone the description of all gory details until all this stuff will go.
Infrastructure is already there (almost all - the last piece is sent to
Linus and it deals with the &lt;expletives&gt; /usr/gnuemul/{solaris,etc.}
handling). Once it will be in I'll post the description of new interfaces.</p>

<p>Main part of pending patches consists of almost complete rewrite of
fs/super.c, so changes in that area are _not_ a good idea right now.
Filesystems are already there - in that part all changes are already done,
except the changes in autofs - it is intimately tied to the mount-related
stuff. I have this stuff done, so it's not going to be a problem.</p>

<p>Resulting design gives a lot of interesting opportunities, e.g. it allows to
store all metadata in the dentry tree and don't bother with 'backplane'
trees a-la current procfs. Other obvious things include loopback mounts (add
a new vfsmount and we are done) and dealing with filesystems not visible to
any user (create a vfsmount visible only to the kernel and you are done).</p>

<p>Folks, could you please wait until the interface of lookup will settle down?
I promise to give complete description of the interfaces and data structures
once the thing will be there. Right now it's in transit. I hope that mess
above gives some idea of where we are moving to - it definitely contains all
crucial ideas.</p>

</quote>

<p>The only reply came from David Parsons, who said, <quote who="David
Parsons">Why should I comment? For once you've actually bothered to put
actual technical commentary in your email instead of the traditional
unsupported whining about Richard's coding style. This is *good* and you
should keep doing it.</quote></p>

</section>

<section
  title="Things To Do Before 2.4: Saga Continues"
  subject="Linux 2.3.99pre6-3 job list"
  archive="http://kernelnotes.org/lnxlists/linux-kernel/lk_0004_03/msg00189.html"
  posts="8"
  startdate="16 Apr 2000 00:00:00 -0800"
  enddate="17 Apr 2000 00:00:00 -0800"
>
<topic>Compression</topic>
<topic>Disk Arrays: RAID</topic>
<topic>Disks: IDE</topic>
<topic>Disks: SCSI</topic>
<topic>FS: Coda</topic>
<topic>FS: FAT</topic>
<topic>FS: NFS</topic>
<topic>FS: NTFS</topic>
<topic>FS: UMSDOS</topic>
<topic>I2O</topic>
<topic>Networking</topic>
<topic>PCI</topic>
<topic>Power Management: ACPI</topic>
<topic>SMP</topic>
<topic>Security</topic>
<topic>USB</topic>
<topic>Virtual Memory</topic>
<topic>VisWS</topic>

<p>Alan Cox posted his latest job list:</p>

<quote who="Alan Cox">

<p>
<ol>

<li><b>Fixed</b></li>

<ol>

<li>Tulip hang on rmmod (fixed in .51 ?)</li>

<li>Incredibly slow loopback tcp bug (believed fixed about 2.3.48)</li>

<li>COMX series WAN now merged</li>

<li>VM needs rebalancing or we have a bad leak</li>

<li>SHM works chroot</li>

<li>SHM back compatibility</li>

<li>Intel i960 problems with I2O</li>

<li>Symbol clashes and other mess from _three_ copies of zlib!</li>

<li>PCI buffer overruns</li>

<li>Shared memory changes change the API breaking applications (eg gimp)</li>

<li>Finish softnet driver port over and cleanups</li>

<li>via rhine oopses under load ?</li>

<li>SCSI generic driver crashes controllers (need to pass PCI_DIR_UNKNOWN..)</li>

<li>UMSDOS fixups resync</li>

<li>Make NTFS sort of work</li>

<li>Any user can crash FAT fs code with ftruncate</li>

<li>AFFS fixups</li>

</ol>

<li><b>In Progress</b></li>

<p>
<ol>

<li>Merge the network fixes  (DaveM)</li>

<li>Merge 2.2.15 changes     (Alan)</li>

<li>Get RAID 0.90 in         (Ingo)</li>

<li>Finish I2O merge</li>

<li>Still some SHM bug reports</li>

</ol>
</p>

<li><b>Fix Exists But Isnt Merged</b></li>

<p>
<ol>

<li>Signals leak kernel memory (security)</li>

<li>msync fails on NFS</li>

<li>Lan Media WAN update for 2.3</li>

<li>Semaphore races</li>

<li>Semaphore memory leak</li>

<li>Exploitable leak in file locking</li>

<li>Merge the RIO driver (probably do post 2.4.0 as it is large) (in AC tree)</li>

<li>S/390 Merge (merged in AC tree)</li>

<li>1.07 AMI MegaRAID</li>

<li>Mark SGI VisWS obsolete</li>

<li>64bit lockf support</li>

<li>UMSDOS was broken by the fs changes</li>

<li>Get the Emu10K merged</li>

<li>TTY and N_HDLC layer called poll_wait twice per fd and corrupt memory</li>

<li>ATM layer calls poll_wait twice per fd and corrupts memory</li>

<li>Random calls poll_wait twice per fd and corrupts memory</li>

<li>PCI sound calls poll_wait twice per fd and corrupts memory</li>

<li>sbus audio calls poll_wait twice per fd and corrupts memory</li>

</ol>
</p>

<li><b>To Do</b></li>

<p>
<ol>

<li>Restore O_SYNC functionality</li>

<li>Fix eth= command line</li>

<li>Trace numerous random crashes in the inode cache</li>

<li>Fix Space.c duplicate string/write to constants</li>

<li>VM kswapd has some serious problems</li>

<li>vmalloc(GFP_DMA) is needed for DMA drivers</li>

<li>put_user appears to be broken for i386 machines</li>

<li>Fix module remove race bug              (mostly done - Al Viro)</li>

<li>Test other file systems on write</li>

<li>Directory race fix for UFS</li>

<li>Security holes in execve()</li>

<li>Audit all char and block drivers to ensure they are safe with the 2.3
locking - a lot of them are not especially on the open() path.</li>

<li>Stick lock_kernel() calls around driver with issues to hard to fix
nicely for 2.4 itself</li>

<li>IDE fails on some VIA boards (eg the i-opener)</li>

<li>PCMCIA/Cardbus hangs, IRQ problems, Keyboard/mouse problem (may be fixed ?)</li>

<li>Use PCI DMA by default in IDE is unsafe (must not do so on via VPx x&lt;3)</li>

<li>Use PCI DMA 'lost interrupt' problem with some hw &#91;which ?&#93;</li>

<li>Crashes on boot on some Compaqs ?</li>

<li>pci_set_master forces a 64 latency on low latency setting devices. Some
boards require all cards have latency &lt;= 32</li>

<li>usbfs hangs on mount sometimes</li>

<li>Loopback fs hangs</li>

<li>Problems with ip autoconfig according to Zaitcev</li>

<li>SMP affinity code creates multiple dirs with the same name</li>

<li>TLB flush should use highest priority</li>

<li>Set SMP affinity mask to actual cpu online mask (needed for some boards)</li>

<li>pci_socket crash on unload</li>

<li>Quota mount options are now broken</li>

</ol>
</p>

<li><b>To Do But Non Showstopper</b></li>

<p>
<ol>

<li>Make syncppp use new ppp code</li>

<li>Finish 64bit vfs merges (lockf64 and friends missing)</li>

<li>NCR5380 isnt smp safe</li>

<li>DMFE is not SMP safe</li>

<li>ACPI hangs on boot for some systems</li>

<li>Go through as 2.4pre kicks in and figure what we should mark obsolete
for the final 2.4</li>

<li>Per Process rtsigio limit</li>

<li>Fix SPX socket code</li>

<li>Boot hangs on a range of Dell docking stations (Latitude)</li>

<li>HFS is still broken</li>

<li>iget abuse in knfsd</li>

<li>Paride seems to need fixes for the block changes yet</li>

<li>Some people report 2.3.x serial problems</li>

<li>AIC7xxx doesnt work non PCI ?</li>

<li>USB hangs on APM suspend on some machines</li>

<li>PCMCIA crashes on unloading pci_socket</li>

<li>DEFXX driver appears broken</li>

<li>ISAPnP IRQ handling failing on SB1000 + resource handling bug</li>

<li>TB Multisound driver hasnt been updated for new isa I/O totally.</li>

</ol>
</p>

<li><b>Compatibility Errors</b></li>

<p>
<ol>

<li>exec() returns wrong codes on a file not found</li>

</ol>
</p>

<li><b>Probably Post 2.4</b></li>

<p>
<ol>

<li>per super block write_super needs an async flag</li>

<li>addres_space needs a VM pressure/flush callback</li>

<li>per file_op rw_kiovec</li>

<li>enhanced disk statistics</li>

<li>PIII FXSAVE/FXRESTORE support</li>

</ol>
</p>

<li><b>Drivers In 2.2 not 2.4</b></li>

<li><b>To Check</b></li>

<p>
<ol>

<li>Truncate races (Debian apt shows it nicely) &#91;done ? - all but Coda&#93;</li>

<li>Elevator and block handling queue change errors are all sorted</li>

<li>Check O_APPEND atomicity bug fixing is complete</li>

<li>Make sure all drivers return 1 from their __setup functions</li>

<li>Protection on isize  (sct) &#91;Al Viro mostly done&#93;</li>

<li>Mikulas claims we need to fix the getblk/mark_buffer_uptodate thing for 2.3.x as well</li>

<li>Network block device seems broken by block device changes</li>

<li>Fbcon races</li>

<li>Fix all remaining PCI code to use new resources and enable_Device</li>

<li>VFS?VM - mmap/write deadlock (demo code seems to show lock is there)</li>

<li>rw sempahores on page faults (mmap_sem)</li>

<li>kiobuf seperate lock functions/bounce/page_address fixes</li>

<li>Fix routing by fwmark</li>

<li>Some FB drivers check the A000 area and find it busy then bomb out</li>

<li>rw semaphores on inodes to fix read/truncate races ? &#91;Probably
fixed&#93;</li>

<li>Not all device drivers are safe now the write inode lock isnt taken on write</li>

<li>File locking needs checking for races</li>

<li>Multiwrite IDE breaks on a disk error</li>

<li>AFFS doesn't work on current page cache</li>

<li>ACPI/APM suspend issue</li>

<li>NFS bugs are fixed</li>

<li>BusLogic crashes when you cant /proc/scsi/BusLogic/0</li>

<li>Floppy last block cache flush error</li>

<li>NFS causes dup kmem_create on reload</li>

<li>Quota exceeded can cause bogus files on disk (-1 bytes long)</li>

</ol>
</p>

</ol>
</p>

</quote>

<p>Alexander Viro replied to 1.14 (UMSDOS fixups resync), <quote who="Alexander
Viro">Sorry. Fixed in incoming patches, but -pre6-3 check_pseudo_root() is
b0rken.</quote> To 4.10 (Directory race fix for UFS), Alexander replied,
<quote who="Alexander Viro">What? It's fixed _long_ ago.</quote> To 6.1
(exec() returns wrong codes on a file not found), Alexander reported that
problem fixed as well. To 4.27 (Quota mount options are now broken), he
asked for details, and Alan replied that that was also an out of date bug.
There were a few other replies to Alan's list, but no discussion.</p>

</section>

</kc>
