diff -urN oldtree/MAINTAINERS newtree/MAINTAINERS
--- oldtree/MAINTAINERS	2006-01-02 22:21:10.000000000 -0500
+++ newtree/MAINTAINERS	2006-02-11 22:03:50.202469696 -0500
@@ -1651,6 +1651,12 @@
 L:	linux-scsi@vger.kernel.org
 S:	Maintained
 
+LUFS FILE SYSTEM
+P:	Florin Malita
+M:	mali@go.ro
+L:	lufs-devel@lists.sourceforge.net
+S:	Maintained
+
 M68K ARCHITECTURE
 P:	Geert Uytterhoeven
 M:	geert@linux-m68k.org
diff -urN oldtree/MAINTAINERS.orig newtree/MAINTAINERS.orig
--- oldtree/MAINTAINERS.orig	1969-12-31 19:00:00.000000000 -0500
+++ newtree/MAINTAINERS.orig	2006-01-02 22:21:10.000000000 -0500
@@ -0,0 +1,3025 @@
+
+	List of maintainers and how to submit kernel changes
+
+Please try to follow the guidelines below.  This will make things
+easier on the maintainers.  Not all of these guidelines matter for every
+trivial patch so apply some common sense.
+
+1.	Always _test_ your changes, however small, on at least 4 or
+	5 people, preferably many more.
+
+2.	Try to release a few ALPHA test versions to the net. Announce
+	them onto the kernel channel and await results. This is especially
+	important for device drivers, because often that's the only way
+	you will find things like the fact version 3 firmware needs
+	a magic fix you didn't know about, or some clown changed the
+	chips on a board and not its name.  (Don't laugh!  Look at the
+	SMC etherpower for that.)
+
+3.	Make sure your changes compile correctly in multiple
+	configurations. In particular check that changes work both as a
+	module and built into the kernel.
+
+4.	When you are happy with a change make it generally available for
+	testing and await feedback.
+
+5.	Make a patch available to the relevant maintainer in the list. Use
+	'diff -u' to make the patch easy to merge. Be prepared to get your
+	changes sent back with seemingly silly requests about formatting
+	and variable names.  These aren't as silly as they seem. One
+	job the maintainers (and especially Linus) do is to keep things
+	looking the same. Sometimes this means that the clever hack in
+	your driver to get around a problem actually needs to become a
+	generalized kernel feature ready for next time. See
+	Documentation/CodingStyle for guidance here.
+
+	PLEASE try to include any credit lines you want added with the
+	patch. It avoids people being missed off by mistake and makes
+	it easier to know who wants adding and who doesn't.
+
+	PLEASE document known bugs. If it doesn't work for everything
+	or does something very odd once a month document it.
+
+6.	Make sure you have the right to send any changes you make. If you
+	do changes at work you may find your employer owns the patch
+	not you.
+
+7.	Happy hacking.
+
+ 		-----------------------------------
+
+Maintainers List (try to look for most precise areas first)
+
+Note: For the hard of thinking, this list is meant to remain in alphabetical
+order. If you could add yourselves to it in alphabetical order that would be
+so much easier [Ed]
+
+P: Person
+M: Mail patches to
+L: Mailing list that is relevant to this area
+W: Web-page with status/info
+T: SCM tree type and location.  Type is one of: git, hg, quilt.
+S: Status, one of the following:
+
+	Supported:	Someone is actually paid to look after this.
+	Maintained:	Someone actually looks after it.
+	Odd Fixes:	It has a maintainer but they don't have time to do
+			much other than throw the odd patch in. See below..
+	Orphan:		No current maintainer [but maybe you could take the
+			role as you write your new code].
+	Obsolete:	Old code. Something tagged obsolete generally means
+			it has been replaced by a better system and you
+			should be using that.
+
+3C359 NETWORK DRIVER
+P:	Mike Phillips
+M:	mikep@linuxtr.net
+L:	netdev@vger.kernel.org
+L:	linux-tr@linuxtr.net
+W:	http://www.linuxtr.net
+S:	Maintained
+
+3C505 NETWORK DRIVER
+P:	Philip Blundell
+M:	philb@gnu.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+3CR990 NETWORK DRIVER
+P:	David Dillow
+M:	dave@thedillows.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+3W-XXXX ATA-RAID CONTROLLER DRIVER
+P:	Adam Radford
+M:	linuxraid@amcc.com
+L:	linux-scsi@vger.kernel.org
+W:	http://www.amcc.com
+S:	Supported
+
+3W-9XXX SATA-RAID CONTROLLER DRIVER
+P:	Adam Radford
+M:	linuxraid@amcc.com
+L:	linux-scsi@vger.kernel.org
+W:	http://www.amcc.com
+S:	Supported
+
+53C700 AND 53C700-66 SCSI DRIVER
+P:	James E.J. Bottomley
+M:	James.Bottomley@HansenPartnership.com
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+6PACK NETWORK DRIVER FOR AX.25
+P:	Andreas Koensgen
+M:	ajk@iehk.rwth-aachen.de
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+8139CP 10/100 FAST ETHERNET DRIVER
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+S:	Maintained
+
+8139TOO 10/100 FAST ETHERNET DRIVER
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+W:	http://sourceforge.net/projects/gkernel/
+S:	Maintained
+
+8169 10/100/1000 GIGABIT ETHERNET DRIVER
+P:	Francois Romieu
+M:	romieu@fr.zoreil.com
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
+P:	Russell King
+M:	rmk+serial@arm.linux.org.uk
+L:	linux-serial@vger.kernel.org
+W:	http://serial.sourceforge.net
+S:	Maintained
+
+8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
+P:	Paul Gortmaker
+M:	p_gortmaker@yahoo.com
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+A2232 SERIAL BOARD DRIVER
+P:	Enver Haase
+M:	ehaase@inf.fu-berlin.de
+M:	A2232@gmx.net
+L:	linux-m68k@lists.linux-m68k.org
+S:	Maintained
+
+AIO
+P:	Benjamin LaHaise
+M:	bcrl@kvack.org
+L:	linux-aio@kvack.org
+S:	Supported
+
+ACENIC DRIVER
+P:	Jes Sorensen
+M:	jes@trained-monkey.org
+L:	linux-acenic@sunsite.dk
+S:	Maintained
+
+ACI MIXER DRIVER
+P:	Robert Siemer
+M:	Robert.Siemer@gmx.de
+L:	linux-sound@vger.kernel.org
+W:	http://www.stud.uni-karlsruhe.de/~uh1b/
+S:	Maintained
+
+AACRAID SCSI RAID DRIVER
+P:	Adaptec OEM Raid Solutions
+L:	linux-scsi@vger.kernel.org
+W:	http://linux.dell.com/storage.shtml
+S:	Supported
+
+ACPI
+P:	Len Brown
+M:	len.brown@intel.com
+L:	acpi-devel@lists.sourceforge.net
+W:	http://acpi.sourceforge.net/
+T:	git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
+S:	Maintained
+
+AD1816 SOUND DRIVER
+P:	Thorsten Knabe
+M:	Thorsten Knabe <linux@thorsten-knabe.de>
+W:	http://linux.thorsten-knabe.de
+S:	Maintained
+
+AD1889 SOUND DRIVER
+P:	Kyle McMartin
+M:	kyle@parisc-linux.org
+P:	Thibaut Varene
+M:	T-Bone@parisc-linux.org
+W:	http://wiki.parisc-linux.org/AD1889
+L:	parisc-linux@lists.parisc-linux.org
+S:	Maintained
+
+ADM1025 HARDWARE MONITOR DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+ADT746X FAN DRIVER
+P:	Colin Leroy
+M:	colin@colino.net
+S:	Maintained
+
+AEDSP16 DRIVER
+P:	Riccardo Facchetti
+M:	fizban@tin.it
+S:	Maintained
+
+AFFS FILE SYSTEM
+P:	Roman Zippel
+M:	zippel@linux-m68k.org
+S:	Maintained
+
+AGPGART DRIVER
+P:	Dave Jones
+M:	davej@codemonkey.org.uk
+W:	http://www.codemonkey.org.uk/projects/agp/
+T:	git kernel.org:/pub/scm/linux/kernel/git/davej/agpgart.git
+S:	Maintained
+
+AHA152X SCSI DRIVER
+P:	Juergen E. Fischer
+M:	Juergen Fischer <fischer@norbit.de>
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+ALCATEL SPEEDTOUCH USB DRIVER
+P:	Duncan Sands
+M:	duncan.sands@free.fr
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.linux-usb.org/SpeedTouch/
+S:	Maintained
+
+ALI1563 I2C DRIVER
+P:	Rudolf Marek
+M:	r.marek@sh.cvut.cz
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+ALPHA PORT
+P:	Richard Henderson
+M:	rth@twiddle.net
+S:	Odd Fixes for 2.4; Maintained for 2.6.
+P:	Ivan Kokshaysky
+M:	ink@jurassic.park.msu.ru
+S:	Maintained for 2.4; PCI support for 2.6.
+
+APM DRIVER
+P:	Stephen Rothwell
+M:	sfr@canb.auug.org.au
+L:	linux-laptop@vger.kernel.org
+W:	http://www.canb.auug.org.au/~sfr/
+S:	Supported
+
+APPLETALK NETWORK LAYER
+P:	Arnaldo Carvalho de Melo
+M:	acme@conectiva.com.br
+S:	Maintained
+
+ARC FRAMEBUFFER DRIVER
+P:	Jaya Kumar
+M:	jayalk@intworks.biz
+S:	Maintained
+
+ARM26 ARCHITECTURE
+P:	Ian Molton
+M:	spyro@f2s.com
+S:	Maintained
+
+ARM26/ARCHIMEDES
+P:	Ian Molton
+M:	spyro@f2s.com
+S:	Maintained
+
+ARM26/A5000
+P:	John Appleby
+M:	john@dnsworld.co.uk
+S:	Maintained
+
+ARM MFM AND FLOPPY DRIVERS
+P:	Ian Molton
+M:	spyro@f2s.com
+S:	Maintained
+
+ARM/CORGI MACHINE SUPPORT
+P:	Richard Purdie
+M:	rpurdie@rpsys.net
+S:	Maintained
+
+ARM/TOSA MACHINE SUPPORT
+P:	Dirk Opfer
+M:	dirk@opfer-online.de
+S:	Maintained
+
+ARM/PLEB SUPPORT
+P:	Peter Chubb
+M:	pleb@gelato.unsw.edu.au
+W:	http://www.disy.cse.unsw.edu.au/Hardware/PLEB
+S:	Maintained
+
+ARM/PT DIGITAL BOARD PORT
+P:	Stefan Eletzhofer
+M:	stefan.eletzhofer@eletztrick.de
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+W:	http://www.arm.linux.org.uk/
+S:	Maintained
+
+ARM/SHARK MACHINE SUPPORT
+P:	Alexander Schulz
+M:	alex@shark-linux.de
+W:	http://www.shark-linux.de/shark.html
+S:	Maintained
+
+ARM/STRONGARM110 PORT
+P:	Russell King
+M:	rmk@arm.linux.org.uk
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+W:	http://www.arm.linux.org.uk/
+S:	Maintained
+
+ARM/S3C2410 ARM ARCHITECTURE
+P:	Ben Dooks
+M:	ben-s3c2410@fluff.org
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+W:	http://www.fluff.org/ben/linux/
+S:	Maintained
+
+ARM/S3C2440 ARM ARCHITECTURE
+P:	Ben Dooks
+M:	ben-s3c2440@fluff.org
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+W:	http://www.fluff.org/ben/linux/
+S:	Maintained
+
+ARPD SUPPORT
+P:	Jonathan Layes
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+ASUS ACPI EXTRAS DRIVER
+P:	Karol Kozimor
+M:	sziwan@users.sourceforge.net
+P:	Julien Lerouge
+M:	julien.lerouge@free.fr
+L:	acpi4asus-user@lists.sourceforge.net
+W:	http://sourceforge.net/projects/acpi4asus
+W:	http://julien.lerouge.free.fr
+S:	Maintained
+
+ATA OVER ETHERNET DRIVER
+P:	Ed L. Cashin
+M:	ecashin@coraid.com
+W:	http://www.coraid.com/support/linux
+S:	Supported
+
+ATM
+P:	Chas Williams
+M:	chas@cmf.nrl.navy.mil
+L:	linux-atm-general@lists.sourceforge.net
+W:	http://linux-atm.sourceforge.net
+S:	Maintained
+
+ATMEL WIRELESS DRIVER
+P:	Simon Kelley
+M:	simon@thekelleys.org.uk
+W:	http://www.thekelleys.org.uk/atmel
+W:	http://atmelwlandriver.sourceforge.net/
+S:	Maintained
+
+AUDIT SUBSYSTEM
+P:	David Woodhouse
+M:	dwmw2@infradead.org
+L:	linux-audit@redhat.com
+W:	http://people.redhat.com/sgrubb/audit/
+T:	git kernel.org:/pub/scm/linux/kernel/git/dwmw2/audit-2.6.git
+S:	Maintained
+
+AX.25 NETWORK LAYER
+P:	Ralf Baechle
+M:	ralf@linux-mips.org
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+BAYCOM/HDLCDRV DRIVERS FOR AX.25
+P:	Thomas Sailer
+M:	t.sailer@alumni.ethz.ch
+L:	linux-hams@vger.kernel.org
+W:	http://www.baycom.org/~tom/ham/ham.html
+S:	Maintained
+
+BEFS FILE SYSTEM
+P:	Sergey S. Kostyliov
+M:	rathamahata@php4.ru
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+BERKSHIRE PRODUCTS PC WATCHDOG DRIVER
+P:	Kenji Hollis
+W:	http://ftp.bitgate.com/pcwd/
+S:	Maintained
+
+BFS FILE SYSTEM
+P:	Tigran A. Aivazian
+M:	tigran@veritas.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+BLOCK LAYER
+P:	Jens Axboe
+M:	axboe@suse.de
+L:	linux-kernel@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
+S:	Maintained
+
+BLUETOOTH SUBSYSTEM
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+L:	bluez-devel@lists.sf.net
+W:	http://bluez.sf.net
+W:	http://www.bluez.org
+W:	http://www.holtmann.org/linux/bluetooth/
+T:	git kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
+S:	Maintained
+
+BLUETOOTH RFCOMM LAYER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+S:	Maintained
+
+BLUETOOTH BNEP LAYER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+S:	Maintained
+
+BLUETOOTH CMTP LAYER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HIDP LAYER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI UART DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+S:	Maintained
+
+BLUETOOTH HCI USB DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+S:	Maintained
+
+BLUETOOTH HCI BCM203X DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI BPA10X DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI BFUSB DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI DTL1 DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI BLUECARD DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI BT3C DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI BTUART DRIVER
+P:	Marcel Holtmann
+M:	marcel@holtmann.org
+S:	Maintained
+
+BLUETOOTH HCI VHCI DRIVER
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com
+S:	Maintained
+
+BONDING DRIVER
+P:   Chad Tindel
+M:   ctindel@users.sourceforge.net
+P:   Jay Vosburgh
+M:   fubar@us.ibm.com
+L:   bonding-devel@lists.sourceforge.net
+W:   http://sourceforge.net/projects/bonding/
+S:   Supported
+
+BROADBAND PROCESSOR ARCHITECTURE
+P:	Arnd Bergmann
+M:	arnd@arndb.de
+L:	linuxppc64-dev@ozlabs.org
+W:	http://linuxppc64.org
+S:	Supported
+
+BTTV VIDEO4LINUX DRIVER
+P:	Mauro Carvalho Chehab
+M:	mchehab@brturbo.com.br
+L:	video4linux-list@redhat.com
+W:	http://linuxtv.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
+S:	Maintained
+
+BUSLOGIC SCSI DRIVER
+P:	Leonard N. Zubkoff
+M:	Leonard N. Zubkoff <lnz@dandelion.com>
+L:	linux-scsi@vger.kernel.org
+W:	http://www.dandelion.com/Linux/
+S:	Maintained
+
+COMMON INTERNET FILE SYSTEM (CIFS)
+P:	Steve French
+M:	sfrench@samba.org
+L:	samba-technical@lists.samba.org
+W:	http://us1.samba.org/samba/Linux_CIFS_client.html
+T:	git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
+S:	Supported	
+
+CIRRUS LOGIC GENERIC FBDEV DRIVER
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Odd Fixes
+
+CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
+P:	Cirrus Logic Corporation (kernel 2.2 driver)
+M:	Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com>
+P:	Nils Faerber (port to kernel 2.4)
+M:	Nils Faerber <nils@kernelconcepts.de>
+S:	Maintained
+
+CODA FILE SYSTEM
+P:	Jan Harkes
+M:	jaharkes@cs.cmu.edu
+M:	coda@cs.cmu.edu
+L:	codalist@coda.cs.cmu.edu
+W:	http://www.coda.cs.cmu.edu/
+S:	Maintained
+
+COMPACTPCI HOTPLUG CORE
+P:	Scott Murray
+M:	scottm@somanetworks.com
+M:	scott@spiteful.org
+L:	pcihpd-discuss@lists.sourceforge.net
+S:	Supported
+
+COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER
+P:	Scott Murray
+M:	scottm@somanetworks.com
+M:	scott@spiteful.org
+L:	pcihpd-discuss@lists.sourceforge.net
+S:	Supported
+
+COMPACTPCI HOTPLUG GENERIC DRIVER
+P:	Scott Murray
+M:	scottm@somanetworks.com
+M:	scott@spiteful.org
+L:	pcihpd-discuss@lists.sourceforge.net
+S:	Supported
+
+COMPUTONE INTELLIPORT MULTIPORT CARD
+P:	Michael H. Warfield
+M:	mhw@wittsend.com
+W:	http://www.wittsend.com/computone.html
+S:	Maintained
+
+COSA/SRP SYNC SERIAL DRIVER
+P:	Jan "Yenya" Kasprzak
+M:	kas@fi.muni.cz
+W:	http://www.fi.muni.cz/~kas/cosa/
+S:	Maintained
+
+CPU FREQUENCY DRIVERS
+P:	Dave Jones
+M:	davej@codemonkey.org.uk
+L:	cpufreq@lists.linux.org.uk
+W:	http://www.codemonkey.org.uk/projects/cpufreq/
+T:	git kernel.org/pub/scm/linux/kernel/davej/cpufreq.git
+S:	Maintained
+
+CPUID/MSR DRIVER
+P:	H. Peter Anvin
+M:	hpa@zytor.com
+S:	Maintained
+
+CPUSETS
+P:	Paul Jackson
+P:	Simon Derr
+M:	pj@sgi.com
+M:	simon.derr@bull.net
+L:	linux-kernel@vger.kernel.org
+W:	http://www.bullopensource.org/cpuset/
+S:	Supported
+
+CRAMFS FILESYSTEM
+W:     http://sourceforge.net/projects/cramfs/
+S:     Orphan
+
+CRIS PORT
+P:	Mikael Starvik
+M:	starvik@axis.com
+L:	dev-etrax@axis.com
+W:	http://developer.axis.com
+S:	Maintained
+
+CRYPTO API
+P:	Herbert Xu
+M:	herbert@gondor.apana.org.au
+P:	David S. Miller
+M:	davem@davemloft.net
+L:	linux-crypto@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
+S:	Maintained
+
+CYBERPRO FB DRIVER
+P:	Russell King
+M:	rmk@arm.linux.org.uk
+W:	http://www.arm.linux.org.uk/
+S:	Maintained
+
+CYBLAFB FRAMEBUFFER DRIVER
+P:	Knut Petersen
+M:	Knut_Petersen@t-online.de
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Maintained
+
+CYCLADES 2X SYNC CARD DRIVER
+P:	Arnaldo Carvalho de Melo
+M:	acme@conectiva.com.br
+W:	http://advogato.org/person/acme
+L:	cycsyn-devel@bazar.conectiva.com.br
+S:	Maintained
+
+CYCLADES ASYNC MUX DRIVER
+M:	async@cyclades.com
+W:	http://www.cyclades.com/
+S:	Supported
+
+CYCLADES PC300 DRIVER
+M:	pc300@cyclades.com
+W:	http://www.cyclades.com/
+S:	Supported
+
+DAC960 RAID CONTROLLER DRIVER
+P:	Dave Olien
+M	dmo@osdl.org
+W:	http://www.osdl.org/archive/dmo/DAC960
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+DAMA SLAVE for AX.25
+P:	Joerg Reuter
+M:	jreuter@yaina.de
+W:	http://yaina.de/jreuter/
+W:	http://www.qsl.net/dl1bke/
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+DC395x SCSI driver
+P:	Oliver Neukum
+M:	oliver@neukum.name
+P:	Ali Akcaagac
+M:	aliakc@web.de
+P:	Jamie Lenehan
+M:	lenehan@twibble.org
+W:	http://twibble.org/dist/dc395x/
+L:	http://lists.twibble.org/mailman/listinfo/dc395x/
+S:	Maintained
+
+DC390/AM53C974 SCSI driver
+P:	Kurt Garloff
+M:	garloff@suse.de
+W:	http://www.garloff.de/kurt/linux/dc390/
+P:	Guennadi Liakhovetski
+M:	g.liakhovetski@gmx.de
+S:	Maintained
+
+DCCP PROTOCOL
+P:	Arnaldo Carvalho de Melo
+M:	acme@mandriva.com
+L:	dccp@vger.kernel.org
+W:	http://linux-net.osdl.org/index.php/DCCP
+S:	Maintained
+
+DECnet NETWORK LAYER
+P:	Patrick Caulfield
+M:	patrick@tykepenguin.com
+W:	http://linux-decnet.sourceforge.net
+L:	linux-decnet-user@lists.sourceforge.net
+S:	Maintained
+
+DEFXX FDDI NETWORK DRIVER
+P:	Maciej W. Rozycki
+M:	macro@linux-mips.org
+S:	Maintained
+
+DELL LAPTOP SMM DRIVER
+P:	Massimo Dal Zotto
+M:	dz@debian.org
+W:	http://www.debian.org/~dz/i8k/
+S:	Maintained
+
+DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
+P:	Doug Warzecha
+M:	Douglas_Warzecha@dell.com
+S:	Maintained
+
+DEVICE-MAPPER
+P:	Alasdair Kergon
+L:	dm-devel@redhat.com
+W:	http://sources.redhat.com/dm
+S:	Maintained
+
+DEVICE NUMBER REGISTRY
+P:	Torben Mathiasen
+M:	device@lanana.org
+W:	http://lanana.org/docs/device-list/index.html
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+DEVICE FILESYSTEM
+S:	Obsolete
+
+DIGI INTL. EPCA DRIVER
+P:	Digi International, Inc
+M:	Eng.Linux@digi.com
+L:	Eng.Linux@digi.com
+W:	http://www.digi.com
+S:	Orphaned
+
+DIGI RIGHTSWITCH NETWORK DRIVER
+P:	Rick Richardson
+L:	netdev@vger.kernel.org
+W:	http://www.digi.com
+S:	Orphaned
+
+DIRECTORY NOTIFICATION
+P:	Stephen Rothwell
+M:	sfr@canb.auug.org.au
+L:	linux-kernel@vger.kernel.org
+S:	Supported
+
+DISK GEOMETRY AND PARTITION HANDLING
+P:	Andries Brouwer
+M:	aeb@cwi.nl
+W:	http://www.win.tue.nl/~aeb/linux/Large-Disk.html
+W:	http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
+W:	http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
+S:	Maintained
+
+DISKQUOTA:
+P:	Jan Kara
+M:	jack@suse.cz
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
+P:	Tobias Ringstrom
+M:	tori@unhappy.mine.nu
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+DOCBOOK FOR DOCUMENTATION
+P:	Martin Waitz
+M:	tali@admingilde.org
+S:	Maintained
+
+DOUBLETALK DRIVER
+P:	James R. Van Zandt
+M:	jrv@vanzandt.mv.com
+L:	blinux-list@redhat.com
+S:	Maintained
+
+DRIVER CORE, KOBJECTS, AND SYSFS
+P:	Greg Kroah-Hartman
+M:	gregkh@suse.de
+L:	linux-kernel@vger.kernel.org
+T:	quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
+S:	Supported
+
+DRM DRIVERS
+P:	David Airlie
+M:	airlied@linux.ie
+L:	dri-devel@lists.sourceforge.net
+T:	git kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
+S:	Maintained
+
+DSCC4 DRIVER
+P:	François Romieu
+M:	romieu@cogenit.fr
+M:	romieu@ensta.fr
+S:	Maintained
+
+DVB SUBSYSTEM AND DRIVERS
+P:	LinuxTV.org Project
+M: 	linux-dvb-maintainer@linuxtv.org
+L: 	linux-dvb@linuxtv.org (subscription required)
+W:	http://linuxtv.org/
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
+S:	Supported
+
+EATA-DMA SCSI DRIVER
+P:	Michael Neuffer
+L:	linux-eata@i-connect.net, linux-scsi@vger.kernel.org
+S:	Maintained
+
+EATA ISA/EISA/PCI SCSI DRIVER
+P:	Dario Ballabio
+M:	ballabio_dario@emc.com
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+EATA-PIO SCSI DRIVER
+P:	Michael Neuffer
+M:	mike@i-Connect.Net
+L:	linux-eata@i-connect.net, linux-scsi@vger.kernel.org
+S:	Maintained
+
+EBTABLES
+P:	Bart De Schuymer
+M:	bart.de.schuymer@pandora.be
+L:	ebtables-user@lists.sourceforge.net
+L:	ebtables-devel@lists.sourceforge.net
+W:	http://ebtables.sourceforge.net/
+S:	Maintained
+
+EEPRO100 NETWORK DRIVER
+P:	Andrey V. Savochkin
+M:	saw@saw.sw.com.sg
+S:	Maintained
+
+EMU10K1 SOUND DRIVER
+P:	James Courtier-Dutton
+M:	James@superbug.demon.co.uk
+L:	emu10k1-devel@lists.sourceforge.net
+W:	http://sourceforge.net/projects/emu10k1/
+S:	Maintained
+
+EMULEX LPFC FC SCSI DRIVER
+P:      James Smart
+M:      james.smart@emulex.com
+L:      linux-scsi@vger.kernel.org
+W:      http://sourceforge.net/projects/lpfcxxxx
+S:      Supported
+
+EPSON 1355 FRAMEBUFFER DRIVER
+P:	Christopher Hoover
+M:	ch@murgatroid.com, ch@hpl.hp.com
+S:	Maintained
+
+ETHEREXPRESS-16 NETWORK DRIVER
+P:	Philip Blundell
+M:	philb@gnu.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+ETHERNET BRIDGE
+P:	Stephen Hemminger
+M:	shemminger@osdl.org
+L:	bridge@osdl.org
+W:	http://bridge.sourceforge.net/
+S:	Maintained
+
+ETHERTEAM 16I DRIVER
+P:	Mika Kuoppala
+M:	miku@iki.fi
+S:	Maintained
+
+EXT2 FILE SYSTEM
+L:	ext2-devel@lists.sourceforge.net
+S:	Maintained
+
+EXT3 FILE SYSTEM
+P:	Stephen Tweedie, Andrew Morton
+M:	sct@redhat.com, akpm@osdl.org, adilger@clusterfs.com
+L:	ext3-users@redhat.com
+S:	Maintained
+
+FARSYNC SYNCHRONOUS DRIVER
+P:	Kevin Curtis
+M:	kevin.curtis@farsite.co.uk
+M:	kevin.curtis@farsite.co.uk
+W:	http://www.farsite.co.uk/
+S:	Supported
+
+FRAMEBUFFER LAYER
+P:	Antonino Daplas
+M:	adaplas@pol.net
+L:	linux-fbdev-devel@lists.sourceforge.net	
+W:	http://linux-fbdev.sourceforge.net/
+S:	Maintained
+
+FREESCALE SOC FS_ENET DRIVER
+P:	Pantelis Antoniou
+M:	pantelis.antoniou@gmail.com
+P:	Vitaly Bordug
+M:	vbordug@ru.mvista.com
+L:	linuxppc-embedded@ozlabs.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+FILE LOCKING (flock() and fcntl()/lockf())
+P:	Matthew Wilcox
+M:	matthew@wil.cx
+L:	linux-fsdevel@vger.kernel.org
+S:	Maintained
+
+FILESYSTEMS (VFS and infrastructure)
+P:	Alexander Viro
+M:	viro@zeniv.linux.org.uk
+S:	Maintained
+
+FIRMWARE LOADER (request_firmware)
+L:	linux-kernel@vger.kernel.org
+S:	Orphan
+
+FPU EMULATOR
+P:	Bill Metzenthen
+M:	billm@suburbia.net
+W:	http://suburbia.net/~billm/floating-point/emulator/
+S:	Maintained
+
+FRAME RELAY DLCI/FRAD (Sangoma drivers too)
+P:	Mike McLagan
+M:	mike.mclagan@linux.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+FREEVXFS FILESYSTEM
+P:	Christoph Hellwig
+M:	hch@infradead.org
+W:	ftp://ftp.openlinux.org/pub/people/hch/vxfs
+S:	Maintained
+
+FUJITSU FR-V PORT
+P:	David Howells
+M:	dhowells@redhat.com
+S:	Maintained
+
+FTAPE/QIC-117
+L:	linux-tape@vger.kernel.org
+W:	http://sourceforge.net/projects/ftape
+S:	Orphan
+
+FUSE: FILESYSTEM IN USERSPACE
+P:	Miklos Szeredi
+M:	miklos@szeredi.hu
+L:	fuse-devel@lists.sourceforge.net
+W:	http://fuse.sourceforge.net/
+S:	Maintained
+
+FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
+P:	Rik Faith
+M:	faith@cs.unc.edu
+L:	linux-scsi@vger.kernel.org
+S:	Odd fixes (e.g., new signatures)
+
+GDT SCSI DISK ARRAY CONTROLLER DRIVER
+P:	Achim Leubner
+M:	achim_leubner@adaptec.com
+L:	linux-scsi@vger.kernel.org
+W:	http://www.icp-vortex.com/
+S:	Supported
+
+GENERIC HDLC DRIVER, N2, C101, PCI200SYN and WANXL DRIVERS
+P:	Krzysztof Halasa
+M:	khc@pm.waw.pl
+W:	http://www.kernel.org/pub/linux/utils/net/hdlc/
+S:	Maintained
+
+HARDWARE MONITORING
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+W:	http://www.lm-sensors.nu/
+S:	Maintained
+
+HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
+P:	Robert Love
+M:	rlove@rlove.org
+M:	linux-kernel@vger.kernel.org
+W:	http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
+S:	Maintained
+
+HARMONY SOUND DRIVER
+P:	Kyle McMartin
+M:	kyle@parisc-linux.org
+W:	http://www.parisc-linux.org/~kyle/harmony/
+L:	parisc-linux@lists.parisc-linux.org
+S:	Maintained
+
+HAYES ESP SERIAL DRIVER
+P:	Andrew J. Robinson
+M:	arobinso@nyx.net
+L:	linux-kernel@vger.kernel.org
+W:	http://www.nyx.net/~arobinso
+S:	Maintained
+
+HFS FILESYSTEM
+P:	Roman Zippel
+M:	zippel@linux-m68k.org
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+HGA FRAMEBUFFER DRIVER
+P:	Ferenc Bakonyi
+M:	fero@drama.obuda.kando.hu
+L:	linux-nvidia@lists.surfsouth.com
+W:	http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml
+S:	Maintained
+
+HIGH-SPEED SCC DRIVER FOR AX.25
+P:	Klaus Kudielka
+M:	klaus.kudielka@ieee.org
+L:	linux-hams@vger.kernel.org
+W:	http://www.nt.tuwien.ac.at/~kkudielk/Linux/
+S:	Maintained
+
+HIPPI
+P:	Jes Sorensen
+M:	jes@trained-monkey.org
+L:	linux-hippi@sunsite.dk
+S:	Maintained
+
+HEWLETT-PACKARD FIBRE CHANNEL 64-bit/66MHz PCI non-intelligent HBA
+P:	Chirag Kantharia
+M:	chirag.kantharia@hp.com
+L:	iss_storagedev@hp.com
+S:	Maintained
+ 
+HEWLETT-PACKARD SMART2 RAID DRIVER
+P:	Chirag Kantharia
+M:	chirag.kantharia@hp.com
+L:	iss_storagedev@hp.com
+S:	Maintained
+ 
+HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
+P:	Mike Miller
+M:	mike.miller@hp.com
+L:	iss_storagedev@hp.com
+S:	Supported
+ 
+HOST AP DRIVER
+P:	Jouni Malinen
+M:	jkmaline@cc.hut.fi
+L:	hostap@shmoo.com
+W:	http://hostap.epitest.fi/
+S:	Maintained
+
+HP100:	Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
+P:	Jaroslav Kysela
+M:	perex@suse.cz
+S:	Maintained
+
+HPET:	High Precision Event Timers driver (hpet.c)
+P:	Clemens Ladisch
+M:	clemens@ladisch.de
+S:	Maintained
+
+HPET:	i386
+P:	Venkatesh Pallipadi (Venki)
+M:	venkatesh.pallipadi@intel.com
+S:	Maintained
+
+HPET:	x86_64
+P:	Andi Kleen and Vojtech Pavlik
+M:	ak@muc.de and vojtech@suse.cz
+S:	Maintained
+
+HPET:	ACPI hpet.c
+P:	Bob Picco
+M:	bob.picco@hp.com
+S:	Maintained
+
+HPFS FILESYSTEM
+P:	Mikulas Patocka
+M:	mikulas@artax.karlin.mff.cuni.cz
+W:	http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
+S:	Maintained
+
+HUGETLB FILESYSTEM
+P:	William Irwin
+M:	wli@holomorphy.com
+S:	Maintained
+
+I2C SUBSYSTEM
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+W:	http://www.lm-sensors.nu/
+T:	quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
+S:	Maintained
+
+I2O
+P:	Markus Lidel
+M:	markus.lidel@shadowconnect.com
+W:	http://i2o.shadowconnect.com/
+S:	Maintained
+
+i386 BOOT CODE
+P:	Riley H. Williams
+M:	Riley@Williams.Name
+L:	Linux-Kernel@vger.kernel.org
+S:	Maintained
+
+i386 SETUP CODE / CPU ERRATA WORKAROUNDS
+P:	Dave Jones
+M:	davej@codemonkey.org.uk
+P:	H. Peter Anvin
+M:	hpa@zytor.com
+S:	Maintained
+
+i810 TCO TIMER WATCHDOG
+P:	Nils Faerber
+M:	nils@kernelconcepts.de
+W:	http://www.kernelconcepts.de/
+S:	Maintained
+
+IA64 (Itanium) PLATFORM
+P:	Tony Luck
+M:	tony.luck@intel.com
+L:	linux-ia64@vger.kernel.org
+W:	http://www.ia64-linux.org/
+T:	git kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
+S:	Maintained
+
+SN-IA64 (Itanium) SUB-PLATFORM
+P:	Greg Edwards
+M:	edwardsg@sgi.com
+L:	linux-altix@sgi.com
+L:	linux-ia64@vger.kernel.org
+W:	http://www.sgi.com/altix
+S:	Maintained
+
+IBM MCA SCSI SUBSYSTEM DRIVER
+P:	Michael Lang
+M:	langa2@kph.uni-mainz.de
+W:	http://www.uni-mainz.de/~langm000/linux.html
+S:	Maintained
+
+IBM Power Linux RAID adapter
+P:	Brian King
+M:	brking@us.ibm.com
+S:	Supported
+
+IBM ServeRAID RAID DRIVER
+P:	Jack Hammer
+P:	Dave Jeffery
+M:	ipslinux@adaptec.com
+W:	http://www.developer.ibm.com/welcome/netfinity/serveraid.html
+S:	Supported 
+
+IDE DRIVER [GENERAL]
+P:	Bartlomiej Zolnierkiewicz
+M:	B.Zolnierkiewicz@elka.pw.edu.pl
+L:	linux-kernel@vger.kernel.org
+L:	linux-ide@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git
+S:	Maintained
+
+IDE/ATAPI CDROM DRIVER
+P:	Jens Axboe
+M:	axboe@suse.de
+L:	linux-kernel@vger.kernel.org
+W:	http://www.kernel.dk
+S:	Maintained
+
+IDE/ATAPI FLOPPY DRIVERS
+P:	Paul Bristow
+M:	Paul Bristow <paul@paulbristow.net>
+W:	http://paulbristow.net/linux/idefloppy.html
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+IDE/ATAPI TAPE DRIVERS
+P:	Gadi Oxman
+M:	Gadi Oxman <gadio@netvision.net.il>
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+IEEE 1394 ETHERNET (eth1394)
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+S:	Orphan
+
+IEEE 1394 SUBSYSTEM
+P:	Ben Collins
+M:	bcollins@debian.org
+P:	Jody McIntyre
+M:	scjody@steamballoon.com
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+T:	git kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
+S:	Maintained
+
+IEEE 1394 OHCI DRIVER
+P:	Ben Collins
+M:	bcollins@debian.org
+P:	Jody McIntyre
+M:	scjody@steamballoon.com
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+S:	Maintained
+
+IEEE 1394 PCILYNX DRIVER
+P:	Jody McIntyre
+M:	scjody@steamballoon.com
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+S:	Maintained
+
+IEEE 1394 RAW I/O DRIVER
+P:	Ben Collins
+M:	bcollins@debian.org
+P:	Dan Dennedy
+M:	dan@dennedy.org
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+S:	Maintained
+
+IEEE 1394 SBP2
+P:	Ben Collins
+M:	bcollins@debian.org
+P:	Stefan Richter
+M:	stefanr@s5r6.in-berlin.de
+L:	linux1394-devel@lists.sourceforge.net
+W:	http://www.linux1394.org/
+S:	Maintained
+
+IMS TWINTURBO FRAMEBUFFER DRIVER
+P:	Paul Mundt
+M:	lethal@chaoticdreams.org
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Maintained
+
+INFINIBAND SUBSYSTEM
+P:	Roland Dreier
+M:	rolandd@cisco.com
+P:	Sean Hefty
+M:	mshefty@ichips.intel.com
+P:	Hal Rosenstock
+M:	halr@voltaire.com
+L:	openib-general@openib.org
+W:	http://www.openib.org/
+T:	git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
+S:	Supported
+
+INPUT (KEYBOARD, MOUSE, JOYSTICK) DRIVERS
+P:	Dmitry Torokhov
+M:	dtor_core@ameritech.net
+L:	linux-input@atrey.karlin.mff.cuni.cz
+L:	linux-joystick@atrey.karlin.mff.cuni.cz
+T:	git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
+S:	Maintained
+
+INOTIFY
+P:	John McCutchan and Robert Love
+M:	ttb@tentacle.dhs.org and rml@novell.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+INTEL 810/815 FRAMEBUFFER DRIVER
+P:      Antonino Daplas
+M:      adaplas@pol.net
+L:      linux-fbdev-devel@lists.sourceforge.net
+S:      Maintained
+
+INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT
+P:	Ingo Molnar
+M:	mingo@redhat.com
+S:	Maintained
+
+INTEL I8XX RANDOM NUMBER GENERATOR SUPPORT
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+W:	http://sourceforge.net/projects/gkernel/
+S:	Maintained
+
+INTEL IA32 MICROCODE UPDATE SUPPORT
+P:	Tigran Aivazian
+M:	tigran@veritas.com
+S:	Maintained
+
+INTEL PRO/100 ETHERNET SUPPORT
+P:	John Ronciak
+M:	john.ronciak@intel.com
+P:	Ganesh Venkatesan
+M:	ganesh.venkatesan@intel.com
+P:	Jesse Brandeburg
+M:	jesse.brandeburg@intel.com
+W:	http://sourceforge.net/projects/e1000/
+S:	Supported
+
+INTEL PRO/1000 GIGABIT ETHERNET SUPPORT
+P:	Jeb Cramer
+M:	cramerj@intel.com
+P:	John Ronciak
+M:	john.ronciak@intel.com
+P:	Ganesh Venkatesan
+M:	ganesh.venkatesan@intel.com
+W:	http://sourceforge.net/projects/e1000/
+S:	Supported
+
+INTEL PRO/10GbE SUPPORT
+P:	Ayyappan Veeraiyan
+M:	ayyappan.veeraiyan@intel.com
+P:	Ganesh Venkatesan
+M:	ganesh.venkatesan@intel.com
+P:	John Ronciak
+M:	john.ronciak@intel.com
+W:	http://sourceforge.net/projects/e1000/
+S:	Supported
+
+INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
+P:	Yi Zhu
+M:	yi.zhu@intel.com
+P:	James Ketrenos
+M:	jketreno@linux.intel.com
+L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
+W:	http://ipw2100.sourceforge.net
+S:	Supported
+
+INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
+P:	Yi Zhu
+M:	yi.zhu@intel.com
+P:	James Ketrenos
+M:	jketreno@linux.intel.com
+L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
+W:	http://ipw2200.sourceforge.net
+S:	Supported
+
+IOC3 DRIVER
+P:	Ralf Baechle
+M:	ralf@linux-mips.org
+L:	linux-mips@linux-mips.org
+S:	Maintained
+
+IP MASQUERADING:
+P:	Juanjo Ciarlante
+M:	jjciarla@raiz.uncu.edu.ar
+S:	Maintained
+
+IPX NETWORK LAYER
+P:	Arnaldo Carvalho de Melo
+M:	acme@conectiva.com.br
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+IRDA SUBSYSTEM
+P:	Jean Tourrilhes
+L:	irda-users@lists.sourceforge.net (subscribers-only)
+W:	http://irda.sourceforge.net/
+S:	Maintained
+
+ISAPNP
+P:	Jaroslav Kysela
+M:	perex@suse.cz
+S:	Maintained
+
+ISDN SUBSYSTEM
+P:	Karsten Keil
+M:	kkeil@suse.de
+P:	Kai Germaschewski
+M:	kai.germaschewski@gmx.de
+L:	isdn4linux@listserv.isdn4linux.de
+W:	http://www.isdn4linux.de
+T:	git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
+S:	Maintained
+
+ISDN SUBSYSTEM (Eicon active card driver)
+P:	Armin Schindler
+M:	mac@melware.de
+L:	isdn4linux@listserv.isdn4linux.de
+W:	http://www.melware.de
+S:	Maintained
+
+JOURNALLING FLASH FILE SYSTEM (JFFS)
+P:	Axis Communications AB
+M:	jffs-dev@axis.com
+L:	jffs-dev@axis.com
+W:	http://www.developer.axis.com/software/jffs/
+S:	Maintained
+
+JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
+P:	David Woodhouse
+M:	dwmw2@infradead.org
+L:	jffs-dev@axis.com
+W:	http://sources.redhat.com/jffs2/
+S:	Maintained
+
+JFS FILESYSTEM
+P:	Dave Kleikamp
+M:	shaggy@austin.ibm.com
+L:	jfs-discussion@lists.sourceforge.net
+W:	http://jfs.sourceforge.net/
+T:	git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
+S:	Supported
+
+KCONFIG
+P:	Roman Zippel
+M:	zippel@linux-m68k.org
+L:	kbuild-devel@lists.sourceforge.net
+S:	Maintained
+
+KERNEL AUTOMOUNTER (AUTOFS)
+P:	H. Peter Anvin
+M:	hpa@zytor.com
+L:	autofs@linux.kernel.org
+S:	Odd Fixes
+
+KERNEL AUTOMOUNTER v4 (AUTOFS4)
+P:	Ian Kent
+M:	raven@themaw.net
+L:	autofs@linux.kernel.org
+S:	Maintained
+
+KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*)
+P:	Kai Germaschewski
+M:	kai@germaschewski.name
+P:	Sam Ravnborg
+M:	sam@ravnborg.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git
+S:	Maintained 
+
+KERNEL JANITORS
+P:	Several
+L:	kernel-janitors@osdl.org
+W:	http://www.kerneljanitors.org/
+W:	http://sf.net/projects/kernel-janitor/
+W:	http://developer.osdl.org/rddunlap/kj-patches/
+S:	Maintained
+
+KERNEL NFSD
+P:	Neil Brown
+M:	neilb@cse.unsw.edu.au
+L:	nfs@lists.sourceforge.net
+W:	http://nfs.sourceforge.net/
+W:	http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/
+S:	Maintained
+
+KERNEL EVENT LAYER (KOBJECT_UEVENT)
+P:	Robert Love
+M:	rml@novell.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+KEXEC
+P:	Eric Biederman
+P:	Randy Dunlap
+M:	ebiederm@xmission.com
+M:	rddunlap@osdl.org
+W:	http://www.xmission.com/~ebiederm/files/kexec/
+L:	linux-kernel@vger.kernel.org
+L:	fastboot@osdl.org
+S:	Maintained
+
+KPROBES
+P:	Prasanna S Panchamukhi
+M:	prasanna@in.ibm.com
+P:	Ananth N Mavinakayanahalli
+M:	ananth@in.ibm.com
+P:	Anil S Keshavamurthy
+M:	anil.s.keshavamurthy@intel.com
+P:	David S. Miller
+M:	davem@davemloft.net
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+LANMEDIA WAN CARD DRIVER
+P:	Andrew Stanley-Jones
+M:	asj@lanmedia.com
+W:	http://www.lanmedia.com/
+S:	Supported
+ 
+LAPB module
+P:	Henner Eisen
+M:	eis@baty.hanse.de
+L:	linux-x25@vger.kernel.org
+S:	Maintained
+
+LASI 53c700 driver for PARISC
+P:	James E.J. Bottomley
+M:	James.Bottomley@HansenPartnership.com
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+LEGO USB Tower driver
+P:	Juergen Stuber
+M:	starblue@users.sourceforge.net
+L:	legousb-devel@lists.sourceforge.net
+W:	http://legousb.sourceforge.net/
+S:	Maintained
+
+LINUX FOR IBM pSERIES (RS/6000)
+P:	Paul Mackerras
+M:	paulus@au.ibm.com
+W:	http://www.ibm.com/linux/ltc/projects/ppc
+S:	Supported
+
+LINUX FOR NCR VOYAGER
+P:	James Bottomley
+M:	James.Bottomley@HansenPartnership.com
+W:	http://www.hansenpartnership.com/voyager
+S:	Maintained
+
+LINUX FOR POWERPC
+P:	Paul Mackerras
+M:	paulus@samba.org
+W:	http://www.penguinppc.org/
+L:	linuxppc-dev@ozlabs.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc.git
+S:	Supported
+
+LINUX FOR POWER MACINTOSH
+P:	Benjamin Herrenschmidt
+M:	benh@kernel.crashing.org
+W:	http://www.penguinppc.org/
+L:	linuxppc-dev@ozlabs.org
+S:	Maintained
+
+LINUX FOR POWERPC EMBEDDED MPC52XX
+P:	Sylvain Munaut
+M:	tnt@246tNt.com
+W:	http://www.246tNt.com/mpc52xx/
+W:	http://www.penguinppc.org/
+L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-embedded@ozlabs.org
+S:	Maintained
+
+LINUX FOR POWERPC EMBEDDED PPC4XX
+P:	Matt Porter
+M:	mporter@kernel.crashing.org
+W:	http://www.penguinppc.org/
+L:	linuxppc-embedded@ozlabs.org
+S:	Maintained
+
+LINUX FOR POWERPC BOOT CODE
+P:	Tom Rini
+M:	trini@kernel.crashing.org
+W:	http://www.penguinppc.org/
+L:	linuxppc-embedded@ozlabs.org
+S:	Maintained
+
+LINUX FOR POWERPC EMBEDDED PPC8XX
+P:	Marcelo Tosatti
+M:	marcelo.tosatti@cyclades.com
+W:	http://www.penguinppc.org/
+L:	linuxppc-embedded@ozlabs.org
+S:	Maintained
+
+LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
+P:     Kumar Gala
+M:     galak@kernel.crashing.org
+W:     http://www.penguinppc.org/
+L:     linuxppc-embedded@ozlabs.org
+S:     Maintained
+
+LLC (802.2)
+P:	Arnaldo Carvalho de Melo
+M:	acme@conectiva.com.br
+S:	Maintained
+
+LINUX FOR 64BIT POWERPC
+P:	Paul Mackerras
+M:	paulus@samba.org
+M:	paulus@au.ibm.com
+P:	Anton Blanchard
+M:	anton@samba.org
+M:	anton@au.ibm.com
+W:	http://linuxppc64.org
+L:	linuxppc64-dev@ozlabs.org
+S:	Supported
+
+LINUX SECURITY MODULE (LSM) FRAMEWORK
+P:	Chris Wright
+M:	chrisw@osdl.org
+L:	linux-security-module@wirex.com
+W:	http://lsm.immunix.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git
+S:	Supported
+
+LM83 HARDWARE MONITOR DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+LM90 HARDWARE MONITOR DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP Dynamic Disks)
+P:	Richard Russon (FlatCap)
+M:	ldm@flatcap.org
+L:	ldm-devel@lists.sourceforge.net	
+W:	http://ldm.sourceforge.net
+S:	Maintained
+
+LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
+P:	Eric Moore
+M:	Eric.Moore@lsil.com
+M:	support@lsil.com
+L:	mpt_linux_developer@lsil.com
+L:	linux-scsi@vger.kernel.org
+W:	http://www.lsilogic.com/support
+S:	Supported
+
+LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers
+P:	Matthew Wilcox
+M:	matthew@wil.cx
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+M68K ARCHITECTURE
+P:	Geert Uytterhoeven
+M:	geert@linux-m68k.org
+P:	Roman Zippel
+M:	zippel@linux-m68k.org
+L:	linux-m68k@lists.linux-m68k.org
+W:	http://www.linux-m68k.org/
+W:	http://linux-m68k-cvs.ubb.ca/
+S:	Maintained
+
+M68K ON APPLE MACINTOSH
+P:	Joshua Thompson
+M:	funaho@jurai.org
+W:	http://www.mac.linux-m68k.org/
+L:	linux-mac68k@mac.linux-m68k.org
+S:	Maintained
+
+M68K ON HP9000/300
+P:	Philip Blundell
+M:	philb@gnu.org
+W:	http://www.tazenda.demon.co.uk/phil/linux-hp
+S:	Maintained
+
+MARVELL YUKON / SYSKONNECT DRIVER
+P:	Mirko Lindner
+M: 	mlindner@syskonnect.de
+P:	Ralph Roesler
+M: 	rroesler@syskonnect.de
+W: 	http://www.syskonnect.com
+S: 	Supported
+
+MAESTRO PCI SOUND DRIVERS
+P:	Zach Brown
+M:	zab@zabbo.net
+S:	Odd Fixes
+
+MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
+P: Michael Kerrisk
+M: mtk-manpages@gmx.net
+W: ftp://ftp.kernel.org/pub/linux/docs/manpages
+S: Maintained
+
+MARVELL MV64340 ETHERNET DRIVER
+P:	Manish Lachwani
+M:	Manish_Lachwani@pmc-sierra.com
+L:	linux-mips@linux-mips.org
+L:	netdev@vger.kernel.org
+S:	Supported
+
+MATROX FRAMEBUFFER DRIVER
+P:	Petr Vandrovec
+M:	vandrove@vc.cvut.cz
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Maintained
+
+MEGARAID SCSI DRIVERS
+P:     Neela Syam Kolli
+M:     Neela.Kolli@engenio.com
+S:     linux-scsi@vger.kernel.org
+W:     http://megaraid.lsilogic.com
+S:     Maintained
+
+MEMORY TECHNOLOGY DEVICES
+P:	David Woodhouse
+M:	dwmw2@infradead.org
+W:	http://www.linux-mtd.infradead.org/
+L:	linux-mtd@lists.infradead.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/tglx/mtd-2.6.git
+S:	Maintained
+
+MICROTEK X6 SCANNER
+P:	Oliver Neukum
+M:	oliver@neukum.name
+S:	Maintained
+
+MIPS
+P:	Ralf Baechle
+M:	ralf@linux-mips.org
+W:	http://www.linux-mips.org/
+L:	linux-mips@linux-mips.org
+S:	Maintained
+
+MISCELLANEOUS MCA-SUPPORT
+P:	James Bottomley
+M:	jejb@steeleye.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+MODULE SUPPORT
+P:	Rusty Russell
+M:	rusty@rustcorp.com.au
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
+P:	Stelian Pop
+M:	stelian@popies.net
+W:	http://popies.net/meye/
+S:	Maintained
+
+MOUSE AND MISC DEVICES [GENERAL]
+P:	Alessandro Rubini
+M:	rubini@ipvvis.unipv.it
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+MTRR AND SIMILAR SUPPORT [i386]
+P:	Richard Gooch
+M:	rgooch@atnf.csiro.au
+L:	linux-kernel@vger.kernel.org
+W:	http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
+S:	Maintained
+
+MULTISOUND SOUND DRIVER
+P:	Andrew Veliath
+M:	andrewtv@usa.net
+S:	Maintained
+
+NATSEMI ETHERNET DRIVER (DP8381x)
+P: 	Tim Hockin
+M:	thockin@hockin.org
+S:	Maintained
+
+NCP FILESYSTEM
+P:	Petr Vandrovec
+M:	vandrove@vc.cvut.cz
+L:	linware@sh.cvut.cz
+S:	Maintained
+
+NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
+P:	James E.J. Bottomley
+M:	James.Bottomley@HansenPartnership.com
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+NETFILTER/IPTABLES/IPCHAINS
+P:	Rusty Russell
+P:	Marc Boucher
+P:	James Morris
+P:	Harald Welte
+P:	Jozsef Kadlecsik
+M:	coreteam@netfilter.org
+W:	http://www.netfilter.org/
+W:	http://www.iptables.org/
+L:	netfilter@lists.netfilter.org
+L:	netfilter-devel@lists.netfilter.org
+S:	Supported
+
+NETROM NETWORK LAYER
+P:	Ralf Baechle
+M:	ralf@linux-mips.org
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+NETWORK BLOCK DEVICE
+P:	Paul Clements
+M:	Paul.Clements@steeleye.com
+S:	Maintained
+
+NETWORK DEVICE DRIVERS
+P:	Andrew Morton
+M:	akpm@osdl.org
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+L:	netdev@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
+S:	Maintained
+
+NETWORKING [GENERAL]
+P:	Networking Team
+M:	netdev@vger.kernel.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+NETWORKING [IPv4/IPv6]
+P:	David S. Miller
+M:	davem@davemloft.net
+P:	Alexey Kuznetsov
+M:	kuznet@ms2.inr.ac.ru
+P:	Pekka Savola (ipv6)
+M:	pekkas@netcore.fi
+P:	James Morris
+M:	jmorris@namei.org
+P:	Hideaki YOSHIFUJI
+M:	yoshfuji@linux-ipv6.org
+P:	Patrick McHardy
+M:	kaber@coreworks.de
+L:	netdev@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/davem/net-2.6.git
+S:	Maintained
+
+IPVS
+P:	Wensong Zhang
+M:	wensong@linux-vs.org
+P:	Simon Horman
+M:	horms@verge.net.au
+P:	Julian Anastasov
+M:	ja@ssi.bg
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+NFS CLIENT
+P:	Trond Myklebust
+M:	trond.myklebust@fys.uio.no
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+NI5010 NETWORK DRIVER
+P:	Jan-Pascal van Best and Andreas Mohr
+M:	Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl>
+M:	Andreas Mohr <100.30936@germany.net>
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
+P:	YOKOTA Hiroshi
+M:	yokota@netlab.is.tsukuba.ac.jp
+W:	http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/
+S:	Maintained
+
+NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER
+P:	GOTO Masanori
+M:	gotom@debian.or.jp
+P:	YOKOTA Hiroshi
+M:	yokota@netlab.is.tsukuba.ac.jp
+W:	http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/
+S:	Maintained
+
+NON-IDE/NON-SCSI CDROM DRIVERS [GENERAL] (come on, crew - mark your responsibility)
+P:	Eberhard Moenkeberg
+M:	emoenke@gwdg.de
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+NTFS FILESYSTEM
+P:	Anton Altaparmakov
+M:	aia21@cantab.net
+L:	linux-ntfs-dev@lists.sourceforge.net
+L:	linux-kernel@vger.kernel.org
+W:	http://linux-ntfs.sf.net/
+T:	git kernel.org:/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
+S:	Maintained
+
+NVIDIA (RIVA) FRAMEBUFFER DRIVER
+P:	Ani Joshi
+M:	ajoshi@shell.unixbox.com
+L:	linux-nvidia@lists.surfsouth.com
+S:	Maintained
+
+OLYMPIC NETWORK DRIVER
+P:	Peter De Shrijver
+M:	p2@ace.ulyssis.student.kuleuven.ac.be
+P:	Mike Phillips
+M:	mikep@linuxtr.net 
+L:	netdev@vger.kernel.org
+L:	linux-tr@linuxtr.net
+W:	http://www.linuxtr.net
+S:	Maintained
+
+OMNIKEY CARDMAN 4000 DRIVER
+P:	Harald Welte
+M:	laforge@gnumonks.org
+S:	Maintained
+
+OMNIKEY CARDMAN 4040 DRIVER
+P:	Harald Welte
+M:	laforge@gnumonks.org
+S:	Maintained
+
+ONSTREAM SCSI TAPE DRIVER
+P:	Willem Riede
+M:	osst@riede.org
+L:	osst-users@lists.sourceforge.net
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+OPL3-SA2, SA3, and SAx DRIVER
+P:	Zwane Mwaikambo
+M:	zwane@arm.linux.org.uk
+L:	linux-sound@vger.kernel.org
+S:	Maintained
+
+OPROFILE
+P:	Philippe Elie
+M:	phil.el@wanadoo.fr
+L:	oprofile-list@lists.sf.net
+S:	Maintained
+
+ORINOCO DRIVER
+P:	Pavel Roskin
+M:	proski@gnu.org
+P:	David Gibson
+M:	hermes@gibson.dropbear.id.au
+L:	orinoco-users@lists.sourceforge.net
+L:	orinoco-devel@lists.sourceforge.net
+W:	http://www.nongnu.org/orinoco/
+S:	Maintained
+
+PARALLEL PORT SUPPORT
+P:	Phil Blundell
+M:	philb@gnu.org
+P:	Tim Waugh
+M:	tim@cyberelk.net
+P:	David Campbell
+M:	campbell@torque.net
+P:	Andrea Arcangeli
+M:	andrea@suse.de
+L:	linux-parport@lists.infradead.org
+W:	http://people.redhat.com/twaugh/parport/
+S:	Maintained
+
+PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
+P:	Tim Waugh
+M:	tim@cyberelk.net
+L:	linux-parport@lists.infradead.org
+W:	http://www.torque.net/linux-pp.html
+S:	Maintained
+
+PARISC ARCHITECTURE
+P:	Matthew Wilcox
+M:	matthew@wil.cx
+P:	Grant Grundler
+M:	grundler@parisc-linux.org
+L:	parisc-linux@parisc-linux.org
+W:	http://www.parisc-linux.org/
+S:	Maintained
+
+PERSONALITY HANDLING
+P:	Christoph Hellwig
+M:	hch@infradead.org
+L:	linux-abi-devel@lists.sourceforge.net
+S:	Maintained
+
+PCI SOUND DRIVERS (ES1370, ES1371 and SONICVIBES)
+P:	Thomas Sailer
+M:	sailer@ife.ee.ethz.ch
+L:	linux-sound@vger.kernel.org
+W:	http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html
+S:	Maintained
+
+PCI SUBSYSTEM
+P:	Greg Kroah-Hartman
+M:	gregkh@suse.de
+L:	linux-kernel@vger.kernel.org
+L:	linux-pci@atrey.karlin.mff.cuni.cz
+T:	quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
+S:	Supported
+
+PCI HOTPLUG CORE
+P:	Greg Kroah-Hartman
+M:	gregkh@suse.de
+S:	Supported
+
+PCI HOTPLUG COMPAQ DRIVER
+P:	Greg Kroah-Hartman
+M:	greg@kroah.com
+S:	Maintained
+
+PCIE HOTPLUG DRIVER
+P:	Kristen Carlson Accardi
+M:	kristen.c.accardi@intel.com
+L:	pcihpd-discuss@lists.sourceforge.net
+S:	Maintained
+
+PCMCIA SUBSYSTEM
+P:	Linux PCMCIA Team
+L:	http://lists.infradead.org/mailman/listinfo/linux-pcmcia
+T:	git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
+S:	Maintained
+
+PCNET32 NETWORK DRIVER
+P:	Thomas Bogendörfer
+M:	tsbogend@alpha.franken.de
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+PHRAM MTD DRIVER
+P:	Jörn Engel
+M:	joern@wh.fh-wedel.de
+L:	linux-mtd@lists.infradead.org
+S:	Maintained
+
+PKTCDVD DRIVER
+P:	Peter Osterlund
+M:	petero2@telia.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+POSIX CLOCKS and TIMERS
+P:	George Anzinger
+M:	george@mvista.com
+L:	netdev@vger.kernel.org
+S:	Supported
+
+POWERPC 4xx EMAC DRIVER
+P:	Eugene Surovegin
+M:	ebs@ebshome.net
+W:	http://kernel.ebshome.net/emac/
+L:	linuxppc-embedded@ozlabs.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+PNP SUPPORT
+P:	Adam Belay
+M:	ambx1@neo.rr.com
+S:	Maintained
+
+PPP PROTOCOL DRIVERS AND COMPRESSORS
+P:	Paul Mackerras
+M:	paulus@samba.org
+L:	linux-ppp@vger.kernel.org
+S:	Maintained
+
+PPP OVER ATM (RFC 2364)
+P:	Mitchell Blank Jr
+M:	mitch@sfgoth.com
+S:	Maintained
+
+PPP OVER ETHERNET
+P:	Michal Ostrowski
+M:	mostrows@speakeasy.net
+S:	Maintained
+
+PREEMPTIBLE KERNEL
+P:	Robert Love
+M:	rml@tech9.net
+L:	linux-kernel@vger.kernel.org
+L:	kpreempt-tech@lists.sourceforge.net
+W:	ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
+S:	Supported
+
+PRISM54 WIRELESS DRIVER
+P:	Prism54 Development Team
+M:	prism54-private@prism54.org
+L:	netdev@vger.kernel.org
+W:	http://prism54.org
+S:	Maintained
+
+PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
+P:	Peter Denison
+M:	promise@pnd-pc.demon.co.uk
+W:	http://www.pnd-pc.demon.co.uk/promise/
+S:	Maintained
+
+PXA2xx SUPPORT
+P:	Nicolas Pitre
+M:	nico@cam.org
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+S:	Maintained
+
+QLOGIC QLA2XXX FC-SCSI DRIVER
+P:	Andrew Vasquez
+M:	andrew.vasquez@qlogic.com
+L:	linux-scsi@vger.kernel.org
+S:	Supported
+
+QNX4 FILESYSTEM
+P:	Anders Larsen
+M:	al@alarsen.net
+L:	linux-kernel@vger.kernel.org
+W:	http://www.alarsen.net/linux/qnx4fs/
+S:	Maintained
+
+RADEON FRAMEBUFFER DISPLAY DRIVER
+P:	Benjamin Herrenschmidt
+M:	benh@kernel.crashing.org
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Maintained
+
+RAGE128 FRAMEBUFFER DISPLAY DRIVER
+P:	Paul Mackerras
+M:	paulus@samba.org
+L:	linux-fbdev-devel@lists.sourceforge.net
+S:	Maintained
+
+RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
+P:	Corey Thomas
+M:	corey@world.std.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+RANDOM NUMBER DRIVER
+P:	Matt Mackall
+M:	mpm@selenic.com
+S:	Maintained
+
+RAPIDIO SUBSYSTEM
+P:	Matt Porter
+M:	mporter@kernel.crashing.org
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+REAL TIME CLOCK DRIVER
+P:	Paul Gortmaker
+M:	p_gortmaker@yahoo.com
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+REISERFS FILE SYSTEM
+P:	Hans Reiser
+M:	reiserfs-dev@namesys.com
+L:	reiserfs-list@namesys.com
+W:	http://www.namesys.com
+S:	Supported
+
+ROCKETPORT DRIVER
+P:	Comtrol Corp.
+W:	http://www.comtrol.com
+S:	Maintained
+
+ROSE NETWORK LAYER
+P:	Ralf Baechle
+M:	ralf@linux-mips.org
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+RISCOM8 DRIVER
+S:	Orphan
+
+RTLINUX  REALTIME  LINUX
+P:	Victor Yodaiken
+M:	yodaiken@fsmlabs.com
+L:	rtl@rtlinux.org
+W:	www.rtlinux.org
+S:	Maintained
+
+S390
+P:	Martin Schwidefsky
+M:	schwidefsky@de.ibm.com
+M:	linux390@de.ibm.com
+L:	linux-390@vm.marist.edu
+W:	http://oss.software.ibm.com/developerworks/opensource/linux390
+S:	Supported
+
+SAA7146 VIDEO4LINUX-2 DRIVER
+P:	Michael Hunold
+M:	michael@mihu.de
+W:	http://www.mihu.de/linux/saa7146
+S:	Maintained
+
+SBPCD CDROM DRIVER
+P:	Eberhard Moenkeberg
+M:	emoenke@gwdg.de
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+SC1200 WDT DRIVER
+P:	Zwane Mwaikambo
+M:	zwane@arm.linux.org.uk
+S:	Maintained
+
+SCHEDULER
+P:	Ingo Molnar
+M:	mingo@elte.hu
+P:	Robert Love    [the preemptible kernel bits]
+M:	rml@tech9.net
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+SCSI CDROM DRIVER
+P:	Jens Axboe
+M:	axboe@suse.de
+L:	linux-scsi@vger.kernel.org
+W:	http://www.kernel.dk
+S:	Maintained
+
+SCSI SG DRIVER
+P:	Doug Gilbert
+M:	dgilbert@interlog.com
+L:	linux-scsi@vger.kernel.org
+W:	http://www.torque.net/sg
+S:	Maintained
+
+SCSI SUBSYSTEM
+P:	James E.J. Bottomley
+M:	James.Bottomley@SteelEye.com
+L:	linux-scsi@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
+S:	Maintained
+
+SCSI TAPE DRIVER
+P:	Kai Mäkisara
+M:	Kai.Makisara@kolumbus.fi
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+SCTP PROTOCOL
+P: Sridhar Samudrala
+M: sri@us.ibm.com
+L: lksctp-developers@lists.sourceforge.net
+S: Supported
+
+SCx200 CPU SUPPORT
+P:	Christer Weinigel
+M:	christer@weinigel.se
+W:	http://www.weinigel.se
+S:	Supported
+
+SECURITY CONTACT
+P:	Security Officers
+M:	security@kernel.org
+S:	Supported
+
+SELINUX SECURITY MODULE
+P:	Stephen Smalley
+M:	sds@epoch.ncsc.mil
+P:	James Morris
+M:	jmorris@namei.org
+L:	linux-kernel@vger.kernel.org (kernel issues)
+L: 	selinux@tycho.nsa.gov (general discussion)
+W:	http://www.nsa.gov/selinux
+S:	Supported
+
+SERIAL ATA (SATA) SUBSYSTEM:
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+L:	linux-ide@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
+S:	Supported
+
+SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
+P:	Pat Gefre
+M:	pfg@sgi.com
+L:	linux-ia64@vger.kernel.org
+S:	Supported
+
+SGI VISUAL WORKSTATION 320 AND 540
+P:	Andrey Panin
+M:	pazke@donpac.ru
+L:	linux-visws-devel@lists.sf.net
+W:	http://linux-visws.sf.net
+S:	Maintained for 2.6.
+
+SIMTEC EB110ATX (Chalice CATS)
+P:	Ben Dooks
+P:	Vincent Sanders
+M:	support@simtec.co.uk
+W:	http://www.simtec.co.uk/products/EB110ATX/
+S:	Supported
+
+SIMTEC EB2410ITX (BAST)
+P:	Ben Dooks
+P:	Vincent Sanders
+M:	support@simtec.co.uk
+W:	http://www.simtec.co.uk/products/EB2410ITX/
+S:	Supported
+
+SIS 190 ETHERNET DRIVER
+P:	Francois Romieu
+M:	romieu@fr.zoreil.com
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+SIS 5513 IDE CONTROLLER DRIVER
+P:	Lionel Bouton
+M:	Lionel.Bouton@inet6.fr
+W:	http://inet6.dyn.dhs.org/sponsoring/sis5513/index.html
+W:	http://gyver.homeip.net/sis5513/index.html
+S:	Maintained
+
+SIS 900/7016 FAST ETHERNET DRIVER
+P:	Daniele Venzano
+M:	venza@brownhat.org
+W:	http://www.brownhat.org/sis900.html
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+SIS FRAMEBUFFER DRIVER
+P:	Thomas Winischhofer
+M:	thomas@winischhofer.net
+W:	http://www.winischhofer.net/linuxsisvga.shtml
+S:	Maintained	
+
+SIS USB2VGA DRIVER
+P:	Thomas Winischhofer
+M:	thomas@winischhofer.net
+W:	http://www.winischhofer.at/linuxsisusbvga.shtml
+S:	Maintained
+
+SMSC47M1 HARDWARE MONITOR DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Odd Fixes
+
+SMB FILESYSTEM
+P:	Urban Widmark
+M:	urban@teststation.com
+W:	http://samba.org/
+L:	samba@samba.org
+S:	Maintained
+
+SMC91x ETHERNET DRIVER
+P:	Nicolas Pitre
+M:	nico@cam.org
+S:	Maintained
+
+SNA NETWORK LAYER
+P:	Jay Schulist
+M:	jschlst@samba.org
+L:	linux-sna@turbolinux.com
+W:	http://www.linux-sna.org
+S:	Supported
+
+SOFTWARE RAID (Multiple Disks) SUPPORT
+P:	Ingo Molnar
+M:	mingo@redhat.com
+P:	Neil Brown
+M:	neilb@cse.unsw.edu.au
+L:	linux-raid@vger.kernel.org
+S:	Maintained
+
+SOFTWARE SUSPEND:
+P:	Pavel Machek
+M:	pavel@suse.cz
+L:	linux-pm@osdl.org
+S:	Maintained
+
+SONIC NETWORK DRIVER
+P:	Thomas Bogendoerfer
+M:	tsbogend@alpha.franken.de
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+SONY VAIO CONTROL DEVICE DRIVER
+P:	Stelian Pop
+M:	stelian@popies.net
+W:	http://popies.net/sonypi/
+S:	Maintained
+
+SOUND
+P:	Jaroslav Kysela
+M:	perex@suse.cz
+L:	alsa-devel@alsa-project.org
+S:	Maintained
+
+TPM DEVICE DRIVER
+P:	Kylene Hall
+M:	kjhall@us.ibm.com
+W:	http://tpmdd.sourceforge.net
+L:	tpmdd-devel@lists.sourceforge.net
+S:	Maintained
+
+Telecom Clock Driver for MCPL0010
+P: Mark Gross
+M: mark.gross@intel.com
+S: Supported
+
+TENSILICA XTENSA PORT (xtensa):
+P:	Chris Zankel
+M:	chris@zankel.net
+S:	Maintained
+
+UltraSPARC (sparc64):
+P:	David S. Miller
+M:	davem@davemloft.net
+P:	Eddie C. Dost
+M:	ecd@brainaid.de
+P:	Jakub Jelinek
+M:	jj@sunsite.ms.mff.cuni.cz
+P:	Anton Blanchard
+M:	anton@samba.org
+L:	sparclinux@vger.kernel.org
+L:	ultralinux@vger.kernel.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
+S:	Maintained
+
+SHARP LH SUPPORT (LH7952X & LH7A40X)
+P:	Marc Singer
+M:	elf@buici.com
+W:	http://projects.buici.com/arm
+L:	linux-arm-kernel@lists.arm.linux.org.uk	(subscribers-only)
+S:	Maintained
+
+SHPC HOTPLUG DRIVER
+P:	Kristen Carlson Accardi
+M:	kristen.c.accardi@intel.com
+L:	pcihpd-discuss@lists.sourceforge.net
+S:	Maintained
+
+SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
+P:	Stephen Hemminger
+M:	shemminger@osdl.org
+L:	netdev@vger.kernel.org
+S:	Maintained
+
+SPARC (sparc32):
+P:	William L. Irwin
+M:	wli@holomorphy.com
+L:	sparclinux@vger.kernel.org
+S:	Maintained
+
+SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
+P:	Roger Wolff
+M:	R.E.Wolff@BitWizard.nl
+L:	linux-kernel@vger.kernel.org ?
+S:	Supported
+
+SRM (Alpha) environment access
+P:	Jan-Benedict Glaw
+M:	jbglaw@lug-owl.de
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+STARFIRE/DURALAN NETWORK DRIVER
+P:	Ion Badulescu
+M:	ionut@cs.columbia.edu
+S:	Maintained
+
+STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
+W:	http://mosquitonet.Stanford.EDU/strip.html
+S:	Unsupported ?
+
+STRADIS MPEG-2 DECODER DRIVER
+P:	Nathan Laredo
+M:	laredo@gnu.org
+W:	http://mpeg.openprojects.net/
+W:	http://www.stradis.com/
+S:	Maintained
+
+SUPERH (sh)
+P:	Paul Mundt
+M:	lethal@linux-sh.org
+P:	Kazumoto Kojima
+M:	kkojima@rr.iij4u.or.jp
+L:	linux-sh@m17n.org
+W:	http://www.linux-sh.org
+W:	http://www.m17n.org/linux-sh/
+W:	http://www.rr.iij4u.or.jp/~kkojima/linux-sh4.html
+S:	Maintained
+
+SUPERH64 (sh64)
+P:	Paul Mundt
+M:	lethal@linux-sh.org
+P:	Richard Curnow
+M:	rc@rc0.org.uk
+L:	linuxsh-shmedia-dev@lists.sourceforge.net
+W:	http://www.linux-sh.org
+W:	http://www.rc0.org.uk/sh64
+S:	Maintained
+
+SUN3/3X
+P:	Sam Creasey
+M:	sammy@sammy.net
+L:	sun3-list@redhat.com
+W:	http://sammy.net/sun3/
+S:	Maintained
+
+SVGA HANDLING
+P:	Martin Mares
+M:	mj@ucw.cz
+L:	linux-video@atrey.karlin.mff.cuni.cz
+S:	Maintained
+
+SYSV FILESYSTEM
+P:	Christoph Hellwig
+M:	hch@infradead.org
+S:	Maintained
+
+TI PARALLEL LINK CABLE DRIVER
+P:     Romain Lievin
+M:     roms@lpg.ticalc.org
+S:     Maintained
+
+TLAN NETWORK DRIVER
+P:	Samuel Chessman
+M:	chessman@tux.org
+L:	tlan-devel@lists.sourceforge.net
+W:	http://sourceforge.net/projects/tlan/
+S:	Maintained
+
+TOKEN-RING NETWORK DRIVER
+P:	Mike Phillips
+M:	mikep@linuxtr.net
+L:	netdev@vger.kernel.org
+L:	linux-tr@linuxtr.net
+W:	http://www.linuxtr.net
+S:	Maintained
+
+TOSHIBA ACPI EXTRAS DRIVER
+P:	John Belmonte
+M:	toshiba_acpi@memebeam.org
+W:	http://memebeam.org/toys/ToshibaAcpiDriver
+S:	Maintained
+
+TOSHIBA SMM DRIVER
+P:	Jonathan Buzzard
+M:	jonathan@buzzard.org.uk
+L:	tlinux-users@tce.toshiba-dme.co.jp
+W:	http://www.buzzard.org.uk/toshiba/
+S:	Maintained
+
+TRIDENT 4DWAVE/SIS 7018 PCI AUDIO CORE
+P:	Muli Ben-Yehuda
+M:	mulix@mulix.org
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+TRIVIAL PATCHES
+P:      Adrian Bunk
+M:      trivial@kernel.org
+L:      linux-kernel@vger.kernel.org
+W:      http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
+T:      git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
+S:      Maintained
+
+TMS380 TOKEN-RING NETWORK DRIVER
+P:	Adam Fritzler
+M:	mid@auk.cx
+L:	linux-tr@linuxtr.net
+W:	http://www.auk.cx/tms380tr/
+S:	Maintained
+
+TULIP NETWORK DRIVER
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+L:	tulip-users@lists.sourceforge.net
+W:	http://sourceforge.net/projects/tulip/
+S:	Maintained
+
+TUN/TAP driver
+P:	Maxim Krasnyansky
+M:	maxk@qualcomm.com, max_mk@yahoo.com
+L:	vtun@office.satix.net
+W:	http://vtun.sourceforge.net/tun
+S:	Maintained
+
+U14-34F SCSI DRIVER
+P:	Dario Ballabio
+M:	ballabio_dario@emc.com
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+UDF FILESYSTEM
+P:	Ben Fennema
+M:	bfennema@falcon.csc.calpoly.edu
+L:	linux_udf@hpesjro.fc.hp.com
+W:	http://linux-udf.sourceforge.net
+S:	Maintained
+
+UNIFORM CDROM DRIVER
+P:	Jens Axboe
+M:	axboe@suse.de
+L:	linux-kernel@vger.kernel.org
+W:	http://www.kernel.dk
+S:	Maintained
+
+USB ACM DRIVER
+P:	Oliver Neukum
+M:	oliver@neukum.name
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB BLOCK DRIVER (UB ub)
+P:	Pete Zaitcev
+M:	zaitcev@redhat.com
+L:	linux-kernel@vger.kernel.org
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Supported
+
+USB CDC ETHERNET DRIVER
+P:	Greg Kroah-Hartman
+M:	greg@kroah.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+W:	http://www.kroah.com/linux-usb/
+
+USB EHCI DRIVER
+P:	David Brownell
+M:	dbrownell@users.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB HID/HIDBP DRIVERS
+P:	Vojtech Pavlik
+M:	vojtech@suse.cz
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB HUB DRIVER
+P:	Johannes Erdfelt
+M:	johannes@erdfelt.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB KAWASAKI LSI DRIVER
+P:	Oliver Neukum
+M:	oliver@neukum.name
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB MASS STORAGE DRIVER
+P:	Matthew Dharm
+M:	mdharm-usb@one-eyed-alien.net
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+W:	http://www.one-eyed-alien.net/~mdharm/linux-usb/
+
+USB OHCI DRIVER
+P:	Roman Weissgaerber
+M:	weissg@vienna.at
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB OPTION-CARD DRIVER
+P:	Matthias Urlichs
+M:	smurf@smurf.noris.de
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB OV511 DRIVER
+P:	Mark McClelland
+M:	mmcclell@bigfoot.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://alpha.dyndns.org/ov511/
+S:	Maintained
+
+USB PEGASUS DRIVER
+P:	Petko Manolov
+M:	petkan@users.sourceforge.net
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://pegasus2.sourceforge.net/
+S:	Maintained
+
+USB PRINTER DRIVER
+P:	Vojtech Pavlik
+M:	vojtech@suse.cz
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB RTL8150 DRIVER
+P:	Petko Manolov
+M:	petkan@users.sourceforge.net
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://pegasus2.sourceforge.net/
+S:	Maintained
+
+USB SE401 DRIVER
+P:	Jeroen Vreeken
+M:	pe1rxq@amsat.org
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.chello.nl/~j.vreeken/se401/
+S:	Maintained
+
+USB SERIAL CYBERJACK DRIVER
+P:	Matthias Bruestle and Harald Welte
+M:	support@reiner-sct.com
+W:	http://www.reiner-sct.de/support/treiber_cyberjack.php
+S:	Maintained
+
+USB SERIAL DIGI ACCELEPORT DRIVER
+P:	Peter Berger and Al Borchers
+M:	pberger@brimson.com
+M:	alborchers@steinerpoint.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB SERIAL DRIVER
+P:	Greg Kroah-Hartman
+M:	gregkh@suse.de
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Supported
+
+USB SERIAL BELKIN F5U103 DRIVER
+P:	William Greathouse
+M:	wgreathouse@smva.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB SERIAL CYPRESS M8 DRIVER
+P:	Lonnie Mendez
+M:	dignome@gmail.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+W:	http://geocities.com/i0xox0i
+W:	http://firstlight.net/cvs
+
+USB SERIAL CYBERJACK PINPAD/E-COM DRIVER
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB AUERSWALD DRIVER
+P:	Wolfgang Muees
+M:	wolfgang@iksw-muees.de
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER
+P:	Gary Brubaker
+M:	xavyer@ix.netcom.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB SERIAL KEYSPAN DRIVER
+P:	Greg Kroah-Hartman
+M:	greg@kroah.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.kroah.com/linux/
+S:	Maintained
+
+USB SERIAL WHITEHEAT DRIVER
+P:	Stuart MacDonald
+M:	stuartm@connecttech.com
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.connecttech.com
+S:	Supported
+
+USB SN9C10x DRIVER
+P:	Luca Risolia
+M:	luca.risolia@studio.unibo.it
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.linux-projects.org
+S:	Maintained
+
+USB SUBSYSTEM
+P:	Greg Kroah-Hartman
+M:	gregkh@suse.de
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.linux-usb.org
+T:	quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
+S:	Supported
+
+USB UHCI DRIVER
+P:	Alan Stern
+M:	stern@rowland.harvard.edu
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB "USBNET" DRIVER
+P:	David Brownell
+M:	dbrownell@users.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+S:	Maintained
+
+USB W996[87]CF DRIVER
+P:	Luca Risolia
+M:	luca.risolia@studio.unibo.it
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://www.linux-projects.org
+S:	Maintained
+
+USB ZD1201 DRIVER
+P:	Jeroen Vreeken
+M:	pe1rxq@amsat.org
+L:	linux-usb-users@lists.sourceforge.net
+L:	linux-usb-devel@lists.sourceforge.net
+W:	http://linux-lc100020.sourceforge.net
+S:	Maintained
+
+USER-MODE LINUX
+P:	Jeff Dike
+M:	jdike@karaya.com
+L:	user-mode-linux-devel@lists.sourceforge.net
+L:	user-mode-linux-user@lists.sourceforge.net
+W:	http://user-mode-linux.sourceforge.net
+S:	Maintained
+	
+FAT/VFAT/MSDOS FILESYSTEM:
+P:	OGAWA Hirofumi
+M:	hirofumi@mail.parknet.co.jp
+L:	linux-kernel@vger.kernel.org
+S:	Maintained
+
+VIA 82Cxxx AUDIO DRIVER (old OSS driver)
+P:	Jeff Garzik
+S:	Odd fixes
+
+VIA RHINE NETWORK DRIVER
+P:	Roger Luethi
+M:	rl@hellgate.ch
+S:	Maintained
+
+VIAPRO SMBUS DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+UCLINUX (AND M68KNOMMU)
+P:	Greg Ungerer
+M:	gerg@uclinux.org
+W:	http://www.uclinux.org/
+L:	uclinux-dev@uclinux.org  (subscribers-only)
+S:	Maintained
+
+UCLINUX FOR NEC V850
+P:	Miles Bader
+M:	uclinux-v850@lsi.nec.co.jp
+W:	http://www.ic.nec.co.jp/micro/uclinux/eng/
+W:	http://www.ee.nec.de/uclinux/
+S:	Supported
+
+UCLINUX FOR RENESAS H8/300
+P:	Yoshinori Sato
+M:	ysato@users.sourceforge.jp
+W:	http://uclinux-h8.sourceforge.jp/
+S:	Supported
+
+USB DIAMOND RIO500 DRIVER
+P:	Cesar Miquel
+M:	miquel@df.uba.ar
+L:	rio500-users@lists.sourceforge.net
+W:	http://rio500.sourceforge.net
+S:	Maintained
+
+V9FS FILE SYSTEM
+P:      Eric Van Hensbergen
+M:      ericvh@gmail.com
+P:      Ron Minnich
+M:      rminnich@lanl.gov
+P:      Latchesar Ionkov
+M:      lucho@ionkov.net
+L:      v9fs-developer@lists.sourceforge.net
+W:      http://v9fs.sf.net
+T:      git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs-devel.git
+S:      Maintained
+
+VIDEO FOR LINUX
+P:	Mauro Carvalho Chehab
+M:	mchehab@brturbo.com.br
+L:	video4linux-list@redhat.com
+W:	http://linuxtv.org
+T:	git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
+S:	Maintained
+
+W1 DALLAS'S 1-WIRE BUS
+P:	Evgeniy Polyakov
+M:	johnpol@2ka.mipt.ru
+L:	lm-sensors@lm-sensors.org
+S:	Maintained
+
+W83L51xD SD/MMC CARD INTERFACE DRIVER
+P:	Pierre Ossman
+M:	drzeus-wbsd@drzeus.cx
+L:	wbsd-devel@list.drzeus.cx
+W:	http://projects.drzeus.cx/wbsd
+S:	Maintained
+
+W83L785TS HARDWARE MONITOR DRIVER
+P:	Jean Delvare
+M:	khali@linux-fr.org
+L:	lm-sensors@lm-sensors.org
+S:	Odd Fixes
+
+WAN ROUTER & SANGOMA WANPIPE DRIVERS & API (X.25, FRAME RELAY, PPP, CISCO HDLC)
+P:	Nenad Corbic
+M:	ncorbic@sangoma.com
+M:	dm@sangoma.com
+W:	http://www.sangoma.com
+S:	Supported
+
+WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
+P:	Jean Tourrilhes
+M:	jt@hpl.hp.com
+W:	http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
+S:	Maintained
+
+WD7000 SCSI DRIVER
+P:	Miroslav Zagorac
+M:	zaga@fly.cc.fer.hr
+L:	linux-scsi@vger.kernel.org
+S:	Maintained
+
+WISTRON LAPTOP BUTTON DRIVER
+P:	Miloslav Trmac
+M:	mitr@volny.cz
+S:	Maintained
+
+WL3501 WIRELESS PCMCIA CARD DRIVER
+P:	Arnaldo Carvalho de Melo
+M:	acme@conectiva.com.br
+W:	http://advogato.org/person/acme
+S:	Maintained
+
+X.25 NETWORK LAYER
+P:	Henner Eisen
+M:	eis@baty.hanse.de
+L:	linux-x25@vger.kernel.org
+S:	Maintained
+
+XFS FILESYSTEM
+P:	Silicon Graphics Inc
+M:	xfs-masters@oss.sgi.com
+M:	nathans@sgi.com
+L:	linux-xfs@oss.sgi.com
+W:	http://oss.sgi.com/projects/xfs
+S:	Supported
+
+X86 3-LEVEL PAGING (PAE) SUPPORT
+P:	Ingo Molnar
+M:	mingo@redhat.com
+S:	Maintained
+
+X86-64 port
+P:	Andi Kleen
+M:	ak@suse.de
+L:	discuss@x86-64.org
+W:	http://www.x86-64.org
+S:	Maintained
+
+YAM DRIVER FOR AX.25
+P:	Jean-Paul Roubelat
+M:	jpr@f6fbb.org
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+YEALINK PHONE DRIVER
+P:	Henk Vergonet
+M:	Henk.Vergonet@gmail.com
+L:	usbb2k-api-dev@nongnu.org
+S:	Maintained
+
+YMFPCI YAMAHA PCI SOUND (Use ALSA instead)
+P:	Pete Zaitcev
+M:	zaitcev@yahoo.com
+L:	linux-kernel@vger.kernel.org
+S:	Obsolete
+
+Z8530 DRIVER FOR AX.25
+P:	Joerg Reuter
+M:	jreuter@yaina.de
+W:	http://yaina.de/jreuter/
+W:	http://www.qsl.net/dl1bke/
+L:	linux-hams@vger.kernel.org
+S:	Maintained
+
+ZF MACHZ WATCHDOG
+P:	Fernando Fuganti
+M:	fuganti@netbank.com.br
+W:	http://cvs.conectiva.com.br/drivers/ZFL-watchdog/
+S:	Maintained
+
+ZR36067 VIDEO FOR LINUX DRIVER
+P:	Ronald Bultje
+M:	rbultje@ronald.bitfreak.net
+L:	mjpeg-users@lists.sourceforge.net
+W:	http://mjpeg.sourceforge.net/driver-zoran/
+S:	Maintained
+
+ZR36120 VIDEO FOR LINUX DRIVER
+P:	Pauline Middelink
+M:	middelin@polyware.nl
+W:	http://www.polyware.nl/~middelin/En/hobbies.html
+W:	http://www.polyware.nl/~middelin/hobbies.html
+S:	Maintained
+
+THE REST
+P:	Linus Torvalds
+S:	Buried alive in reporters
diff -urN oldtree/fs/Kconfig newtree/fs/Kconfig
--- oldtree/fs/Kconfig	2006-01-02 22:21:10.000000000 -0500
+++ newtree/fs/Kconfig	2006-02-11 22:03:50.206469088 -0500
@@ -1288,6 +1288,19 @@
 	  Say Y here if you want to try writing to UFS partitions. This is
 	  experimental, so you should back up your UFS partitions beforehand.
 
+config LUFS_FS
+	tristate "LUFS file system support (EXPERIMENTAL)"
+	depends on EXPERIMENTAL && UNIX
+	help
+	  LUFS is an userland file system framework providing a simplified
+	  interface.
+	  
+	  Besides the kernel support enabled by this option, you will also
+	  need the lufsd daemon and file system modules available from
+	  http://lufs.sourceforge.net
+	  
+	  Say Y here if you want to get access to a bunch of useful file
+	  systens: sshfs, ftpfs, gnutellafs, gvfs, cardfs, cefs, etc.
 endmenu
 
 menu "Network File Systems"
diff -urN oldtree/fs/Kconfig.orig newtree/fs/Kconfig.orig
--- oldtree/fs/Kconfig.orig	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/Kconfig.orig	2006-01-02 22:21:10.000000000 -0500
@@ -0,0 +1,1791 @@
+#
+# File system configuration
+#
+
+menu "File systems"
+
+config EXT2_FS
+	tristate "Second extended fs support"
+	help
+	  Ext2 is a standard Linux file system for hard disks.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called ext2.  Be aware however that the file system
+	  of your root partition (the one containing the directory /) cannot
+	  be compiled as a module, and so this could be dangerous.
+
+	  If unsure, say Y.
+
+config EXT2_FS_XATTR
+	bool "Ext2 extended attributes"
+	depends on EXT2_FS
+	help
+	  Extended attributes are name:value pairs associated with inodes by
+	  the kernel or by users (see the attr(5) manual page, or visit
+	  <http://acl.bestbits.at/> for details).
+
+	  If unsure, say N.
+
+config EXT2_FS_POSIX_ACL
+	bool "Ext2 POSIX Access Control Lists"
+	depends on EXT2_FS_XATTR
+	select FS_POSIX_ACL
+	help
+	  Posix Access Control Lists (ACLs) support permissions for users and
+	  groups beyond the owner/group/world scheme.
+
+	  To learn more about Access Control Lists, visit the Posix ACLs for
+	  Linux website <http://acl.bestbits.at/>.
+
+	  If you don't know what Access Control Lists are, say N
+
+config EXT2_FS_SECURITY
+	bool "Ext2 Security Labels"
+	depends on EXT2_FS_XATTR
+	help
+	  Security labels support alternative access control models
+	  implemented by security modules like SELinux.  This option
+	  enables an extended attribute handler for file security
+	  labels in the ext2 filesystem.
+
+	  If you are not using a security module that requires using
+	  extended attributes for file security labels, say N.
+
+config EXT2_FS_XIP
+	bool "Ext2 execute in place support"
+	depends on EXT2_FS
+	help
+	  Execute in place can be used on memory-backed block devices. If you
+	  enable this option, you can select to mount block devices which are
+	  capable of this feature without using the page cache.
+
+	  If you do not use a block device that is capable of using this,
+	  or if unsure, say N.
+
+config FS_XIP
+# execute in place
+	bool
+	depends on EXT2_FS_XIP
+	default y
+
+config EXT3_FS
+	tristate "Ext3 journalling file system support"
+	help
+	  This is the journaling version of the Second extended file system
+	  (often called ext3), the de facto standard Linux file system
+	  (method to organize files on a storage device) for hard disks.
+
+	  The journaling code included in this driver means you do not have
+	  to run e2fsck (file system checker) on your file systems after a
+	  crash.  The journal keeps track of any changes that were being made
+	  at the time the system crashed, and can ensure that your file system
+	  is consistent without the need for a lengthy check.
+
+	  Other than adding the journal to the file system, the on-disk format
+	  of ext3 is identical to ext2.  It is possible to freely switch
+	  between using the ext3 driver and the ext2 driver, as long as the
+	  file system has been cleanly unmounted, or e2fsck is run on the file
+	  system.
+
+	  To add a journal on an existing ext2 file system or change the
+	  behavior of ext3 file systems, you can use the tune2fs utility ("man
+	  tune2fs").  To modify attributes of files and directories on ext3
+	  file systems, use chattr ("man chattr").  You need to be using
+	  e2fsprogs version 1.20 or later in order to create ext3 journals
+	  (available at <http://sourceforge.net/projects/e2fsprogs/>).
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called ext3.  Be aware however that the file system
+	  of your root partition (the one containing the directory /) cannot
+	  be compiled as a module, and so this may be dangerous.
+
+config EXT3_FS_XATTR
+	bool "Ext3 extended attributes"
+	depends on EXT3_FS
+	default y
+	help
+	  Extended attributes are name:value pairs associated with inodes by
+	  the kernel or by users (see the attr(5) manual page, or visit
+	  <http://acl.bestbits.at/> for details).
+
+	  If unsure, say N.
+
+	  You need this for POSIX ACL support on ext3.
+
+config EXT3_FS_POSIX_ACL
+	bool "Ext3 POSIX Access Control Lists"
+	depends on EXT3_FS_XATTR
+	select FS_POSIX_ACL
+	help
+	  Posix Access Control Lists (ACLs) support permissions for users and
+	  groups beyond the owner/group/world scheme.
+
+	  To learn more about Access Control Lists, visit the Posix ACLs for
+	  Linux website <http://acl.bestbits.at/>.
+
+	  If you don't know what Access Control Lists are, say N
+
+config EXT3_FS_SECURITY
+	bool "Ext3 Security Labels"
+	depends on EXT3_FS_XATTR
+	help
+	  Security labels support alternative access control models
+	  implemented by security modules like SELinux.  This option
+	  enables an extended attribute handler for file security
+	  labels in the ext3 filesystem.
+
+	  If you are not using a security module that requires using
+	  extended attributes for file security labels, say N.
+
+config JBD
+# CONFIG_JBD could be its own option (even modular), but until there are
+# other users than ext3, we will simply make it be the same as CONFIG_EXT3_FS
+# dep_tristate '  Journal Block Device support (JBD for ext3)' CONFIG_JBD $CONFIG_EXT3_FS
+	tristate
+	default EXT3_FS
+	help
+	  This is a generic journaling layer for block devices.  It is
+	  currently used by the ext3 file system, but it could also be used to
+	  add journal support to other file systems or block devices such as
+	  RAID or LVM.
+
+	  If you are using the ext3 file system, you need to say Y here. If
+	  you are not using ext3 then you will probably want to say N.
+
+	  To compile this device as a module, choose M here: the module will be
+	  called jbd.  If you are compiling ext3 into the kernel, you cannot
+	  compile this code as a module.
+
+config JBD_DEBUG
+	bool "JBD (ext3) debugging support"
+	depends on JBD
+	help
+	  If you are using the ext3 journaled file system (or potentially any
+	  other file system/device using JBD), this option allows you to
+	  enable debugging output while the system is running, in order to
+	  help track down any problems you are having.  By default the
+	  debugging output will be turned off.
+
+	  If you select Y here, then you will be able to turn on debugging
+	  with "echo N > /proc/sys/fs/jbd-debug", where N is a number between
+	  1 and 5, the higher the number, the more debugging output is
+	  generated.  To turn debugging off again, do
+	  "echo 0 > /proc/sys/fs/jbd-debug".
+
+config FS_MBCACHE
+# Meta block cache for Extended Attributes (ext2/ext3)
+	tristate
+	depends on EXT2_FS_XATTR || EXT3_FS_XATTR
+	default y if EXT2_FS=y || EXT3_FS=y
+	default m if EXT2_FS=m || EXT3_FS=m
+
+config REISERFS_FS
+	tristate "Reiserfs support"
+	help
+	  Stores not just filenames but the files themselves in a balanced
+	  tree.  Uses journaling.
+
+	  Balanced trees are more efficient than traditional file system
+	  architectural foundations.
+
+	  In general, ReiserFS is as fast as ext2, but is very efficient with
+	  large directories and small files.  Additional patches are needed
+	  for NFS and quotas, please see <http://www.namesys.com/> for links.
+
+	  It is more easily extended to have features currently found in
+	  database and keyword search systems than block allocation based file
+	  systems are.  The next version will be so extended, and will support
+	  plugins consistent with our motto ``It takes more than a license to
+	  make source code open.''
+
+	  Read <http://www.namesys.com/> to learn more about reiserfs.
+
+	  Sponsored by Threshold Networks, Emusic.com, and Bigstorage.com.
+
+	  If you like it, you can pay us to add new features to it that you
+	  need, buy a support contract, or pay us to port it to another OS.
+
+config REISERFS_CHECK
+	bool "Enable reiserfs debug mode"
+	depends on REISERFS_FS
+	help
+	  If you set this to Y, then ReiserFS will perform every check it can
+	  possibly imagine of its internal consistency throughout its
+	  operation.  It will also go substantially slower.  More than once we
+	  have forgotten that this was on, and then gone despondent over the
+	  latest benchmarks.:-) Use of this option allows our team to go all
+	  out in checking for consistency when debugging without fear of its
+	  effect on end users.  If you are on the verge of sending in a bug
+	  report, say Y and you might get a useful error message.  Almost
+	  everyone should say N.
+
+config REISERFS_PROC_INFO
+	bool "Stats in /proc/fs/reiserfs"
+	depends on REISERFS_FS
+	help
+	  Create under /proc/fs/reiserfs a hierarchy of files, displaying
+	  various ReiserFS statistics and internal data at the expense of
+	  making your kernel or module slightly larger (+8 KB). This also
+	  increases the amount of kernel memory required for each mount.
+	  Almost everyone but ReiserFS developers and people fine-tuning
+	  reiserfs or tracing problems should say N.
+
+config REISERFS_FS_XATTR
+	bool "ReiserFS extended attributes"
+	depends on REISERFS_FS
+	help
+	  Extended attributes are name:value pairs associated with inodes by
+	  the kernel or by users (see the attr(5) manual page, or visit
+	  <http://acl.bestbits.at/> for details).
+
+	  If unsure, say N.
+
+config REISERFS_FS_POSIX_ACL
+	bool "ReiserFS POSIX Access Control Lists"
+	depends on REISERFS_FS_XATTR
+	select FS_POSIX_ACL
+	help
+	  Posix Access Control Lists (ACLs) support permissions for users and
+	  groups beyond the owner/group/world scheme.
+
+	  To learn more about Access Control Lists, visit the Posix ACLs for
+	  Linux website <http://acl.bestbits.at/>.
+
+	  If you don't know what Access Control Lists are, say N
+
+config REISERFS_FS_SECURITY
+	bool "ReiserFS Security Labels"
+	depends on REISERFS_FS_XATTR
+	help
+	  Security labels support alternative access control models
+	  implemented by security modules like SELinux.  This option
+	  enables an extended attribute handler for file security
+	  labels in the ReiserFS filesystem.
+
+	  If you are not using a security module that requires using
+	  extended attributes for file security labels, say N.
+
+config JFS_FS
+	tristate "JFS filesystem support"
+	select NLS
+	help
+	  This is a port of IBM's Journaled Filesystem .  More information is
+	  available in the file <file:Documentation/filesystems/jfs.txt>.
+
+	  If you do not intend to use the JFS filesystem, say N.
+
+config JFS_POSIX_ACL
+	bool "JFS POSIX Access Control Lists"
+	depends on JFS_FS
+	select FS_POSIX_ACL
+	help
+	  Posix Access Control Lists (ACLs) support permissions for users and
+	  groups beyond the owner/group/world scheme.
+
+	  To learn more about Access Control Lists, visit the Posix ACLs for
+	  Linux website <http://acl.bestbits.at/>.
+
+	  If you don't know what Access Control Lists are, say N
+
+config JFS_SECURITY
+	bool "JFS Security Labels"
+	depends on JFS_FS
+	help
+	  Security labels support alternative access control models
+	  implemented by security modules like SELinux.  This option
+	  enables an extended attribute handler for file security
+	  labels in the jfs filesystem.
+
+	  If you are not using a security module that requires using
+	  extended attributes for file security labels, say N.
+
+config JFS_DEBUG
+	bool "JFS debugging"
+	depends on JFS_FS
+	help
+	  If you are experiencing any problems with the JFS filesystem, say
+	  Y here.  This will result in additional debugging messages to be
+	  written to the system log.  Under normal circumstances, this
+	  results in very little overhead.
+
+config JFS_STATISTICS
+	bool "JFS statistics"
+	depends on JFS_FS
+	help
+	  Enabling this option will cause statistics from the JFS file system
+	  to be made available to the user in the /proc/fs/jfs/ directory.
+
+config FS_POSIX_ACL
+# Posix ACL utility routines (for now, only ext2/ext3/jfs/reiserfs)
+#
+# NOTE: you can implement Posix ACLs without these helpers (XFS does).
+# 	Never use this symbol for ifdefs.
+#
+	bool
+	default n
+
+source "fs/xfs/Kconfig"
+
+config MINIX_FS
+	tristate "Minix fs support"
+	help
+	  Minix is a simple operating system used in many classes about OS's.
+	  The minix file system (method to organize files on a hard disk
+	  partition or a floppy disk) was the original file system for Linux,
+	  but has been superseded by the second extended file system ext2fs.
+	  You don't want to use the minix file system on your hard disk
+	  because of certain built-in restrictions, but it is sometimes found
+	  on older Linux floppy disks.  This option will enlarge your kernel
+	  by about 28 KB. If unsure, say N.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called minix.  Note that the file system of your root
+	  partition (the one containing the directory /) cannot be compiled as
+	  a module.
+
+config ROMFS_FS
+	tristate "ROM file system support"
+	---help---
+	  This is a very small read-only file system mainly intended for
+	  initial ram disks of installation disks, but it could be used for
+	  other read-only media as well.  Read
+	  <file:Documentation/filesystems/romfs.txt> for details.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called romfs.  Note that the file system of your
+	  root partition (the one containing the directory /) cannot be a
+	  module.
+
+	  If you don't know whether you need it, then you don't need it:
+	  answer N.
+
+config INOTIFY
+	bool "Inotify file change notification support"
+	default y
+	---help---
+	  Say Y here to enable inotify support and the associated system
+	  calls.  Inotify is a file change notification system and a
+	  replacement for dnotify.  Inotify fixes numerous shortcomings in
+	  dnotify and introduces several new features.  It allows monitoring
+	  of both files and directories via a single open fd.  Other features
+	  include multiple file events, one-shot support, and unmount
+	  notification.
+
+	  For more information, see Documentation/filesystems/inotify.txt
+
+	  If unsure, say Y.
+
+config QUOTA
+	bool "Quota support"
+	help
+	  If you say Y here, you will be able to set per user limits for disk
+	  usage (also called disk quotas). Currently, it works for the
+	  ext2, ext3, and reiserfs file system. ext3 also supports journalled
+	  quotas for which you don't need to run quotacheck(8) after an unclean
+	  shutdown.
+	  For further details, read the Quota mini-HOWTO, available from
+	  <http://www.tldp.org/docs.html#howto>, or the documentation provided
+	  with the quota tools. Probably the quota support is only useful for
+	  multi user systems. If unsure, say N.
+
+config QFMT_V1
+	tristate "Old quota format support"
+	depends on QUOTA
+	help
+	  This quota format was (is) used by kernels earlier than 2.4.22. If
+	  you have quota working and you don't want to convert to new quota
+	  format say Y here.
+
+config QFMT_V2
+	tristate "Quota format v2 support"
+	depends on QUOTA
+	help
+	  This quota format allows using quotas with 32-bit UIDs/GIDs. If you
+	  need this functionality say Y here.
+
+config QUOTACTL
+	bool
+	depends on XFS_QUOTA || QUOTA
+	default y
+
+config DNOTIFY
+	bool "Dnotify support" if EMBEDDED
+	default y
+	help
+	  Dnotify is a directory-based per-fd file change notification system
+	  that uses signals to communicate events to user-space.  There exist
+	  superior alternatives, but some applications may still rely on
+	  dnotify.
+
+	  Because of this, if unsure, say Y.
+
+config AUTOFS_FS
+	tristate "Kernel automounter support"
+	help
+	  The automounter is a tool to automatically mount remote file systems
+	  on demand. This implementation is partially kernel-based to reduce
+	  overhead in the already-mounted case; this is unlike the BSD
+	  automounter (amd), which is a pure user space daemon.
+
+	  To use the automounter you need the user-space tools from the autofs
+	  package; you can find the location in <file:Documentation/Changes>.
+	  You also want to answer Y to "NFS file system support", below.
+
+	  If you want to use the newer version of the automounter with more
+	  features, say N here and say Y to "Kernel automounter v4 support",
+	  below.
+
+	  To compile this support as a module, choose M here: the module will be
+	  called autofs.
+
+	  If you are not a part of a fairly large, distributed network, you
+	  probably do not need an automounter, and can say N here.
+
+config AUTOFS4_FS
+	tristate "Kernel automounter version 4 support (also supports v3)"
+	help
+	  The automounter is a tool to automatically mount remote file systems
+	  on demand. This implementation is partially kernel-based to reduce
+	  overhead in the already-mounted case; this is unlike the BSD
+	  automounter (amd), which is a pure user space daemon.
+
+	  To use the automounter you need the user-space tools from
+	  <ftp://ftp.kernel.org/pub/linux/daemons/autofs/v4/>; you also
+	  want to answer Y to "NFS file system support", below.
+
+	  To compile this support as a module, choose M here: the module will be
+	  called autofs4.  You will need to add "alias autofs autofs4" to your
+	  modules configuration file.
+
+	  If you are not a part of a fairly large, distributed network or
+	  don't have a laptop which needs to dynamically reconfigure to the
+	  local network, you probably do not need an automounter, and can say
+	  N here.
+
+config FUSE_FS
+	tristate "Filesystem in Userspace support"
+	help
+	  With FUSE it is possible to implement a fully functional filesystem
+	  in a userspace program.
+
+	  There's also companion library: libfuse.  This library along with
+	  utilities is available from the FUSE homepage:
+	  <http://fuse.sourceforge.net/>
+
+	  See <file:Documentation/filesystems/fuse.txt> for more information.
+	  See <file:Documentation/Changes> for needed library/utility version.
+
+	  If you want to develop a userspace FS, or if you want to use
+	  a filesystem based on FUSE, answer Y or M.
+
+menu "CD-ROM/DVD Filesystems"
+
+config ISO9660_FS
+	tristate "ISO 9660 CDROM file system support"
+	help
+	  This is the standard file system used on CD-ROMs.  It was previously
+	  known as "High Sierra File System" and is called "hsfs" on other
+	  Unix systems.  The so-called Rock-Ridge extensions which allow for
+	  long Unix filenames and symbolic links are also supported by this
+	  driver.  If you have a CD-ROM drive and want to do more with it than
+	  just listen to audio CDs and watch its LEDs, say Y (and read
+	  <file:Documentation/filesystems/isofs.txt> and the CD-ROM-HOWTO,
+	  available from <http://www.tldp.org/docs.html#howto>), thereby
+	  enlarging your kernel by about 27 KB; otherwise say N.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called isofs.
+
+config JOLIET
+	bool "Microsoft Joliet CDROM extensions"
+	depends on ISO9660_FS
+	select NLS
+	help
+	  Joliet is a Microsoft extension for the ISO 9660 CD-ROM file system
+	  which allows for long filenames in unicode format (unicode is the
+	  new 16 bit character code, successor to ASCII, which encodes the
+	  characters of almost all languages of the world; see
+	  <http://www.unicode.org/> for more information).  Say Y here if you
+	  want to be able to read Joliet CD-ROMs under Linux.
+
+config ZISOFS
+	bool "Transparent decompression extension"
+	depends on ISO9660_FS
+	select ZLIB_INFLATE
+	help
+	  This is a Linux-specific extension to RockRidge which lets you store
+	  data in compressed form on a CD-ROM and have it transparently
+	  decompressed when the CD-ROM is accessed.  See
+	  <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools
+	  necessary to create such a filesystem.  Say Y here if you want to be
+	  able to read such compressed CD-ROMs.
+
+config ZISOFS_FS
+# for fs/nls/Config.in
+	tristate
+	depends on ZISOFS
+	default ISO9660_FS
+
+config UDF_FS
+	tristate "UDF file system support"
+	help
+	  This is the new file system used on some CD-ROMs and DVDs. Say Y if
+	  you intend to mount DVD discs or CDRW's written in packet mode, or
+	  if written to by other UDF utilities, such as DirectCD.
+	  Please read <file:Documentation/filesystems/udf.txt>.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called udf.
+
+	  If unsure, say N.
+
+config UDF_NLS
+	bool
+	default y
+	depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
+
+endmenu
+
+menu "DOS/FAT/NT Filesystems"
+
+config FAT_FS
+	tristate
+	select NLS
+	help
+	  If you want to use one of the FAT-based file systems (the MS-DOS and
+	  VFAT (Windows 95) file systems), then you must say Y or M here
+	  to include FAT support. You will then be able to mount partitions or
+	  diskettes with FAT-based file systems and transparently access the
+	  files on them, i.e. MSDOS files will look and behave just like all
+	  other Unix files.
+
+	  This FAT support is not a file system in itself, it only provides
+	  the foundation for the other file systems. You will have to say Y or
+	  M to at least one of "MSDOS fs support" or "VFAT fs support" in
+	  order to make use of it.
+
+	  Another way to read and write MSDOS floppies and hard drive
+	  partitions from within Linux (but not transparently) is with the
+	  mtools ("man mtools") program suite. You don't need to say Y here in
+	  order to do that.
+
+	  If you need to move large files on floppies between a DOS and a
+	  Linux box, say Y here, mount the floppy under Linux with an MSDOS
+	  file system and use GNU tar's M option. GNU tar is a program
+	  available for Unix and DOS ("man tar" or "info tar").
+
+	  It is now also becoming possible to read and write compressed FAT
+	  file systems; read <file:Documentation/filesystems/fat_cvf.txt> for
+	  details.
+
+	  The FAT support will enlarge your kernel by about 37 KB. If unsure,
+	  say Y.
+
+	  To compile this as a module, choose M here: the module will be called
+	  fat.  Note that if you compile the FAT support as a module, you
+	  cannot compile any of the FAT-based file systems into the kernel
+	  -- they will have to be modules as well.
+
+config MSDOS_FS
+	tristate "MSDOS fs support"
+	select FAT_FS
+	help
+	  This allows you to mount MSDOS partitions of your hard drive (unless
+	  they are compressed; to access compressed MSDOS partitions under
+	  Linux, you can either use the DOS emulator DOSEMU, described in the
+	  DOSEMU-HOWTO, available from
+	  <http://www.tldp.org/docs.html#howto>, or try dmsdosfs in
+	  <ftp://ibiblio.org/pub/Linux/system/filesystems/dosfs/>. If you
+	  intend to use dosemu with a non-compressed MSDOS partition, say Y
+	  here) and MSDOS floppies. This means that file access becomes
+	  transparent, i.e. the MSDOS files look and behave just like all
+	  other Unix files.
+
+	  If you have Windows 95 or Windows NT installed on your MSDOS
+	  partitions, you should use the VFAT file system (say Y to "VFAT fs
+	  support" below), or you will not be able to see the long filenames
+	  generated by Windows 95 / Windows NT.
+
+	  This option will enlarge your kernel by about 7 KB. If unsure,
+	  answer Y. This will only work if you said Y to "DOS FAT fs support"
+	  as well. To compile this as a module, choose M here: the module will
+	  be called msdos.
+
+config VFAT_FS
+	tristate "VFAT (Windows-95) fs support"
+	select FAT_FS
+	help
+	  This option provides support for normal Windows file systems with
+	  long filenames.  That includes non-compressed FAT-based file systems
+	  used by Windows 95, Windows 98, Windows NT 4.0, and the Unix
+	  programs from the mtools package.
+
+	  The VFAT support enlarges your kernel by about 10 KB and it only
+	  works if you said Y to the "DOS FAT fs support" above.  Please read
+	  the file <file:Documentation/filesystems/vfat.txt> for details.  If
+	  unsure, say Y.
+
+	  To compile this as a module, choose M here: the module will be called
+	  vfat.
+
+config FAT_DEFAULT_CODEPAGE
+	int "Default codepage for FAT"
+	depends on MSDOS_FS || VFAT_FS
+	default 437
+	help
+	  This option should be set to the codepage of your FAT filesystems.
+	  It can be overridden with the "codepage" mount option.
+	  See <file:Documentation/filesystems/vfat.txt> for more information.
+
+config FAT_DEFAULT_IOCHARSET
+	string "Default iocharset for FAT"
+	depends on VFAT_FS
+	default "iso8859-1"
+	help
+	  Set this to the default input/output character set you'd
+	  like FAT to use. It should probably match the character set
+	  that most of your FAT filesystems use, and can be overridden
+	  with the "iocharset" mount option for FAT filesystems.
+	  Note that "utf8" is not recommended for FAT filesystems.
+	  If unsure, you shouldn't set "utf8" here.
+	  See <file:Documentation/filesystems/vfat.txt> for more information.
+
+config NTFS_FS
+	tristate "NTFS file system support"
+	select NLS
+	help
+	  NTFS is the file system of Microsoft Windows NT, 2000, XP and 2003.
+
+	  Saying Y or M here enables read support.  There is partial, but
+	  safe, write support available.  For write support you must also
+	  say Y to "NTFS write support" below.
+
+	  There are also a number of user-space tools available, called
+	  ntfsprogs.  These include ntfsundelete and ntfsresize, that work
+	  without NTFS support enabled in the kernel.
+
+	  This is a rewrite from scratch of Linux NTFS support and replaced
+	  the old NTFS code starting with Linux 2.5.11.  A backport to
+	  the Linux 2.4 kernel series is separately available as a patch
+	  from the project web site.
+
+	  For more information see <file:Documentation/filesystems/ntfs.txt>
+	  and <http://linux-ntfs.sourceforge.net/>.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called ntfs.
+
+	  If you are not using Windows NT, 2000, XP or 2003 in addition to
+	  Linux on your computer it is safe to say N.
+
+config NTFS_DEBUG
+	bool "NTFS debugging support"
+	depends on NTFS_FS
+	help
+	  If you are experiencing any problems with the NTFS file system, say
+	  Y here.  This will result in additional consistency checks to be
+	  performed by the driver as well as additional debugging messages to
+	  be written to the system log.  Note that debugging messages are
+	  disabled by default.  To enable them, supply the option debug_msgs=1
+	  at the kernel command line when booting the kernel or as an option
+	  to insmod when loading the ntfs module.  Once the driver is active,
+	  you can enable debugging messages by doing (as root):
+	  echo 1 > /proc/sys/fs/ntfs-debug
+	  Replacing the "1" with "0" would disable debug messages.
+
+	  If you leave debugging messages disabled, this results in little
+	  overhead, but enabling debug messages results in very significant
+	  slowdown of the system.
+
+	  When reporting bugs, please try to have available a full dump of
+	  debugging messages while the misbehaviour was occurring.
+
+config NTFS_RW
+	bool "NTFS write support"
+	depends on NTFS_FS
+	help
+	  This enables the partial, but safe, write support in the NTFS driver.
+
+	  The only supported operation is overwriting existing files, without
+	  changing the file length.  No file or directory creation, deletion or
+	  renaming is possible.  Note only non-resident files can be written to
+	  so you may find that some very small files (<500 bytes or so) cannot
+	  be written to.
+
+	  While we cannot guarantee that it will not damage any data, we have
+	  so far not received a single report where the driver would have
+	  damaged someones data so we assume it is perfectly safe to use.
+
+	  Note:  While write support is safe in this version (a rewrite from
+	  scratch of the NTFS support), it should be noted that the old NTFS
+	  write support, included in Linux 2.5.10 and before (since 1997),
+	  is not safe.
+
+	  This is currently useful with TopologiLinux.  TopologiLinux is run
+	  on top of any DOS/Microsoft Windows system without partitioning your
+	  hard disk.  Unlike other Linux distributions TopologiLinux does not
+	  need its own partition.  For more information see
+	  <http://topologi-linux.sourceforge.net/>
+
+	  It is perfectly safe to say N here.
+
+endmenu
+
+menu "Pseudo filesystems"
+
+config PROC_FS
+	bool "/proc file system support"
+	help
+	  This is a virtual file system providing information about the status
+	  of the system. "Virtual" means that it doesn't take up any space on
+	  your hard disk: the files are created on the fly by the kernel when
+	  you try to access them. Also, you cannot read the files with older
+	  version of the program less: you need to use more or cat.
+
+	  It's totally cool; for example, "cat /proc/interrupts" gives
+	  information about what the different IRQs are used for at the moment
+	  (there is a small number of Interrupt ReQuest lines in your computer
+	  that are used by the attached devices to gain the CPU's attention --
+	  often a source of trouble if two devices are mistakenly configured
+	  to use the same IRQ). The program procinfo to display some
+	  information about your system gathered from the /proc file system.
+
+	  Before you can use the /proc file system, it has to be mounted,
+	  meaning it has to be given a location in the directory hierarchy.
+	  That location should be /proc. A command such as "mount -t proc proc
+	  /proc" or the equivalent line in /etc/fstab does the job.
+
+	  The /proc file system is explained in the file
+	  <file:Documentation/filesystems/proc.txt> and on the proc(5) manpage
+	  ("man 5 proc").
+
+	  This option will enlarge your kernel by about 67 KB. Several
+	  programs depend on this, so everyone should say Y here.
+
+config PROC_KCORE
+	bool "/proc/kcore support" if !ARM
+	depends on PROC_FS && MMU
+
+config PROC_VMCORE
+        bool "/proc/vmcore support (EXPERIMENTAL)"
+        depends on PROC_FS && EMBEDDED && EXPERIMENTAL && CRASH_DUMP
+        help
+        Exports the dump image of crashed kernel in ELF format.
+
+config SYSFS
+	bool "sysfs file system support" if EMBEDDED
+	default y
+	help
+	The sysfs filesystem is a virtual filesystem that the kernel uses to
+	export internal kernel objects, their attributes, and their
+	relationships to one another.
+
+	Users can use sysfs to ascertain useful information about the running
+	kernel, such as the devices the kernel has discovered on each bus and
+	which driver each is bound to. sysfs can also be used to tune devices
+	and other kernel subsystems.
+
+	Some system agents rely on the information in sysfs to operate.
+	/sbin/hotplug uses device and object attributes in sysfs to assist in
+	delegating policy decisions, like persistantly naming devices.
+
+	sysfs is currently used by the block subsystem to mount the root
+	partition.  If sysfs is disabled you must specify the boot device on
+	the kernel boot command line via its major and minor numbers.  For
+	example, "root=03:01" for /dev/hda1.
+
+	Designers of embedded systems may wish to say N here to conserve space.
+
+config TMPFS
+	bool "Virtual memory file system support (former shm fs)"
+	help
+	  Tmpfs is a file system which keeps all files in virtual memory.
+
+	  Everything in tmpfs is temporary in the sense that no files will be
+	  created on your hard drive. The files live in memory and swap
+	  space. If you unmount a tmpfs instance, everything stored therein is
+	  lost.
+
+	  See <file:Documentation/filesystems/tmpfs.txt> for details.
+
+config HUGETLBFS
+	bool "HugeTLB file system support"
+	depends X86 || IA64 || PPC64 || SPARC64 || SUPERH || BROKEN
+
+config HUGETLB_PAGE
+	def_bool HUGETLBFS
+
+config RAMFS
+	bool
+	default y
+	---help---
+	  Ramfs is a file system which keeps all files in RAM. It allows
+	  read and write access.
+
+	  It is more of an programming example than a useable file system.  If
+	  you need a file system which lives in RAM with limit checking use
+	  tmpfs.
+
+	  To compile this as a module, choose M here: the module will be called
+	  ramfs.
+
+config RELAYFS_FS
+	tristate "Relayfs file system support"
+	---help---
+	  Relayfs is a high-speed data relay filesystem designed to provide
+	  an efficient mechanism for tools and facilities to relay large
+	  amounts of data from kernel space to user space.
+
+	  To compile this code as a module, choose M here: the module will be
+	  called relayfs.
+
+	  If unsure, say N.
+
+endmenu
+
+menu "Miscellaneous filesystems"
+
+config ADFS_FS
+	tristate "ADFS file system support (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	help
+	  The Acorn Disc Filing System is the standard file system of the
+	  RiscOS operating system which runs on Acorn's ARM-based Risc PC
+	  systems and the Acorn Archimedes range of machines. If you say Y
+	  here, Linux will be able to read from ADFS partitions on hard drives
+	  and from ADFS-formatted floppy discs. If you also want to be able to
+	  write to those devices, say Y to "ADFS write support" below.
+
+	  The ADFS partition should be the first partition (i.e.,
+	  /dev/[hs]d?1) on each of your drives. Please read the file
+	  <file:Documentation/filesystems/adfs.txt> for further details.
+
+	  To compile this code as a module, choose M here: the module will be
+	  called adfs.
+
+	  If unsure, say N.
+
+config ADFS_FS_RW
+	bool "ADFS write support (DANGEROUS)"
+	depends on ADFS_FS
+	help
+	  If you say Y here, you will be able to write to ADFS partitions on
+	  hard drives and ADFS-formatted floppy disks. This is experimental
+	  codes, so if you're unsure, say N.
+
+config AFFS_FS
+	tristate "Amiga FFS file system support (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	help
+	  The Fast File System (FFS) is the common file system used on hard
+	  disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20).  Say Y
+	  if you want to be able to read and write files from and to an Amiga
+	  FFS partition on your hard drive.  Amiga floppies however cannot be
+	  read with this driver due to an incompatibility of the floppy
+	  controller used in an Amiga and the standard floppy controller in
+	  PCs and workstations. Read <file:Documentation/filesystems/affs.txt>
+	  and <file:fs/affs/Changes>.
+
+	  With this driver you can also mount disk files used by Bernd
+	  Schmidt's Un*X Amiga Emulator
+	  (<http://www.freiburg.linux.de/~uae/>).
+	  If you want to do this, you will also need to say Y or M to "Loop
+	  device support", above.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called affs.  If unsure, say N.
+
+config HFS_FS
+	tristate "Apple Macintosh file system support (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	select NLS
+	help
+	  If you say Y here, you will be able to mount Macintosh-formatted
+	  floppy disks and hard drive partitions with full read-write access.
+	  Please read <file:fs/hfs/HFS.txt> to learn about the available mount
+	  options.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called hfs.
+
+config HFSPLUS_FS
+	tristate "Apple Extended HFS file system support"
+	select NLS
+	select NLS_UTF8
+	help
+	  If you say Y here, you will be able to mount extended format
+	  Macintosh-formatted hard drive partitions with full read-write access.
+
+	  This file system is often called HFS+ and was introduced with
+	  MacOS 8. It includes all Mac specific filesystem data such as
+	  data forks and creator codes, but it also has several UNIX
+	  style features such as file ownership and permissions.
+
+config BEFS_FS
+	tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	select NLS
+	help
+	  The BeOS File System (BeFS) is the native file system of Be, Inc's
+	  BeOS. Notable features include support for arbitrary attributes
+	  on files and directories, and database-like indeces on selected
+	  attributes. (Also note that this driver doesn't make those features
+	  available at this time). It is a 64 bit filesystem, so it supports
+	  extremly large volumes and files.
+
+	  If you use this filesystem, you should also say Y to at least one
+	  of the NLS (native language support) options below.
+
+	  If you don't know what this is about, say N.
+
+	  To compile this as a module, choose M here: the module will be
+	  called befs.
+
+config BEFS_DEBUG
+	bool "Debug BeFS"
+	depends on BEFS_FS
+	help
+	  If you say Y here, you can use the 'debug' mount option to enable
+	  debugging output from the driver. 
+
+config BFS_FS
+	tristate "BFS file system support (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	help
+	  Boot File System (BFS) is a file system used under SCO UnixWare to
+	  allow the bootloader access to the kernel image and other important
+	  files during the boot process.  It is usually mounted under /stand
+	  and corresponds to the slice marked as "STAND" in the UnixWare
+	  partition.  You should say Y if you want to read or write the files
+	  on your /stand slice from within Linux.  You then also need to say Y
+	  to "UnixWare slices support", below.  More information about the BFS
+	  file system is contained in the file
+	  <file:Documentation/filesystems/bfs.txt>.
+
+	  If you don't know what this is about, say N.
+
+	  To compile this as a module, choose M here: the module will be called
+	  bfs.  Note that the file system of your root partition (the one
+	  containing the directory /) cannot be compiled as a module.
+
+
+
+config EFS_FS
+	tristate "EFS file system support (read only) (EXPERIMENTAL)"
+	depends on EXPERIMENTAL
+	help
+	  EFS is an older file system used for non-ISO9660 CD-ROMs and hard
+	  disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer
+	  uses the XFS file system for hard disk partitions however).
+
+	  This implementation only offers read-only access. If you don't know
+	  what all this is about, it's safe to say N. For more information
+	  about EFS see its home page at <http://aeschi.ch.eu.org/efs/>.
+
+	  To compile the EFS file system support as a module, choose M here: the
+	  module will be called efs.
+
+config JFFS_FS
+	tristate "Journalling Flash File System (JFFS) support"
+	depends on MTD
+	help
+	  JFFS is the Journaling Flash File System developed by Axis
+	  Communications in Sweden, aimed at providing a crash/powerdown-safe
+	  file system for disk-less embedded devices. Further information is
+	  available at (<http://developer.axis.com/software/jffs/>).
+
+config JFFS_FS_VERBOSE
+	int "JFFS debugging verbosity (0 = quiet, 3 = noisy)"
+	depends on JFFS_FS
+	default "0"
+	help
+	  Determines the verbosity level of the JFFS debugging messages.
+
+config JFFS_PROC_FS
+	bool "JFFS stats available in /proc filesystem"
+	depends on JFFS_FS && PROC_FS
+	help
+	  Enabling this option will cause statistics from mounted JFFS file systems
+	  to be made available to the user in the /proc/fs/jffs/ directory.
+
+config JFFS2_FS
+	tristate "Journalling Flash File System v2 (JFFS2) support"
+	select CRC32
+	depends on MTD
+	help
+	  JFFS2 is the second generation of the Journalling Flash File System
+	  for use on diskless embedded devices. It provides improved wear
+	  levelling, compression and support for hard links. You cannot use
+	  this on normal block devices, only on 'MTD' devices.
+
+	  Further information on the design and implementation of JFFS2 is
+	  available at <http://sources.redhat.com/jffs2/>.
+
+config JFFS2_FS_DEBUG
+	int "JFFS2 debugging verbosity (0 = quiet, 2 = noisy)"
+	depends on JFFS2_FS
+	default "0"
+	help
+	  This controls the amount of debugging messages produced by the JFFS2
+	  code. Set it to zero for use in production systems. For evaluation,
+	  testing and debugging, it's advisable to set it to one. This will
+	  enable a few assertions and will print debugging messages at the
+	  KERN_DEBUG loglevel, where they won't normally be visible. Level 2
+	  is unlikely to be useful - it enables extra debugging in certain
+	  areas which at one point needed debugging, but when the bugs were
+	  located and fixed, the detailed messages were relegated to level 2.
+
+	  If reporting bugs, please try to have available a full dump of the
+	  messages at debug level 1 while the misbehaviour was occurring.
+
+config JFFS2_FS_WRITEBUFFER
+	bool "JFFS2 write-buffering support"
+	depends on JFFS2_FS
+	default y
+	help
+	  This enables the write-buffering support in JFFS2.
+
+	  This functionality is required to support JFFS2 on the following
+	  types of flash devices:
+	    - NAND flash
+	    - NOR flash with transparent ECC
+	    - DataFlash
+
+config JFFS2_SUMMARY
+	bool "JFFS2 summary support (EXPERIMENTAL)"
+	depends on JFFS2_FS && EXPERIMENTAL
+	default n
+	help
+	  This feature makes it possible to use summary information
+	  for faster filesystem mount.
+
+	  The summary information can be inserted into a filesystem image
+	  by the utility 'sumtool'.
+
+	  If unsure, say 'N'.
+
+config JFFS2_COMPRESSION_OPTIONS
+	bool "Advanced compression options for JFFS2"
+	depends on JFFS2_FS
+	default n
+	help
+	  Enabling this option allows you to explicitly choose which
+	  compression modules, if any, are enabled in JFFS2. Removing
+	  compressors and mean you cannot read existing file systems,
+	  and enabling experimental compressors can mean that you
+	  write a file system which cannot be read by a standard kernel.
+
+	  If unsure, you should _definitely_ say 'N'.
+
+config JFFS2_ZLIB
+	bool "JFFS2 ZLIB compression support" if JFFS2_COMPRESSION_OPTIONS
+	select ZLIB_INFLATE
+	select ZLIB_DEFLATE
+	depends on JFFS2_FS
+	default y
+        help
+          Zlib is designed to be a free, general-purpose, legally unencumbered,
+          lossless data-compression library for use on virtually any computer
+          hardware and operating system. See <http://www.gzip.org/zlib/> for
+          further information.
+
+          Say 'Y' if unsure.
+
+config JFFS2_RTIME
+	bool "JFFS2 RTIME compression support" if JFFS2_COMPRESSION_OPTIONS
+	depends on JFFS2_FS
+	default y
+        help
+          Rtime does manage to recompress already-compressed data. Say 'Y' if unsure.
+
+config JFFS2_RUBIN
+	bool "JFFS2 RUBIN compression support" if JFFS2_COMPRESSION_OPTIONS
+	depends on JFFS2_FS
+	default n
+        help
+          RUBINMIPS and DYNRUBIN compressors. Say 'N' if unsure.
+
+choice
+        prompt "JFFS2 default compression mode" if JFFS2_COMPRESSION_OPTIONS
+        default JFFS2_CMODE_PRIORITY
+        depends on JFFS2_FS
+        help
+          You can set here the default compression mode of JFFS2 from
+          the available compression modes. Don't touch if unsure.
+
+config JFFS2_CMODE_NONE
+        bool "no compression"
+        help
+          Uses no compression.
+
+config JFFS2_CMODE_PRIORITY
+        bool "priority"
+        help
+          Tries the compressors in a predefinied order and chooses the first
+          successful one.
+
+config JFFS2_CMODE_SIZE
+        bool "size (EXPERIMENTAL)"
+        help
+          Tries all compressors and chooses the one which has the smallest
+          result.
+
+endchoice
+
+config CRAMFS
+	tristate "Compressed ROM file system support (cramfs)"
+	select ZLIB_INFLATE
+	help
+	  Saying Y here includes support for CramFs (Compressed ROM File
+	  System).  CramFs is designed to be a simple, small, and compressed
+	  file system for ROM based embedded systems.  CramFs is read-only,
+	  limited to 256MB file systems (with 16MB files), and doesn't support
+	  16/32 bits uid/gid, hard links and timestamps.
+
+	  See <file:Documentation/filesystems/cramfs.txt> and
+	  <file:fs/cramfs/README> for further information.
+
+	  To compile this as a module, choose M here: the module will be called
+	  cramfs.  Note that the root file system (the one containing the
+	  directory /) cannot be compiled as a module.
+
+	  If unsure, say N.
+
+config VXFS_FS
+	tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+	help
+	  FreeVxFS is a file system driver that support the VERITAS VxFS(TM)
+	  file system format.  VERITAS VxFS(TM) is the standard file system
+	  of SCO UnixWare (and possibly others) and optionally available
+	  for Sunsoft Solaris, HP-UX and many other operating systems.
+	  Currently only readonly access is supported.
+
+	  NOTE: the file system type as used by mount(1), mount(2) and
+	  fstab(5) is 'vxfs' as it describes the file system format, not
+	  the actual driver.
+
+	  To compile this as a module, choose M here: the module will be
+	  called freevxfs.  If unsure, say N.
+
+
+config HPFS_FS
+	tristate "OS/2 HPFS file system support"
+	help
+	  OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
+	  is the file system used for organizing files on OS/2 hard disk
+	  partitions. Say Y if you want to be able to read files from and
+	  write files to an OS/2 HPFS partition on your hard drive. OS/2
+	  floppies however are in regular MSDOS format, so you don't need this
+	  option in order to be able to read them. Read
+	  <file:Documentation/filesystems/hpfs.txt>.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called hpfs.  If unsure, say N.
+
+
+
+config QNX4FS_FS
+	tristate "QNX4 file system support (read only)"
+	help
+	  This is the file system used by the real-time operating systems
+	  QNX 4 and QNX 6 (the latter is also called QNX RTP).
+	  Further information is available at <http://www.qnx.com/>.
+	  Say Y if you intend to mount QNX hard disks or floppies.
+	  Unless you say Y to "QNX4FS read-write support" below, you will
+	  only be able to read these file systems.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called qnx4.
+
+	  If you don't know whether you need it, then you don't need it:
+	  answer N.
+
+config QNX4FS_RW
+	bool "QNX4FS write support (DANGEROUS)"
+	depends on QNX4FS_FS && EXPERIMENTAL && BROKEN
+	help
+	  Say Y if you want to test write support for QNX4 file systems.
+
+	  It's currently broken, so for now:
+	  answer N.
+
+
+
+config SYSV_FS
+	tristate "System V/Xenix/V7/Coherent file system support"
+	help
+	  SCO, Xenix and Coherent are commercial Unix systems for Intel
+	  machines, and Version 7 was used on the DEC PDP-11. Saying Y
+	  here would allow you to read from their floppies and hard disk
+	  partitions.
+
+	  If you have floppies or hard disk partitions like that, it is likely
+	  that they contain binaries from those other Unix systems; in order
+	  to run these binaries, you will want to install linux-abi which is a
+	  a set of kernel modules that lets you run SCO, Xenix, Wyse,
+	  UnixWare, Dell Unix and System V programs under Linux.  It is
+	  available via FTP (user: ftp) from
+	  <ftp://ftp.openlinux.org/pub/people/hch/linux-abi/>).
+	  NOTE: that will work only for binaries from Intel-based systems;
+	  PDP ones will have to wait until somebody ports Linux to -11 ;-)
+
+	  If you only intend to mount files from some other Unix over the
+	  network using NFS, you don't need the System V file system support
+	  (but you need NFS file system support obviously).
+
+	  Note that this option is generally not needed for floppies, since a
+	  good portable way to transport files and directories between unixes
+	  (and even other operating systems) is given by the tar program ("man
+	  tar" or preferably "info tar").  Note also that this option has
+	  nothing whatsoever to do with the option "System V IPC". Read about
+	  the System V file system in
+	  <file:Documentation/filesystems/sysv-fs.txt>.
+	  Saying Y here will enlarge your kernel by about 27 KB.
+
+	  To compile this as a module, choose M here: the module will be called
+	  sysv.
+
+	  If you haven't heard about all of this before, it's safe to say N.
+
+
+
+config UFS_FS
+	tristate "UFS file system support (read only)"
+	help
+	  BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
+	  OpenBSD and NeXTstep) use a file system called UFS. Some System V
+	  Unixes can create and mount hard disk partitions and diskettes using
+	  this file system as well. Saying Y here will allow you to read from
+	  these partitions; if you also want to write to them, say Y to the
+	  experimental "UFS file system write support", below. Please read the
+	  file <file:Documentation/filesystems/ufs.txt> for more information.
+
+          The recently released UFS2 variant (used in FreeBSD 5.x) is
+          READ-ONLY supported.
+
+	  If you only intend to mount files from some other Unix over the
+	  network using NFS, you don't need the UFS file system support (but
+	  you need NFS file system support obviously).
+
+	  Note that this option is generally not needed for floppies, since a
+	  good portable way to transport files and directories between unixes
+	  (and even other operating systems) is given by the tar program ("man
+	  tar" or preferably "info tar").
+
+	  When accessing NeXTstep files, you may need to convert them from the
+	  NeXT character set to the Latin1 character set; use the program
+	  recode ("info recode") for this purpose.
+
+	  To compile the UFS file system support as a module, choose M here: the
+	  module will be called ufs.
+
+	  If you haven't heard about all of this before, it's safe to say N.
+
+config UFS_FS_WRITE
+	bool "UFS file system write support (DANGEROUS)"
+	depends on UFS_FS && EXPERIMENTAL
+	help
+	  Say Y here if you want to try writing to UFS partitions. This is
+	  experimental, so you should back up your UFS partitions beforehand.
+
+endmenu
+
+menu "Network File Systems"
+	depends on NET
+
+config NFS_FS
+	tristate "NFS file system support"
+	depends on INET
+	select LOCKD
+	select SUNRPC
+	select NFS_ACL_SUPPORT if NFS_V3_ACL
+	help
+	  If you are connected to some other (usually local) Unix computer
+	  (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing
+	  on that computer (the NFS server) using the Network File Sharing
+	  protocol, say Y. "Mounting files" means that the client can access
+	  the files with usual UNIX commands as if they were sitting on the
+	  client's hard disk. For this to work, the server must run the
+	  programs nfsd and mountd (but does not need to have NFS file system
+	  support enabled in its kernel). NFS is explained in the Network
+	  Administrator's Guide, available from
+	  <http://www.tldp.org/docs.html#guide>, on its man page: "man
+	  nfs", and in the NFS-HOWTO.
+
+	  A superior but less widely used alternative to NFS is provided by
+	  the Coda file system; see "Coda file system support" below.
+
+	  If you say Y here, you should have said Y to TCP/IP networking also.
+	  This option would enlarge your kernel by about 27 KB.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called nfs.
+
+	  If you are configuring a diskless machine which will mount its root
+	  file system over NFS at boot time, say Y here and to "Kernel
+	  level IP autoconfiguration" above and to "Root file system on NFS"
+	  below. You cannot compile this driver as a module in this case.
+	  There are two packages designed for booting diskless machines over
+	  the net: netboot, available from
+	  <http://ftp1.sourceforge.net/netboot/>, and Etherboot,
+	  available from <http://ftp1.sourceforge.net/etherboot/>.
+
+	  If you don't know what all this is about, say N.
+
+config NFS_V3
+	bool "Provide NFSv3 client support"
+	depends on NFS_FS
+	help
+	  Say Y here if you want your NFS client to be able to speak version
+	  3 of the NFS protocol.
+
+	  If unsure, say Y.
+
+config NFS_V3_ACL
+	bool "Provide client support for the NFSv3 ACL protocol extension"
+	depends on NFS_V3
+	help
+	  Implement the NFSv3 ACL protocol extension for manipulating POSIX
+	  Access Control Lists.  The server should also be compiled with
+	  the NFSv3 ACL protocol extension; see the CONFIG_NFSD_V3_ACL option.
+
+	  If unsure, say N.
+
+config NFS_V4
+	bool "Provide NFSv4 client support (EXPERIMENTAL)"
+	depends on NFS_FS && EXPERIMENTAL
+	select RPCSEC_GSS_KRB5
+	help
+	  Say Y here if you want your NFS client to be able to speak the newer
+	  version 4 of the NFS protocol.
+
+	  Note: Requires auxiliary userspace daemons which may be found on
+		http://www.citi.umich.edu/projects/nfsv4/
+
+	  If unsure, say N.
+
+config NFS_DIRECTIO
+	bool "Allow direct I/O on NFS files (EXPERIMENTAL)"
+	depends on NFS_FS && EXPERIMENTAL
+	help
+	  This option enables applications to perform uncached I/O on files
+	  in NFS file systems using the O_DIRECT open() flag.  When O_DIRECT
+	  is set for a file, its data is not cached in the system's page
+	  cache.  Data is moved to and from user-level application buffers
+	  directly.  Unlike local disk-based file systems, NFS O_DIRECT has
+	  no alignment restrictions.
+
+	  Unless your program is designed to use O_DIRECT properly, you are
+	  much better off allowing the NFS client to manage data caching for
+	  you.  Misusing O_DIRECT can cause poor server performance or network
+	  storms.  This kernel build option defaults OFF to avoid exposing
+	  system administrators unwittingly to a potentially hazardous
+	  feature.
+
+	  For more details on NFS O_DIRECT, see fs/nfs/direct.c.
+
+	  If unsure, say N.  This reduces the size of the NFS client, and
+	  causes open() to return EINVAL if a file residing in NFS is
+	  opened with the O_DIRECT flag.
+
+config NFSD
+	tristate "NFS server support"
+	depends on INET
+	select LOCKD
+	select SUNRPC
+	select EXPORTFS
+	select NFS_ACL_SUPPORT if NFSD_V3_ACL || NFSD_V2_ACL
+	help
+	  If you want your Linux box to act as an NFS *server*, so that other
+	  computers on your local network which support NFS can access certain
+	  directories on your box transparently, you have two options: you can
+	  use the self-contained user space program nfsd, in which case you
+	  should say N here, or you can say Y and use the kernel based NFS
+	  server. The advantage of the kernel based solution is that it is
+	  faster.
+
+	  In either case, you will need support software; the respective
+	  locations are given in the file <file:Documentation/Changes> in the
+	  NFS section.
+
+	  If you say Y here, you will get support for version 2 of the NFS
+	  protocol (NFSv2). If you also want NFSv3, say Y to the next question
+	  as well.
+
+	  Please read the NFS-HOWTO, available from
+	  <http://www.tldp.org/docs.html#howto>.
+
+	  To compile the NFS server support as a module, choose M here: the
+	  module will be called nfsd.  If unsure, say N.
+
+config NFSD_V2_ACL
+	bool
+	depends on NFSD
+
+config NFSD_V3
+	bool "Provide NFSv3 server support"
+	depends on NFSD
+	help
+	  If you would like to include the NFSv3 server as well as the NFSv2
+	  server, say Y here.  If unsure, say Y.
+
+config NFSD_V3_ACL
+	bool "Provide server support for the NFSv3 ACL protocol extension"
+	depends on NFSD_V3
+	select NFSD_V2_ACL
+	help
+	  Implement the NFSv3 ACL protocol extension for manipulating POSIX
+	  Access Control Lists on exported file systems. NFS clients should
+	  be compiled with the NFSv3 ACL protocol extension; see the
+	  CONFIG_NFS_V3_ACL option.  If unsure, say N.
+
+config NFSD_V4
+	bool "Provide NFSv4 server support (EXPERIMENTAL)"
+	depends on NFSD_V3 && EXPERIMENTAL
+	select NFSD_TCP
+	select CRYPTO_MD5
+	select CRYPTO
+	select FS_POSIX_ACL
+	help
+	  If you would like to include the NFSv4 server as well as the NFSv2
+	  and NFSv3 servers, say Y here.  This feature is experimental, and
+	  should only be used if you are interested in helping to test NFSv4.
+	  If unsure, say N.
+
+config NFSD_TCP
+	bool "Provide NFS server over TCP support"
+	depends on NFSD
+	default y
+	help
+	  If you want your NFS server to support TCP connections, say Y here.
+	  TCP connections usually perform better than the default UDP when
+	  the network is lossy or congested.  If unsure, say Y.
+
+config ROOT_NFS
+	bool "Root file system on NFS"
+	depends on NFS_FS=y && IP_PNP
+	help
+	  If you want your Linux box to mount its whole root file system (the
+	  one containing the directory /) from some other computer over the
+	  net via NFS (presumably because your box doesn't have a hard disk),
+	  say Y. Read <file:Documentation/nfsroot.txt> for details. It is
+	  likely that in this case, you also want to say Y to "Kernel level IP
+	  autoconfiguration" so that your box can discover its network address
+	  at boot time.
+
+	  Most people say N here.
+
+config LOCKD
+	tristate
+
+config LOCKD_V4
+	bool
+	depends on NFSD_V3 || NFS_V3
+	default y
+
+config EXPORTFS
+	tristate
+
+config NFS_ACL_SUPPORT
+	tristate
+	select FS_POSIX_ACL
+
+config NFS_COMMON
+	bool
+	depends on NFSD || NFS_FS
+	default y
+
+config SUNRPC
+	tristate
+
+config SUNRPC_GSS
+	tristate
+
+config RPCSEC_GSS_KRB5
+	tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)"
+	depends on SUNRPC && EXPERIMENTAL
+	select SUNRPC_GSS
+	select CRYPTO
+	select CRYPTO_MD5
+	select CRYPTO_DES
+	help
+	  Provides for secure RPC calls by means of a gss-api
+	  mechanism based on Kerberos V5. This is required for
+	  NFSv4.
+
+	  Note: Requires an auxiliary userspace daemon which may be found on
+		http://www.citi.umich.edu/projects/nfsv4/
+
+	  If unsure, say N.
+
+config RPCSEC_GSS_SPKM3
+	tristate "Secure RPC: SPKM3 mechanism (EXPERIMENTAL)"
+	depends on SUNRPC && EXPERIMENTAL
+	select SUNRPC_GSS
+	select CRYPTO
+	select CRYPTO_MD5
+	select CRYPTO_DES
+	help
+	  Provides for secure RPC calls by means of a gss-api
+	  mechanism based on the SPKM3 public-key mechanism.
+
+	  Note: Requires an auxiliary userspace daemon which may be found on
+	  	http://www.citi.umich.edu/projects/nfsv4/
+
+	  If unsure, say N.
+
+config SMB_FS
+	tristate "SMB file system support (to mount Windows shares etc.)"
+	depends on INET
+	select NLS
+	help
+	  SMB (Server Message Block) is the protocol Windows for Workgroups
+	  (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share
+	  files and printers over local networks.  Saying Y here allows you to
+	  mount their file systems (often called "shares" in this context) and
+	  access them just like any other Unix directory.  Currently, this
+	  works only if the Windows machines use TCP/IP as the underlying
+	  transport protocol, and not NetBEUI.  For details, read
+	  <file:Documentation/filesystems/smbfs.txt> and the SMB-HOWTO,
+	  available from <http://www.tldp.org/docs.html#howto>.
+
+	  Note: if you just want your box to act as an SMB *server* and make
+	  files and printing services available to Windows clients (which need
+	  to have a TCP/IP stack), you don't need to say Y here; you can use
+	  the program SAMBA (available from <ftp://ftp.samba.org/pub/samba/>)
+	  for that.
+
+	  General information about how to connect Linux, Windows machines and
+	  Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
+
+	  To compile the SMB support as a module, choose M here: the module will
+	  be called smbfs.  Most people say N, however.
+
+config SMB_NLS_DEFAULT
+	bool "Use a default NLS"
+	depends on SMB_FS
+	help
+	  Enabling this will make smbfs use nls translations by default. You
+	  need to specify the local charset (CONFIG_NLS_DEFAULT) in the nls
+	  settings and you need to give the default nls for the SMB server as
+	  CONFIG_SMB_NLS_REMOTE.
+
+	  The nls settings can be changed at mount time, if your smbmount
+	  supports that, using the codepage and iocharset parameters.
+
+	  smbmount from samba 2.2.0 or later supports this.
+
+config SMB_NLS_REMOTE
+	string "Default Remote NLS Option"
+	depends on SMB_NLS_DEFAULT
+	default "cp437"
+	help
+	  This setting allows you to specify a default value for which
+	  codepage the server uses. If this field is left blank no
+	  translations will be done by default. The local codepage/charset
+	  default to CONFIG_NLS_DEFAULT.
+
+	  The nls settings can be changed at mount time, if your smbmount
+	  supports that, using the codepage and iocharset parameters.
+
+	  smbmount from samba 2.2.0 or later supports this.
+
+config CIFS
+	tristate "CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers)"
+	depends on INET
+	select NLS
+	help
+	  This is the client VFS module for the Common Internet File System
+	  (CIFS) protocol which is the successor to the Server Message Block 
+	  (SMB) protocol, the native file sharing mechanism for most early
+	  PC operating systems.  The CIFS protocol is fully supported by 
+	  file servers such as Windows 2000 (including Windows 2003, NT 4  
+	  and Windows XP) as well by Samba (which provides excellent CIFS
+	  server support for Linux and many other operating systems). Limited
+	  support for Windows ME and similar servers is provided as well. 
+	  You must use the smbfs client filesystem to access older SMB servers
+	  such as OS/2 and DOS.
+
+	  The intent of the cifs module is to provide an advanced
+	  network file system client for mounting to CIFS compliant servers, 
+	  including support for dfs (hierarchical name space), secure per-user
+	  session establishment, safe distributed caching (oplock), optional
+	  packet signing, Unicode and other internationalization improvements, 
+	  and optional Winbind (nsswitch) integration. You do not need to enable
+	  cifs if running only a (Samba) server. It is possible to enable both
+	  smbfs and cifs (e.g. if you are using CIFS for accessing Windows 2003
+	  and Samba 3 servers, and smbfs for accessing old servers). If you need 
+	  to mount to Samba or Windows from this machine, say Y.
+
+config CIFS_STATS
+        bool "CIFS statistics"
+        depends on CIFS
+        help
+          Enabling this option will cause statistics for each server share
+	  mounted by the cifs client to be displayed in /proc/fs/cifs/Stats
+
+config CIFS_STATS2
+	bool "CIFS extended statistics"
+	depends on CIFS_STATS
+	help
+	  Enabling this option will allow more detailed statistics on SMB
+	  request timing to be displayed in /proc/fs/cifs/DebugData and also
+	  allow optional logging of slow responses to dmesg (depending on the
+	  value of /proc/fs/cifs/cifsFYI, see fs/cifs/README for more details).
+	  These additional statistics may have a minor effect on performance
+	  and memory utilization.
+
+	  Unless you are a developer or are doing network performance analysis
+	  or tuning, say N.
+
+config CIFS_XATTR
+        bool "CIFS extended attributes"
+        depends on CIFS
+        help
+          Extended attributes are name:value pairs associated with inodes by
+          the kernel or by users (see the attr(5) manual page, or visit
+          <http://acl.bestbits.at/> for details).  CIFS maps the name of
+          extended attributes beginning with the user namespace prefix
+          to SMB/CIFS EAs. EAs are stored on Windows servers without the
+          user namespace prefix, but their names are seen by Linux cifs clients
+          prefaced by the user namespace prefix. The system namespace
+          (used by some filesystems to store ACLs) is not supported at
+          this time.
+
+          If unsure, say N.
+
+config CIFS_POSIX
+        bool "CIFS POSIX Extensions"
+        depends on CIFS_XATTR
+        help
+          Enabling this option will cause the cifs client to attempt to
+	  negotiate a newer dialect with servers, such as Samba 3.0.5
+	  or later, that optionally can handle more POSIX like (rather
+	  than Windows like) file behavior.  It also enables
+	  support for POSIX ACLs (getfacl and setfacl) to servers
+	  (such as Samba 3.10 and later) which can negotiate
+	  CIFS POSIX ACL support.  If unsure, say N.
+
+config CIFS_EXPERIMENTAL
+	  bool "CIFS Experimental Features (EXPERIMENTAL)"
+	  depends on CIFS && EXPERIMENTAL
+	  help
+	    Enables cifs features under testing. These features are
+	    experimental and currently include support for writepages
+	    (multipage writebehind performance improvements) and directory
+	    change notification ie fcntl(F_DNOTIFY) as well as some security
+	    improvements.  Some also depend on setting at runtime the
+	    pseudo-file /proc/fs/cifs/Experimental (which is disabled by
+	    default). See the file fs/cifs/README for more details.
+
+	    If unsure, say N.
+
+config CIFS_UPCALL
+	  bool "CIFS Kerberos/SPNEGO advanced session setup (EXPERIMENTAL)"
+	  depends on CIFS_EXPERIMENTAL
+	  select CONNECTOR
+	  help
+	    Enables an upcall mechanism for CIFS which will be used to contact
+	    userspace helper utilities to provide SPNEGO packaged Kerberos
+	    tickets which are needed to mount to certain secure servers
+	    (for which more secure Kerberos authentication is required). If
+	    unsure, say N.
+
+config NCP_FS
+	tristate "NCP file system support (to mount NetWare volumes)"
+	depends on IPX!=n || INET
+	help
+	  NCP (NetWare Core Protocol) is a protocol that runs over IPX and is
+	  used by Novell NetWare clients to talk to file servers.  It is to
+	  IPX what NFS is to TCP/IP, if that helps.  Saying Y here allows you
+	  to mount NetWare file server volumes and to access them just like
+	  any other Unix directory.  For details, please read the file
+	  <file:Documentation/filesystems/ncpfs.txt> in the kernel source and
+	  the IPX-HOWTO from <http://www.tldp.org/docs.html#howto>.
+
+	  You do not have to say Y here if you want your Linux box to act as a
+	  file *server* for Novell NetWare clients.
+
+	  General information about how to connect Linux, Windows machines and
+	  Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
+
+	  To compile this as a module, choose M here: the module will be called
+	  ncpfs.  Say N unless you are connected to a Novell network.
+
+source "fs/ncpfs/Kconfig"
+
+config CODA_FS
+	tristate "Coda file system support (advanced network fs)"
+	depends on INET
+	help
+	  Coda is an advanced network file system, similar to NFS in that it
+	  enables you to mount file systems of a remote server and access them
+	  with regular Unix commands as if they were sitting on your hard
+	  disk.  Coda has several advantages over NFS: support for
+	  disconnected operation (e.g. for laptops), read/write server
+	  replication, security model for authentication and encryption,
+	  persistent client caches and write back caching.
+
+	  If you say Y here, your Linux box will be able to act as a Coda
+	  *client*.  You will need user level code as well, both for the
+	  client and server.  Servers are currently user level, i.e. they need
+	  no kernel support.  Please read
+	  <file:Documentation/filesystems/coda.txt> and check out the Coda
+	  home page <http://www.coda.cs.cmu.edu/>.
+
+	  To compile the coda client support as a module, choose M here: the
+	  module will be called coda.
+
+config CODA_FS_OLD_API
+	bool "Use 96-bit Coda file identifiers"
+	depends on CODA_FS
+	help
+	  A new kernel-userspace API had to be introduced for Coda v6.0
+	  to support larger 128-bit file identifiers as needed by the
+	  new realms implementation.
+
+	  However this new API is not backward compatible with older
+	  clients. If you really need to run the old Coda userspace
+	  cache manager then say Y.
+	  
+	  For most cases you probably want to say N.
+
+config AFS_FS
+# for fs/nls/Config.in
+	tristate "Andrew File System support (AFS) (Experimental)"
+	depends on INET && EXPERIMENTAL
+	select RXRPC
+	help
+	  If you say Y here, you will get an experimental Andrew File System
+	  driver. It currently only supports unsecured read-only AFS access.
+
+	  See <file:Documentation/filesystems/afs.txt> for more intormation.
+
+	  If unsure, say N.
+
+config RXRPC
+	tristate
+
+config 9P_FS
+	tristate "Plan 9 Resource Sharing Support (9P2000) (Experimental)"
+	depends on INET && EXPERIMENTAL
+	help
+	  If you say Y here, you will get experimental support for
+	  Plan 9 resource sharing via the 9P2000 protocol.
+
+	  See <http://v9fs.sf.net> for more information.
+
+	  If unsure, say N.
+
+endmenu
+
+menu "Partition Types"
+
+source "fs/partitions/Kconfig"
+
+endmenu
+
+source "fs/nls/Kconfig"
+
+endmenu
+
diff -urN oldtree/fs/Makefile newtree/fs/Makefile
--- oldtree/fs/Makefile	2006-01-02 22:21:10.000000000 -0500
+++ newtree/fs/Makefile	2006-02-11 22:03:50.208468784 -0500
@@ -98,6 +98,7 @@
 obj-$(CONFIG_9P_FS)		+= 9p/
 obj-$(CONFIG_AFS_FS)		+= afs/
 obj-$(CONFIG_BEFS_FS)		+= befs/
+obj-$(CONFIG_LUFS_FS)		+= lufs/
 obj-$(CONFIG_HOSTFS)		+= hostfs/
 obj-$(CONFIG_HPPFS)		+= hppfs/
 obj-$(CONFIG_DEBUG_FS)		+= debugfs/
diff -urN oldtree/fs/Makefile.orig newtree/fs/Makefile.orig
--- oldtree/fs/Makefile.orig	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/Makefile.orig	2006-01-02 22:21:10.000000000 -0500
@@ -0,0 +1,103 @@
+#
+# Makefile for the Linux filesystems.
+#
+# 14 Sep 2000, Christoph Hellwig <hch@infradead.org>
+# Rewritten to use lists instead of if-statements.
+# 
+
+obj-y :=	open.o read_write.o file_table.o buffer.o  bio.o super.o \
+		block_dev.o char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
+		ioctl.o readdir.o select.o fifo.o locks.o dcache.o inode.o \
+		attr.o bad_inode.o file.o filesystems.o namespace.o aio.o \
+		seq_file.o xattr.o libfs.o fs-writeback.o mpage.o direct-io.o \
+		ioprio.o pnode.o
+
+obj-$(CONFIG_INOTIFY)		+= inotify.o
+obj-$(CONFIG_EPOLL)		+= eventpoll.o
+obj-$(CONFIG_COMPAT)		+= compat.o
+
+nfsd-$(CONFIG_NFSD)		:= nfsctl.o
+obj-y				+= $(nfsd-y) $(nfsd-m)
+
+obj-$(CONFIG_BINFMT_AOUT)	+= binfmt_aout.o
+obj-$(CONFIG_BINFMT_EM86)	+= binfmt_em86.o
+obj-$(CONFIG_BINFMT_MISC)	+= binfmt_misc.o
+
+# binfmt_script is always there
+obj-y				+= binfmt_script.o
+
+obj-$(CONFIG_BINFMT_ELF)	+= binfmt_elf.o
+obj-$(CONFIG_BINFMT_ELF_FDPIC)	+= binfmt_elf_fdpic.o
+obj-$(CONFIG_BINFMT_SOM)	+= binfmt_som.o
+obj-$(CONFIG_BINFMT_FLAT)	+= binfmt_flat.o
+
+obj-$(CONFIG_FS_MBCACHE)	+= mbcache.o
+obj-$(CONFIG_FS_POSIX_ACL)	+= posix_acl.o xattr_acl.o
+obj-$(CONFIG_NFS_COMMON)	+= nfs_common/
+
+obj-$(CONFIG_QUOTA)		+= dquot.o
+obj-$(CONFIG_QFMT_V1)		+= quota_v1.o
+obj-$(CONFIG_QFMT_V2)		+= quota_v2.o
+obj-$(CONFIG_QUOTACTL)		+= quota.o
+
+obj-$(CONFIG_DNOTIFY)		+= dnotify.o
+
+obj-$(CONFIG_PROC_FS)		+= proc/
+obj-y				+= partitions/
+obj-$(CONFIG_SYSFS)		+= sysfs/
+obj-y				+= devpts/
+
+obj-$(CONFIG_PROFILING)		+= dcookies.o
+ 
+# Do not add any filesystems before this line
+obj-$(CONFIG_REISERFS_FS)	+= reiserfs/
+obj-$(CONFIG_EXT3_FS)		+= ext3/ # Before ext2 so root fs can be ext3
+obj-$(CONFIG_JBD)		+= jbd/
+obj-$(CONFIG_EXT2_FS)		+= ext2/
+obj-$(CONFIG_CRAMFS)		+= cramfs/
+obj-$(CONFIG_RAMFS)		+= ramfs/
+obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
+obj-$(CONFIG_CODA_FS)		+= coda/
+obj-$(CONFIG_MINIX_FS)		+= minix/
+obj-$(CONFIG_FAT_FS)		+= fat/
+obj-$(CONFIG_MSDOS_FS)		+= msdos/
+obj-$(CONFIG_VFAT_FS)		+= vfat/
+obj-$(CONFIG_BFS_FS)		+= bfs/
+obj-$(CONFIG_ISO9660_FS)	+= isofs/
+obj-$(CONFIG_DEVFS_FS)		+= devfs/
+obj-$(CONFIG_HFSPLUS_FS)	+= hfsplus/ # Before hfs to find wrapped HFS+
+obj-$(CONFIG_HFS_FS)		+= hfs/
+obj-$(CONFIG_VXFS_FS)		+= freevxfs/
+obj-$(CONFIG_NFS_FS)		+= nfs/
+obj-$(CONFIG_EXPORTFS)		+= exportfs/
+obj-$(CONFIG_NFSD)		+= nfsd/
+obj-$(CONFIG_LOCKD)		+= lockd/
+obj-$(CONFIG_NLS)		+= nls/
+obj-$(CONFIG_SYSV_FS)		+= sysv/
+obj-$(CONFIG_SMB_FS)		+= smbfs/
+obj-$(CONFIG_CIFS)		+= cifs/
+obj-$(CONFIG_NCP_FS)		+= ncpfs/
+obj-$(CONFIG_HPFS_FS)		+= hpfs/
+obj-$(CONFIG_NTFS_FS)		+= ntfs/
+obj-$(CONFIG_UFS_FS)		+= ufs/
+obj-$(CONFIG_EFS_FS)		+= efs/
+obj-$(CONFIG_JFFS_FS)		+= jffs/
+obj-$(CONFIG_JFFS2_FS)		+= jffs2/
+obj-$(CONFIG_AFFS_FS)		+= affs/
+obj-$(CONFIG_ROMFS_FS)		+= romfs/
+obj-$(CONFIG_QNX4FS_FS)		+= qnx4/
+obj-$(CONFIG_AUTOFS_FS)		+= autofs/
+obj-$(CONFIG_AUTOFS4_FS)	+= autofs4/
+obj-$(CONFIG_ADFS_FS)		+= adfs/
+obj-$(CONFIG_FUSE_FS)		+= fuse/
+obj-$(CONFIG_UDF_FS)		+= udf/
+obj-$(CONFIG_RELAYFS_FS)	+= relayfs/
+obj-$(CONFIG_SUN_OPENPROMFS)	+= openpromfs/
+obj-$(CONFIG_JFS_FS)		+= jfs/
+obj-$(CONFIG_XFS_FS)		+= xfs/
+obj-$(CONFIG_9P_FS)		+= 9p/
+obj-$(CONFIG_AFS_FS)		+= afs/
+obj-$(CONFIG_BEFS_FS)		+= befs/
+obj-$(CONFIG_HOSTFS)		+= hostfs/
+obj-$(CONFIG_HPPFS)		+= hppfs/
+obj-$(CONFIG_DEBUG_FS)		+= debugfs/
diff -urN oldtree/fs/lufs/Makefile newtree/fs/lufs/Makefile
--- oldtree/fs/lufs/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/Makefile	2006-02-11 22:03:50.209468632 -0500
@@ -0,0 +1,14 @@
+#
+# Makefile for the linux lufs-filesystem routines.
+#
+
+obj-$(CONFIG_LUFS_FS) += lufs.o
+
+lufs-objs := proc.o dir.o inode.o file.o symlink.o
+
+# If you want debugging output, you may add these flags to the EXTRA_CFLAGS
+
+#EXTRA_CFLAGS += -DLUFS_DEBUG
+#EXTRA_CFLAGS += -DLUFS_DEBUG_VERBOSE
+
+
diff -urN oldtree/fs/lufs/dir.c newtree/fs/lufs/dir.c
--- oldtree/fs/lufs/dir.c	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/dir.c	2006-02-11 22:03:50.210468480 -0500
@@ -0,0 +1,582 @@
+/*
+ * dir.c
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/ctype.h>
+#include <linux/socket.h>
+
+#include <asm/uaccess.h>
+#include <asm/system.h>
+
+#include <linux/smp_lock.h>
+
+#include "lufs.h"
+#include "proc.h"
+
+
+extern struct inode* lu_iget(struct super_block*, struct lufs_fattr*);
+extern int lufs_notify_change(struct dentry*, struct iattr*);
+
+static int lu_readdir(struct file*, void*, filldir_t);
+
+static struct dentry *lu_lookup(struct inode*, struct dentry*, struct nameidata *);
+static int lu_mkdir(struct inode*, struct dentry*, int);
+static int lu_create(struct inode*, struct dentry*, int, struct nameidata*);
+static int lu_rmdir(struct inode*, struct dentry*);
+static int lu_rename(struct inode*, struct dentry*, struct inode*, struct dentry*);
+static int lu_unlink(struct inode*, struct dentry*);
+static int lu_link(struct dentry*, struct inode*, struct dentry*);
+static int lu_symlink(struct inode*, struct dentry*, const char*);
+
+struct file_operations lu_dir_operations = {
+    .read	= generic_read_dir,
+    .readdir	= lu_readdir,
+};
+
+struct inode_operations lu_dir_inode_operations = {
+    .create	= lu_create,
+    .lookup	= lu_lookup,
+    .link	= lu_link,
+    .unlink	= lu_unlink,
+    .symlink	= lu_symlink,
+    .mkdir	= lu_mkdir,
+    .rmdir	= lu_rmdir,
+    .rename	= lu_rename,
+    .setattr	= lufs_notify_change,
+};
+
+static int lu_lookup_validate(struct dentry *dentry, struct nameidata *nd)
+{
+    struct inode *inode = dentry->d_inode;
+    unsigned long age = jiffies - dentry->d_time;
+    int res;
+    
+    TRACE("in\n");
+    
+    res = (age <= LU_MAXAGE);
+    TRACE("age: %lu, valid: %d\n", age, res);
+
+    if(!res)
+	res = (lu_revalidate_inode(dentry) == 0);
+
+    
+    if(inode){
+	lock_kernel();
+
+	if(is_bad_inode(inode))
+	    res = 0;
+	unlock_kernel();
+    }else
+	TRACE("no inode?!\n");
+
+    TRACE("out(res=%d)\n", res);
+
+    return res;
+}
+
+static int lu_delete_dentry(struct dentry *dentry)
+{
+    
+    TRACE("in\n");
+    if(dentry->d_inode && is_bad_inode(dentry->d_inode)){
+	WARN("bad inode, unhashing \n");
+    	return 1;
+    }
+
+    TRACE("out\n");
+    return 0;
+}
+
+struct dentry_operations lufs_dentry_operations = {
+    .d_revalidate	= lu_lookup_validate,
+    .d_delete		= lu_delete_dentry,
+};
+
+static int lu_readdir(struct file *f, void *dirent, filldir_t filldir)
+{
+    int res = -1;
+    char *c;
+    struct qstr qname;
+    unsigned long ino;
+    struct iovec siov[2], riov;
+    struct server_slot *slot;
+    unsigned short offset;
+    
+    TRACE("in\n");
+    
+    if((slot = lu_getslot(GET_INFO(f->f_dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if(lu_getname(f->f_dentry, slot->s_buf, LU_MAXDATA) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    TRACE("reading %s, offset %u...\n", slot->s_buf, (unsigned)f->f_pos);
+    res = 0;
+    
+    switch((unsigned int)f->f_pos){
+
+    case 0:
+	if(filldir(dirent, ".", 1, 0, f->f_dentry->d_inode->i_ino, DT_DIR) < 0)
+	    goto out;
+	f->f_pos++;
+
+    case 1:
+	if(filldir(dirent, "..", 2, 1, f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
+	    goto out;
+	f->f_pos++;
+
+    default:
+	offset = f->f_pos;
+	siov[0].iov_base = &offset;
+	siov[0].iov_len = sizeof(unsigned short);
+	siov[1].iov_base = slot->s_buf;
+	siov[1].iov_len = strlen(slot->s_buf) + 1;
+	riov.iov_base = slot->s_buf;
+	riov.iov_len = LU_MAXDATA;
+
+	if((res = lu_execute(GET_INFO(f->f_dentry->d_inode->i_sb), slot, PTYPE_READDIR, siov, 2, &riov, 1)) < 0){
+	    WARN("could not read directory content!\n");
+	    if(res == -ERESTARTSYS)
+		res = -EINTR;
+	    goto out;
+	}
+	if(PIS_ERROR(res)){
+	    WARN("server failure!\n");
+	    res = PERROR(res);
+	    goto out;
+	}
+	for(qname.name = slot->s_buf, c = strchr(slot->s_buf, '\n'); c != NULL; qname.name = c+1, c = strchr(c+1, '\n')){
+	    *c = 0;
+	    TRACE("direntry: %s.\n", qname.name);
+	    qname.len = strlen(qname.name);
+	    if((ino = find_inode_number(f->f_dentry, &qname)) == 0)
+		ino = iunique(f->f_dentry->d_sb, 2);
+	    if(filldir(dirent, qname.name, qname.len, f->f_pos, ino, DT_UNKNOWN) < 0)
+		break;
+	    f->f_pos++;	    
+	}
+    }
+
+    TRACE("out\n");
+ out:
+    lu_putslot(slot);
+    return res;
+}
+
+static struct dentry* lu_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+{
+    int res;
+    struct lufs_fattr fattr;
+    struct iovec siov, riov;
+    struct inode *inode;
+    struct server_slot *slot;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dir->i_sb))) == NULL)
+	return ERR_PTR(-ERESTARTSYS);
+    
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    TRACE("looking up %s\n", slot->s_buf);
+    
+    siov.iov_base = slot->s_buf;
+    siov.iov_len = strlen(slot->s_buf) + 1;
+    riov.iov_base = &fattr;
+    riov.iov_len = sizeof(struct lufs_fattr);
+
+    if((res = lu_execute(GET_INFO(dir->i_sb), slot, PTYPE_STAT, &siov, 1, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("File not found...\n");
+	dentry->d_op = &lufs_dentry_operations;
+	dentry->d_time = jiffies;
+	d_add(dentry, NULL);
+	lu_putslot(slot);
+	return NULL;
+    }
+
+    lu_fixattrs(GET_INFO(dir->i_sb), &fattr);
+
+    if(dentry == dentry->d_parent)
+	fattr.f_ino = 2;
+    else 
+	fattr.f_ino = iunique(dentry->d_sb, 2);
+
+    if((inode = lu_iget(dir->i_sb, &fattr))){
+	dentry->d_op = &lufs_dentry_operations;
+	dentry->d_time = jiffies;
+	d_add(dentry, inode);
+    }
+    res = 0;
+
+ out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return ERR_PTR(res);
+}
+
+static int lu_instantiate(struct dentry *dentry, char *name, struct server_slot *slot)
+{
+    int res;
+    struct lufs_fattr fattr;
+    struct iovec siov, riov;
+    struct inode *inode;
+
+    TRACE("in\n");
+
+    TRACE("instantiating %s\n", name);
+    
+    siov.iov_base = name;
+    siov.iov_len = strlen(name) + 1;
+    riov.iov_base = &fattr;
+    riov.iov_len = sizeof(struct lufs_fattr);
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_STAT, &siov, 1, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("File not found...\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    lu_fixattrs(GET_INFO(dentry->d_sb), &fattr);
+
+    fattr.f_ino = iunique(dentry->d_sb, 2);
+    inode = lu_iget(dentry->d_sb, &fattr);
+
+    if(!inode){
+	res = -EACCES;
+	goto out;
+    }
+
+    d_instantiate(dentry, inode);
+    res = 0;
+
+  out:
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_mkdir(struct inode *dir, struct dentry *dentry, int mode)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov[2];
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+    
+    iov[0].iov_base = &mode;
+    iov[0].iov_len = sizeof(mode);
+    iov[1].iov_base = slot->s_buf;
+    iov[1].iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_MKDIR, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("Could not create directory.\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    res = lu_instantiate(dentry, slot->s_buf, slot);
+
+  out:
+    lu_putslot(slot);
+    
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov[2];
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+    
+    iov[0].iov_base = &mode;
+    iov[0].iov_len = sizeof(mode);
+    iov[1].iov_base = slot->s_buf;
+    iov[1].iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_CREATE, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("Could not create file.\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    res = lu_instantiate(dentry, slot->s_buf, slot);
+    
+  out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_rmdir(struct inode *dir, struct dentry *dentry)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov;
+
+    if(!d_unhashed(dentry))
+	return -EBUSY;    
+
+    TRACE("in\n");
+    
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!");
+	goto out;
+    }
+    
+    iov.iov_base = slot->s_buf;
+    iov.iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_RMDIR, &iov, 1, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("rmdir failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+    res = 0;
+
+  out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)
+{
+    struct server_slot *slot;
+    int res;
+    struct iovec iov[2];
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(old_dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(old_dentry, slot->s_buf, LU_MAXPATHLEN)) < 0 ||
+       (res = lu_getname(new_dentry, &(slot->s_buf[LU_MAXPATHLEN]), LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    iov[0].iov_base = slot->s_buf;
+    iov[0].iov_len = strlen(slot->s_buf) + 1;
+    iov[1].iov_base = &(slot->s_buf[LU_MAXPATHLEN]);
+    iov[1].iov_len = strlen(&(slot->s_buf[LU_MAXPATHLEN])) + 1;
+
+    if((res = lu_execute(GET_INFO(old_dentry->d_sb), slot, PTYPE_RENAME, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("rename failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+    res = 0;
+
+  out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_unlink(struct inode *dir, struct dentry *dentry)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!");
+	goto out;
+    }
+    
+    iov.iov_base = slot->s_buf;
+    iov.iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_UNLINK, &iov, 1, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("unlink failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+    res = 0;
+
+  out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+
+static int lu_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov[2];
+
+    TRACE("in\n");
+
+    if(S_ISDIR(old_dentry->d_inode->i_mode))
+	return -EPERM;
+
+    if(!(slot = lu_getslot(GET_INFO(old_dentry->d_sb))))
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(old_dentry, slot->s_buf, LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    if((res = lu_getname(dentry, &slot->s_buf[LU_MAXPATHLEN], LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    iov[0].iov_base = slot->s_buf;
+    iov[0].iov_len = strlen(slot->s_buf) + 1;
+    iov[1].iov_base = &slot->s_buf[LU_MAXPATHLEN];
+    iov[1].iov_len = strlen(&slot->s_buf[LU_MAXPATHLEN]) + 1;
+
+    d_drop(dentry);
+
+    if((res = lu_execute(GET_INFO(old_dentry->d_sb), slot, PTYPE_LINK, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("link failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    res = 0;
+
+  out:
+    lu_putslot(slot);
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov[2];
+
+    TRACE("in\n");
+    TRACE("symlink: %s\n", symname);
+    
+    if(strlen(symname) > LU_MAXPATHLEN - 1)
+	return -ENAMETOOLONG;
+
+    if(!(slot = lu_getslot(GET_INFO(dentry->d_sb))))
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    TRACE("fname: %s\n", slot->s_buf);
+
+    strcpy(&slot->s_buf[LU_MAXPATHLEN], symname);
+
+    iov[0].iov_base = slot->s_buf;
+    iov[0].iov_len = strlen(slot->s_buf) + 1;
+    iov[1].iov_base = &slot->s_buf[LU_MAXPATHLEN];
+    iov[1].iov_len = strlen(&slot->s_buf[LU_MAXPATHLEN]) + 1;
+
+    d_drop(dentry);
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_SYMLINK, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("symlink failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    res = 0;
+
+  out:
+    lu_putslot(slot);
+    TRACE("out\n");
+    return res;
+}
+
+
+
diff -urN oldtree/fs/lufs/file.c newtree/fs/lufs/file.c
--- oldtree/fs/lufs/file.c	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/file.c	2006-02-11 22:03:50.211468328 -0500
@@ -0,0 +1,321 @@
+/*
+ * file.c
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/pagemap.h>
+#include <linux/socket.h>
+
+#include <asm/uaccess.h>
+#include <asm/system.h>
+
+#include <linux/smp_lock.h>
+
+#include "lufs.h"
+#include "proc.h"
+
+extern int lufs_notify_change(struct dentry*, struct iattr*);
+extern int lu_revalidate_inode(struct dentry*);
+
+static int lu_file_open(struct inode *inode, struct file *file)
+{
+    int res, gres;
+    struct server_slot *slot;
+    struct iovec iov[2];
+    unsigned flags;
+
+    TRACE("in\n");
+
+    if((gres = generic_file_open(inode, file)) < 0)
+	return gres;
+
+    TRACE("f_mode: %u, i_mode: %u\n", file->f_mode, inode->i_mode);
+    TRACE("f_flags: %u, i_flags: %u\n", file->f_flags, inode->i_flags);
+
+    if((slot = lu_getslot(GET_INFO(file->f_dentry->d_sb))) == NULL)
+	return gres;
+
+    if((res = lu_getname(file->f_dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    flags = file->f_flags & O_ACCMODE;
+    iov[0].iov_base = &flags;
+    iov[0].iov_len = sizeof(flags);
+    iov[1].iov_base = slot->s_buf;
+    iov[1].iov_len = strlen(slot->s_buf) + 1;
+
+    lu_execute(GET_INFO(file->f_dentry->d_sb), slot, PTYPE_OPEN, iov, 2, NULL, 0);
+
+out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return gres;
+}
+
+static int lu_file_release(struct inode *inode, struct file *file)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(file->f_dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(file->f_dentry, slot->s_buf, LU_MAXPATHLEN)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+    
+    iov.iov_base = slot->s_buf;
+    iov.iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(file->f_dentry->d_sb), slot, PTYPE_RELEASE, &iov, 1, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("release failed\n");
+	res = PERROR(res);
+	goto out;
+    }
+    
+    res = 0;
+
+out:
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_file_readpage(struct file *f, struct page *p)
+{
+    int res;
+    struct iovec siov[3], riov;
+    long long offset;
+    unsigned long count;
+    struct server_slot *slot;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(f->f_dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    get_page(p);
+
+    if((res = lu_getname(f->f_dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    offset = p->index << PAGE_CACHE_SHIFT;
+    count = PAGE_SIZE;
+
+    siov[0].iov_base = &offset;
+    siov[0].iov_len = sizeof(offset);
+    siov[1].iov_base = &count;
+    siov[1].iov_len = sizeof(count);
+    siov[2].iov_base = slot->s_buf;
+    siov[2].iov_len = strlen(slot->s_buf) + 1;
+
+    riov.iov_base = page_address(p);
+    riov.iov_len = count;
+
+    if((res = lu_execute(GET_INFO(f->f_dentry->d_sb), slot, PTYPE_READ, siov, 3, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("read failed\n");
+	res = PERROR(res);
+	goto out;
+    }
+    
+    flush_dcache_page(p);
+    SetPageUptodate(p);
+    res = 0;
+    
+  out:
+    lu_putslot(slot);
+    unlock_page(p);
+    put_page(p);
+        
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_file_writepage(struct page *p, struct writeback_control *wbc)
+{
+    TRACE("in\n");
+
+    TRACE("out\n");
+    return -1;
+}
+
+static int lu_file_preparewrite(struct file *f, struct page *p, unsigned offset, unsigned to)
+{
+    TRACE("in\n");
+
+    TRACE("out\n");
+
+    return 0;
+}
+
+static int lu_file_commitwrite(struct file *f, struct page *p, unsigned offset, unsigned to)
+{
+    int res;
+    struct server_slot *slot;
+    struct iovec iov[4];
+    char *buf;
+    long long off;
+    unsigned long cnt;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(f->f_dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(f->f_dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out2;
+    }
+
+    lock_kernel();
+
+    buf = kmap(p) + offset;
+    cnt = to - offset;
+    off = offset + (((long long)p->index) << PAGE_CACHE_SHIFT);
+
+    iov[0].iov_base = &off;
+    iov[0].iov_len = sizeof(off);
+    iov[1].iov_base = &cnt;
+    iov[1].iov_len = sizeof(cnt);
+    iov[2].iov_base = slot->s_buf;
+    iov[2].iov_len = strlen(slot->s_buf) + 1;
+    iov[3].iov_base = buf;
+    iov[3].iov_len = cnt;
+
+    TRACE("write %s, offset %Ld, count %d\n", slot->s_buf, off, (int)cnt);
+
+    if((res = lu_execute(GET_INFO(f->f_dentry->d_sb), slot, PTYPE_WRITE, iov, 4, NULL, 0)) < 0)
+	goto out1;
+
+
+    if(PIS_ERROR(res)){
+	TRACE("write failed\n");
+	res = PERROR(res);
+	goto out1;
+    }
+
+    f->f_dentry->d_inode->i_mtime = f->f_dentry->d_inode->i_atime = CURRENT_TIME;
+    if(off + cnt > f->f_dentry->d_inode->i_size)
+	f->f_dentry->d_inode->i_size = off + cnt;
+
+    res = cnt;
+
+  out1:
+    kunmap(p);
+    unlock_kernel();
+  out2:
+    lu_putslot(slot);
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_file_read(struct file *filp, char *buf, size_t count, loff_t *ppos)
+{
+    struct dentry *dentry = filp->f_dentry;
+    int res;
+
+    TRACE("in\n");
+
+    if(!(res = lu_revalidate_inode(dentry)))
+	res = generic_file_read(filp, buf, count, ppos);
+
+    TRACE("out\n");
+    
+    return res;
+}
+
+static int lu_file_mmap(struct file *filp, struct vm_area_struct *vma)
+{
+    struct dentry *dentry = filp->f_dentry;
+    int res;
+
+    TRACE("in\n");
+
+    if(!(res = lu_revalidate_inode(dentry)))
+	res = generic_file_mmap(filp, vma);
+
+    TRACE("out\n");
+
+    return res;
+}
+
+static ssize_t lu_file_write(struct file *filp, const char *buf, size_t count, loff_t *ppos)
+{
+    struct dentry *dentry = filp->f_dentry;
+    ssize_t res;
+
+    TRACE("in\n");
+
+    if(!(res = lu_revalidate_inode(dentry)) && (count > 0))
+	res = generic_file_write(filp, buf, count, ppos);
+
+    TRACE("out\n");
+
+    return res;
+}
+
+static int lu_file_fsync(struct file *filp, struct dentry *dentryp, int datasync)
+{    
+    return 0;
+}
+
+struct file_operations lu_file_operations = {
+    .llseek	= generic_file_llseek,
+    .read	= lu_file_read,
+    .write	= lu_file_write,
+    .mmap	= lu_file_mmap,
+    .open	= lu_file_open,
+    .release	= lu_file_release,
+    .fsync	= lu_file_fsync,
+};
+
+struct inode_operations lu_file_inode_operations = {
+    .setattr	= lufs_notify_change,
+};
+
+struct address_space_operations lu_file_aops = {
+    .readpage	       	= lu_file_readpage,
+    .writepage		= lu_file_writepage,
+    .prepare_write	= lu_file_preparewrite,
+    .commit_write	= lu_file_commitwrite,
+};
+
+
+
diff -urN oldtree/fs/lufs/fs.h newtree/fs/lufs/fs.h
--- oldtree/fs/lufs/fs.h	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/fs.h	2006-02-11 22:03:50.212468176 -0500
@@ -0,0 +1,112 @@
+/*
+ * lufs.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LUFS_FS_H_
+#define _LUFS_FS_H_
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dir_cache;
+struct directory;
+struct lufs_fattr;
+struct file_system;
+struct list_head;
+struct dir_cache;
+
+#define MAX_LEN		64
+
+struct credentials{
+    char	user[MAX_LEN];
+    char	group[MAX_LEN];
+    uid_t	uid;
+    gid_t	gid;
+};
+
+
+struct directory* lu_cache_mkdir(char*);
+int lu_cache_add2dir(struct directory*, char*, char*, struct lufs_fattr*);
+int lu_cache_lookup(struct dir_cache*, char*, char*, struct lufs_fattr*, char*, int);
+void lu_cache_add_dir(struct dir_cache*, struct directory*);
+void lu_cache_killdir(struct directory*);
+
+int lu_check_to(int, int, int);
+int lu_atomic_read(int, char*, int, int);
+int lu_atomic_write(int, char*, int, int);
+
+int lu_opt_loadcfg(struct list_head*, char*);
+int lu_opt_parse(struct list_head*, char*, char*);
+int lu_opt_getint(struct list_head*, char*, char*, long int*, int);
+const char* lu_opt_getchar(struct list_head*, char*, char*);
+
+
+#ifdef __cplusplus
+} /* end of extern "C" { */
+#endif
+
+#ifdef TRACE
+#undef TRACE
+#endif
+#ifdef WARN
+#undef WARN
+#endif
+#ifdef ERROR
+#undef ERROR
+#endif
+
+#ifdef __cplusplus
+
+#include <iostream>
+
+#ifdef DEBUG
+#define TRACE(x) 	cout<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#define WARN(x)		cerr<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#define ERROR(x)	cerr<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#else
+#define TRACE(x...)	do{}while(0)
+#define WARN(x...)	do{}while(0)
+#define ERROR(x...)	cerr<<x<<"\n"
+#endif
+
+#else
+
+#include <stdio.h>
+
+#ifdef DEBUG
+#define TRACE(x...)	do{fprintf(stdout, "[%x](%s) ", getpid(), __func__); fprintf(stdout, x); fprintf(stdout, "\n");}while(0)
+#define WARN(x...)	do{fprintf(stdout, "[%x](%s) ", getpid(), __func__); fprintf(stdout, x); fprintf(stdout, "\n");}while(0)
+#define ERROR(x...)	do{fprintf(stderr, "[%x](%s) ", getpid(), __func__); fprintf(stdout, x); fprintf(stdout, "\n");}while(0)
+#else
+#define TRACE(x...)	do{}while(0)
+#define WARN(x...)	do{}while(0)
+#define ERROR(x...)	do{fprintf(stderr, x); fprintf(stderr, "\n");}while(0)
+#endif
+
+#endif
+
+
+
+#endif
+
diff -urN oldtree/fs/lufs/inode.c newtree/fs/lufs/inode.c
--- oldtree/fs/lufs/inode.c	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/inode.c	2006-02-11 22:03:50.212468176 -0500
@@ -0,0 +1,535 @@
+/*
+ * inode.c
+ * Copyright (C) 2002-2003 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+#include <linux/signal.h>
+#include <linux/sched.h>
+#include <linux/socket.h>
+#include <linux/string.h>
+#include <linux/vfs.h>
+
+#include <asm/system.h>
+#include <asm/uaccess.h>
+
+#include "lufs.h"
+#include "proc.h"
+
+MODULE_AUTHOR("Florin Malita <mali@go.ro>");
+MODULE_DESCRIPTION("Linux Userland Filesystem");
+#ifdef MODULE_LICENSE
+MODULE_LICENSE("GPL");
+#endif
+
+extern struct file_operations lu_dir_operations, lu_file_operations;
+extern struct inode_operations lu_dir_inode_operations, lu_file_inode_operations, lu_symlink_inode_operations;
+extern struct address_space_operations lu_file_aops;
+extern struct dentry_operations lufs_dentry_operations;
+
+static void lu_delete_inode(struct inode*);
+static void lu_put_super(struct super_block*);
+static int  lu_statfs(struct super_block*, struct kstatfs*);
+
+static struct super_operations lu_sops = {
+    .drop_inode		= generic_delete_inode,
+    .delete_inode	= lu_delete_inode,
+    .put_super		= lu_put_super,
+    .statfs		= lu_statfs,
+};
+
+
+/*
+ * Ignore unknown options, they're probably for the userspace daemon.
+ */
+static void parse_options(struct lufs_sb_info *server, char *opts)
+{
+    char *p, *q;
+    int len;
+
+    if(!opts)
+	return;
+
+    len = strlen(opts);
+
+    while((p = strsep(&opts, ","))){
+	if(strncmp(p, "server_socket=", 14) == 0){
+	    if(strlen(p+14) > UNIX_PATH_MAX)
+		goto ugly_opts;
+	    strcpy(server->server_socket, p+14);
+	    TRACE("server_socket: %s\n", server->server_socket);
+	}else 
+	if(strncmp(p, "uid=", 4) == 0){
+	    if(current->uid)
+		ERROR("only root can use uid option!\n");
+	    else{
+		if(strlen(p+4) > 5)
+		    goto ugly_opts;
+		q = p + 4;
+		server->config.uid = simple_strtoul(q, &q, 0);
+		TRACE("uid: %d\n", server->config.uid); 
+	    }
+	}else
+	if(strncmp(p, "gid=", 4) == 0){
+	    if(current->uid)
+		ERROR("only root can use gid option!\n");
+	    else{
+		if(strlen(p+4) > 5)
+		    goto ugly_opts;
+		q = p + 4;
+		server->config.gid = simple_strtoul(q, &q, 0);
+		TRACE("gid: %d\n", server->config.gid); 
+	    }
+	}else
+	if(strncmp(p, "fmask=", 6) == 0){
+	    if(strlen(p + 6) > 3)
+		goto ugly_opts;
+	    q = p + 6;
+	    server->config.fmode = (((q[0] - '0') << 6) + ((q[1] - '0') << 3) + (q[2] - '0')) & (S_IRWXU | S_IRWXG | S_IRWXO);
+	    TRACE("fmode: %d\n", server->config.fmode);
+	}else
+	if(strncmp(p, "dmask=", 6) == 0){
+	    if(strlen(p + 6) > 3)
+		goto ugly_opts;
+	    q = p + 6;
+	    server->config.dmode = (((q[0] - '0') << 6) + ((q[1] - '0') << 3) + (q[2] - '0')) & (S_IRWXU | S_IRWXG | S_IRWXO);
+	    TRACE("dmode: %d\n", server->config.dmode);
+	}else
+	if(strncmp(p, "root=", 5) == 0){
+	    if(strlen(p+5) >= UNIX_PATH_MAX - 1)
+		goto ugly_opts;
+	    strcpy(server->root, p+5);
+	    server->rootlen = strlen(server->root);
+	    
+	    if(server->root[server->rootlen - 1] == '/'){
+		server->root[server->rootlen - 1] = 0;
+		server->rootlen--;
+	    }
+			    
+	    TRACE("remote root: %s, len: %u\n", server->root, server->rootlen);
+	}else
+	if(strncmp(p, "channels=", 9) == 0){
+	    if(strlen(p+9) > 5)
+		goto ugly_opts;
+	    q = p + 9;
+	    server->config.channels = simple_strtoul(q, &q, 0);
+	    
+	    TRACE("channels: %u\n", server->config.channels);
+	}else
+	if(strncmp(p, "own_fs", 6) == 0){
+	    server->config.own_fs = 1;
+	    TRACE("forcing ownership\n");
+	}else
+	if(strncmp(p, "server_pid=", 11) == 0){
+	    if(strlen(p+11) > 7)
+		goto ugly_opts;
+	    q = p + 11;
+	    server->server_pid = simple_strtoul(q, &q, 0);
+
+	    TRACE("server_pid: %u\n", server->server_pid);
+	}
+    }
+
+    return;
+
+  ugly_opts:
+    WARN("evil options!\n");
+}
+
+/*
+ * Fill in inode attributes. 
+ * Ivalidate the page_cache pages if the inode has been modified.
+ */
+static void set_inode_attr(struct inode *inode, struct lufs_fattr *fattr)
+{
+    time_t last_time = inode->i_mtime.tv_sec;
+    loff_t last_sz = inode->i_size;
+
+    TRACE("in\n");
+    
+    inode->i_mode = fattr->f_mode;
+    inode->i_nlink = fattr->f_nlink;
+    inode->i_uid = fattr->f_uid;
+    inode->i_gid = fattr->f_gid;
+    inode->i_ctime.tv_sec = fattr->f_ctime;
+    inode->i_mtime.tv_sec = fattr->f_mtime;
+    inode->i_atime.tv_sec = fattr->f_atime;
+    inode->i_blksize = fattr->f_blksize;
+    inode->i_blocks = fattr->f_blocks;
+    inode->i_size = fattr->f_size;
+
+    if(inode->i_mtime.tv_sec != last_time || inode->i_size != last_sz){
+	TRACE("inode changed...\n");
+	if(!S_ISDIR(inode->i_mode))
+	    invalidate_inode_pages(inode->i_mapping);
+    }
+
+    TRACE("out\n");
+}
+
+static int lu_do_stat(struct dentry *dentry, struct lufs_fattr *fattr)
+{
+    struct server_slot *slot;
+    struct iovec siov, riov;
+    int res;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    TRACE("stating %s...\n", slot->s_buf);
+
+    siov.iov_base = slot->s_buf;
+    siov.iov_len = strlen(slot->s_buf) + 1;
+    riov.iov_base = fattr;
+    riov.iov_len = sizeof(struct lufs_fattr);
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_STAT, &siov, 1, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	WARN("stat failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    lu_fixattrs(GET_INFO(dentry->d_sb), fattr);
+
+    res = 0;
+
+  out:
+    TRACE("out\n");
+    lu_putslot(slot);
+    return res;
+}
+
+/*
+ * Reload inode attributes.
+ */
+static int lu_refresh_inode(struct dentry *dentry)
+{
+    struct inode *inode = dentry->d_inode;
+    struct lufs_fattr fattr;
+    int res;
+
+    TRACE("in\n");
+
+    if((res = lu_do_stat(dentry, &fattr)) < 0)
+	return res;
+
+    dentry->d_time = jiffies;
+
+    if(!inode)
+	return 0;
+
+    if((inode->i_mode & S_IFMT) == (fattr.f_mode & S_IFMT))
+	set_inode_attr(inode, &fattr);
+    else{
+	WARN("inode changed mode, %x to %x\n", inode->i_mode, (unsigned int)fattr.f_mode);
+	TRACE("oops!\n");
+	
+	fattr.f_mode = inode->i_mode;
+	make_bad_inode(inode);
+	inode->i_mode = fattr.f_mode;
+
+	if(!S_ISDIR(inode->i_mode))
+	    invalidate_inode_pages(inode->i_mapping);
+	    
+	return -EIO;
+    }
+
+    TRACE("out\n");
+    return 0;
+}
+
+int lu_revalidate_inode(struct dentry *dentry)
+{
+    int res = 0;
+
+    TRACE("in\n");
+    
+    lock_kernel();
+    
+    if(time_before(jiffies, dentry->d_time + LU_MAXAGE))
+	goto out;
+
+    res = lu_refresh_inode(dentry);
+
+  out:
+    TRACE("out\n");
+    unlock_kernel();
+    return res;
+}
+
+int lufs_notify_change(struct dentry *dentry, struct iattr *iattr)
+{
+    struct server_slot *slot;
+    struct iovec iov[2];
+    struct lufs_fattr fattr;
+    int res;
+
+    TRACE("in\n");
+
+    if((res = lu_do_stat(dentry, &fattr)) < 0)
+	return res;
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return -ERESTARTSYS;
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+    
+    if(iattr->ia_valid & ATTR_MODE)
+	fattr.f_mode = iattr->ia_mode;
+    if(iattr->ia_valid & ATTR_UID)
+	fattr.f_uid  = iattr->ia_uid;
+    if(iattr->ia_valid & ATTR_GID)
+	fattr.f_gid  = iattr->ia_gid;
+    if(iattr->ia_valid & ATTR_SIZE)
+	fattr.f_size = iattr->ia_size;
+    if(iattr->ia_valid & ATTR_ATIME)
+	fattr.f_atime= iattr->ia_atime.tv_sec;
+    if(iattr->ia_valid & ATTR_MTIME)
+	fattr.f_mtime= iattr->ia_mtime.tv_sec;
+    if(iattr->ia_valid & ATTR_CTIME)
+	fattr.f_ctime= iattr->ia_ctime.tv_sec;
+
+    iov[0].iov_base = &fattr;
+    iov[0].iov_len = sizeof(struct lufs_fattr);
+    iov[1].iov_base = slot->s_buf;
+    iov[1].iov_len = strlen(slot->s_buf) + 1;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_SETATTR, iov, 2, NULL, 0)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	WARN("setattr failed!\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    res = 0;
+
+    lu_refresh_inode(dentry);
+
+  out:
+    TRACE("out\n");
+    lu_putslot(slot);
+    return res;
+}
+
+/*
+ * We always create a new inode here.
+ */
+struct inode* lu_iget(struct super_block *sb, struct lufs_fattr *fattr)
+{
+    struct inode *res;
+
+    TRACE("in\n");
+    
+    res = new_inode(sb);
+    if(!res)
+	return NULL;
+    res->i_ino = fattr->f_ino;
+    set_inode_attr(res, fattr);
+
+    if(S_ISDIR(res->i_mode)){
+	TRACE("it's a dir.\n");
+	res->i_op = &lu_dir_inode_operations;
+	res->i_fop = &lu_dir_operations;
+    }else if(S_ISLNK(res->i_mode)){
+	TRACE("it's a link.\n");
+	res->i_op = &lu_symlink_inode_operations;
+    }else{
+	TRACE("it's a file.\n");
+	res->i_op = &lu_file_inode_operations;
+	res->i_fop = &lu_file_operations;
+	res->i_data.a_ops = &lu_file_aops;
+    }
+	
+    insert_inode_hash(res);
+    return res;
+}
+
+static int lu_statfs(struct super_block *sb, struct kstatfs *attr)
+{
+    TRACE("in\n");
+    
+    attr->f_type = LU_MAGIC;
+    attr->f_bsize = LU_BLOCKSIZE;
+    attr->f_blocks = 0;
+    attr->f_namelen = LU_MAXPATHLEN;
+    attr->f_files = -1;
+    attr->f_bavail = -1;
+
+    TRACE("out\n");
+    return 0;
+}
+
+static void lu_put_super(struct super_block *sb)
+{
+    struct siginfo info;
+
+    TRACE("in\n");
+
+    info.si_signo = SIGUSR1;
+    info.si_errno = 0;
+    info.si_code = SI_USER;
+    info.si_pid = current->pid;
+    info.si_uid = current->uid;
+    
+    /* notify the daemon that we're going bye-bye */
+    kill_proc_info(SIGUSR1, &info, GET_INFO(sb)->server_pid);
+
+    lu_empty_slots(GET_INFO(sb));
+    kfree(GET_INFO(sb));
+    TRACE("out\n");
+}
+
+static void lu_delete_inode(struct inode *in)
+{
+    TRACE("in\n");
+    clear_inode(in);
+    TRACE("out\n");
+}
+
+static int lu_fill_super(struct super_block *sb, void *opts, int silent)
+{
+    struct lufs_sb_info *info;
+    struct server_slot *slot;
+    struct lufs_fattr root_attr;
+    struct inode *root_inode;
+
+    int i;
+
+    TRACE("in\n");
+    
+    if(!opts){
+	ERROR("need some options here!\n");
+	goto out;
+    }
+    
+    if((info = (struct lufs_sb_info*)kmalloc(sizeof(struct lufs_sb_info), GFP_KERNEL)) == NULL){
+	ERROR("kmalloc error!\n");
+	goto out;
+    }
+    memset(info, 0, sizeof(struct lufs_sb_info));
+    info->lock = RW_LOCK_UNLOCKED;
+    INIT_LIST_HEAD(&info->slots);
+
+    info->config.uid = current->uid;
+    info->config.gid = current->gid;    
+    info->config.channels = LU_NRSLOTS;
+    
+    parse_options(info, opts);
+    
+    if(!info->server_socket[0]){
+	ERROR("no server_socket specified!\n");
+	goto out_info;
+    }
+    
+    for(i = 0; i < info->config.channels; i++){
+	if((slot = kmalloc(sizeof(struct server_slot), GFP_KERNEL)) == NULL){
+	    ERROR("kmalloc error!\n");
+	    goto out_slots;
+	}
+	memset(slot, 0, sizeof(struct server_slot));
+	init_MUTEX(&slot->s_lock);
+	if((slot->s_buf = kmalloc(LU_MAXDATA, GFP_KERNEL)) == NULL){
+	    ERROR("kmalloc error!\n");
+	    goto out_slots;
+	}
+	list_add(&slot->s_list, &info->slots);
+    }
+
+    sb->s_fs_info = info;
+    sb->s_blocksize = LU_BLOCKSIZE;
+    sb->s_blocksize_bits = LU_BLOCKSIZEBITS;
+    sb->s_magic = LU_MAGIC;
+    sb->s_op = &lu_sops;
+    sb->s_flags = 0;
+    sb->s_maxbytes = ((((long long)1) << 32) << LU_BLOCKSIZEBITS) - 1;
+    TRACE("sb->s_maxbytes=%Ld\n",sb->s_maxbytes);
+
+    lu_lookup_root(info, &root_attr);
+    root_inode = lu_iget(sb, &root_attr);
+    if(!root_inode)
+	goto out_slots;
+    sb->s_root = d_alloc_root(root_inode);
+    if(!sb->s_root)
+	goto out_slots;
+
+    sb->s_root->d_op = &lufs_dentry_operations;
+    sb->s_root->d_time = jiffies;
+
+    TRACE("mount succeded: %s\n", info->server_socket);
+    return 0;
+
+ out_slots:
+    lu_empty_slots(info);
+ out_info:
+    kfree(info);
+ out:
+    ERROR("mount failed!\n");
+    return -EINVAL;
+}
+
+static struct super_block *lu_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
+{
+    return get_sb_nodev(fs_type, flags, data, lu_fill_super);
+}
+
+static struct file_system_type lu_fs_type = {
+    .owner	= THIS_MODULE,
+    .name	= "lufs",
+    .get_sb	= lu_get_sb,
+    .kill_sb	= kill_anon_super,
+};
+
+static int __init lu_init(void)
+{
+    VERBOSE("UserLand File System\n");
+    VERBOSE("Copyright (c) 2002, Florin Malita\n");
+    return register_filesystem(&lu_fs_type);
+}
+
+static void __exit lu_release(void)
+{
+    VERBOSE("Unregistering lufs...\n");
+    unregister_filesystem(&lu_fs_type);
+}
+
+module_init(lu_init);
+module_exit(lu_release);
diff -urN oldtree/fs/lufs/lufs.h newtree/fs/lufs/lufs.h
--- oldtree/fs/lufs/lufs.h	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/lufs.h	2006-02-11 22:03:50.213468024 -0500
@@ -0,0 +1,87 @@
+/*
+ * lufs.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LUFS_H_
+#define _LUFS_H_
+
+#include <linux/list.h>
+#include <linux/un.h>
+#include <linux/spinlock.h>
+
+#include "proto.h"
+
+#undef TRACE
+#undef WARN
+#undef VERBOSE
+#undef ERROR
+
+#ifdef LUFS_DEBUG
+#define TRACE(x...) 	do { printk(KERN_INFO "(%s) - ", __func__); printk(x); } while(0)
+#define WARN(x...) 	do { printk(KERN_ERR "(%s) - ", __func__); printk(x); } while(0)
+#else
+#define TRACE(x...) 	do {} while(0)
+#define WARN(x...)	do {} while(0)
+#endif
+
+#ifdef LUFS_VERBOSE
+#define VERBOSE(x...) 	do { printk(KERN_INFO "(%s) - ", __func__); printk(x); } while(0)
+#else
+#define VERBOSE(x...)	do {} while(0)
+#endif
+
+#define ERROR(x...) 	do { printk(KERN_ERR "(%s) - ", __func__); printk(x); } while(0)
+
+#define GET_INFO(sb)	((struct lufs_sb_info*)sb->s_fs_info)
+
+#define LU_MAXPATHLEN	1024
+#define LU_MAXTRIES	10
+#define LU_MAXIOVEC	5
+#define LU_NRSLOTS	3
+#define LU_MAGIC	0xfade
+#define LU_MAXAGE	HZ*5
+
+#define LU_DEF_UID	2
+#define LU_DEF_GID	2
+
+#define LU_BLOCKSIZE	512
+#define LU_BLOCKSIZEBITS	9
+
+struct lufs_config{
+    __kernel_uid_t 	uid;
+    __kernel_gid_t	gid;
+    __kernel_mode_t	fmode;
+    __kernel_mode_t	dmode;
+    unsigned 		channels;
+    int			own_fs;
+};
+
+struct lufs_sb_info{
+    struct list_head	slots;
+    struct lufs_config	config;
+    rwlock_t		lock;
+    char 		server_socket[UNIX_PATH_MAX];
+    pid_t		server_pid;
+    char		root[UNIX_PATH_MAX];
+    unsigned 		rootlen;
+};
+
+#endif
diff -urN oldtree/fs/lufs/proc.c newtree/fs/lufs/proc.c
--- oldtree/fs/lufs/proc.c	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/proc.c	2006-02-11 22:03:50.213468024 -0500
@@ -0,0 +1,505 @@
+/*
+ * proc.c
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/socket.h>
+#include <linux/un.h>
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/smp_lock.h>
+#include <linux/net.h>
+#include <linux/vfs.h>
+#include <linux/mount.h>
+
+#include <asm/system.h>
+#include <asm/uaccess.h>
+
+#include "lufs.h"
+#include "proc.h"
+
+static int sock_send(struct socket *sock, struct iovec *iov, int len)
+{
+    struct msghdr msg = {
+	.msg_name	= NULL,
+	.msg_namelen	= 0,
+	.msg_iov	= iov,
+	.msg_iovlen	= len,
+	.msg_control	= NULL,
+	.msg_controllen	= 0,
+	.msg_flags	= 0
+    };
+    int res, i, size;
+    mm_segment_t fs;
+
+    for(i = 0, size = 0; i < len; i++)
+	size += iov[i].iov_len;
+    
+    fs = get_fs();
+    set_fs(get_ds());
+    res = sock_sendmsg(sock, &msg, size);
+    set_fs(fs);
+
+    return res;
+}
+
+static int sock_recv(struct socket *sock, struct iovec *iov, int len, int rsize, unsigned flags)
+{
+    struct msghdr msg = {
+	.msg_flags	= flags,
+	.msg_name	= NULL,
+	.msg_namelen	= 0,
+	.msg_iov	= iov,
+	.msg_iovlen	= len,
+	.msg_control	= NULL,
+	.msg_controllen	= 0
+    };
+    mm_segment_t fs;
+    int res, i, size;
+
+    for(i = 0, size = 0; i < len; i++)
+	size += iov[i].iov_len;
+
+    if(size < rsize){
+	VERBOSE("Trying to overflow old me?! Truncating...\n");
+	rsize = size;
+    }
+
+    fs = get_fs();
+    set_fs(get_ds());
+    res = sock_recvmsg(sock, &msg, rsize, flags);
+    set_fs(fs);
+
+    return res;
+}
+
+static int sock_connect(char *path, struct socket **s)
+{
+    struct sockaddr_un addr;
+    int res;
+
+    if(strlen(path) > UNIX_PATH_MAX - 1){
+	WARN("unix domain path too long: %s", path);
+	return -1;
+    }
+
+    addr.sun_family = AF_UNIX;
+    strcpy(addr.sun_path, path);
+
+    if((res = sock_create(PF_UNIX, SOCK_STREAM, 0, s)) < 0){
+	WARN("failed to create a unix domain socket!\n");
+	return res;
+    }
+
+    if((res = (*s)->ops->connect(*s, (struct sockaddr*)&addr, sizeof(addr), 0)) < 0){
+	WARN("failed to connect the socket: %d!\n", res);
+	return res;
+    }
+    return 0;
+}
+
+static int slot_reconnect(struct lufs_sb_info *info, struct server_slot *slot)
+{
+    int res = 0, tries = 0;
+
+    if(slot->s_sock){
+	TRACE("closing socket.\n");
+	sock_release(slot->s_sock);
+	slot->s_sock = NULL;
+    }
+
+    while(tries++ < LU_MAXTRIES && (res = sock_connect(info->server_socket, &slot->s_sock)) < 0){
+	TRACE("retrying...\n");
+	sock_release(slot->s_sock);
+	slot->s_sock = NULL;
+    }
+
+    if(res >= 0){
+	TRACE("successfully reconnected.\n");
+    }
+
+    return res;
+}
+
+void lu_empty_slots(struct lufs_sb_info *info)
+{
+    struct server_slot *slot;
+
+    while(!list_empty(&info->slots)){
+	slot = list_entry(info->slots.next, struct server_slot, s_list);
+	if(slot->s_sock)
+	    sock_release(slot->s_sock);
+	list_del(&slot->s_list);
+	if(slot->s_buf)
+	    kfree(slot->s_buf);
+	kfree(slot);
+    }
+}
+
+static int do_execute(struct socket *sock, unsigned short cmd, unsigned short msglen, struct iovec *siov, unsigned short slen, struct iovec *riov, unsigned short rlen)
+{
+    struct lu_msg msg;
+    struct iovec iov;
+    int res;
+
+    TRACE("msg_len: %d\n", msglen);
+    
+    msg.msg_version = PVERSION;
+    msg.msg_type = cmd;
+    msg.msg_datalen = msglen;
+    msg.msg_pid = current->pid;
+
+    iov.iov_base = &msg;
+    iov.iov_len = sizeof(struct lu_msg);
+
+    if((res = sock_send(sock, &iov, 1)) < 0){
+	WARN("sock_send failed!\n");
+	return res;
+    }
+    if((res = sock_send(sock, siov, slen)) < 0){
+	WARN("sock_send failed!\n");
+	return res;
+    }
+
+    iov.iov_base = &msg;
+    iov.iov_len = sizeof(struct lu_msg);
+    if((res = sock_recv(sock, &iov, 1, sizeof(struct lu_msg), 0)) < 0){
+	WARN("sock_recv failed!\n");
+	return res;
+    }
+    if(res != sizeof(struct lu_msg)){
+	WARN("Ayeeee, didn't read a whole header!\n");
+	return -EBUSY;
+    }
+    
+    if((msg.msg_datalen == 0))
+	return msg.msg_type;
+
+    if(riov == NULL){
+	WARN("Unexpected data!!! Getting out of sync...\n");
+	return -1;
+    }
+	
+    if((res = sock_recv(sock, riov, rlen, msg.msg_datalen, 0)) < 0){
+	WARN("sock_recv failed!\n");
+	return res;
+    }
+
+    return msg.msg_type;
+}
+
+struct server_slot* lu_getslot(struct lufs_sb_info *info)
+{
+    struct list_head *p, *nd_best = NULL;
+    struct server_slot *slot;
+    int gotlock = 0;
+
+    /* Look for a slot used by this process before */
+    read_lock(&info->lock);
+    list_for_each(p, &info->slots)
+	if(list_entry(p, struct server_slot, s_list)->s_lastpid == current->pid){
+	    TRACE("found a previous used slot for %u.\n", current->pid);
+	    if(down_trylock(&list_entry(p, struct server_slot, s_list)->s_lock) == 0){
+		gotlock = 1;
+		break;
+	    }
+	    TRACE("oops! I still hold the lock! forget this one...\n");
+	}else 
+	    if(!nd_best){
+		nd_best = p;
+	    }
+
+    /* if we couldn't find one, take the first not locked by us */	
+    if(p == &info->slots){
+	if(!nd_best){
+	    ERROR("deadlock: all locks owned by us!\n");
+	    read_unlock(&info->lock);
+	    return NULL;
+	}else
+	    p = nd_best;
+	
+    }
+    read_unlock(&info->lock);
+
+    slot = list_entry(p, struct server_slot, s_list);
+    
+    /* Get the lock on that slot */
+    if(!gotlock)
+	if(down_interruptible(&slot->s_lock))
+	    return NULL;
+
+    slot->s_lastpid = current->pid;
+
+    /* Move it to the tail */
+    write_lock(&info->lock);
+    list_del(p);
+    list_add_tail(p, &info->slots);
+    write_unlock(&info->lock);
+
+    return slot;
+}
+
+void lu_putslot(struct server_slot *slot)
+{
+    up(&slot->s_lock);
+}
+
+int lu_execute(struct lufs_sb_info *info, struct server_slot *slot, unsigned short cmd, struct iovec *siov, unsigned short slen, struct iovec *riov, unsigned short rlen)
+{
+    int res, i, msglen;
+    struct iovec bkup[LU_MAXIOVEC];
+
+    for(i = 0, msglen = 0; i < slen; i++){
+	bkup[i] = siov[i];
+	msglen += siov[i].iov_len;
+    }
+
+    if(slot->s_sock == NULL){
+	TRACE("slot not connected.\n");
+	if((res = slot_reconnect(info, slot)) < 0){
+	    ERROR("failed to connect!\n");
+	    goto out;
+	}
+    }
+
+    if((res = do_execute(slot->s_sock, cmd, msglen, siov, slen, riov, rlen)) < 0){
+	TRACE("do_execute failed!\n");
+
+	if(signal_pending(current) && (!sigismember(&current->pending.signal, SIGPIPE))){
+	    TRACE("interrupted by a signal. disconnecting this slot...\n");
+	    sock_release(slot->s_sock);
+	    slot->s_sock = NULL;
+	    goto out;
+	}
+	
+	if(sigismember(&current->pending.signal, SIGPIPE)){
+	    TRACE("got a SIGPIPE\n");
+	    sigdelset(&current->pending.signal, SIGPIPE);
+	}
+
+	if((res = slot_reconnect(info, slot)) < 0){
+	    ERROR("could't reconnect!\n");
+	    goto out;
+	}
+	    
+	for(i = 0; i < slen; i++)
+	    siov[i] = bkup[i];
+	        
+	if((res = do_execute(slot->s_sock, cmd, msglen, siov, slen, riov, rlen)) < 0){
+	    ERROR("error executing command!\n");
+	    goto out;
+	}
+    }
+    
+ out:
+    return res;
+}
+
+int lu_getname(struct dentry *d, char *name, int max)
+{
+    int len = 0;
+    struct dentry *p;
+    struct lufs_sb_info *info = GET_INFO(d->d_sb);
+    
+    for(p = d; p != p->d_parent; p = p->d_parent)
+	len += p->d_name.len + 1;
+
+    TRACE("root: %s, rootlen: %d, namelen: %d\n", info->root, info->rootlen, len);
+    
+    if(len + info->rootlen > max)
+	return -1;
+
+    strcpy(name, info->root);
+
+    if(len + info->rootlen == 0){
+	strcat(name, "/");
+    	goto out;
+    }
+    
+    len += info->rootlen;
+
+    name[len] = 0;
+    for(p = d; p != p->d_parent; p = p->d_parent){
+	len -= p->d_name.len;
+	strncpy(&(name[len]), p->d_name.name, p->d_name.len);
+	name[--len] = '/';
+    }
+
+out:
+    TRACE("name resolved to %s\n", name);
+    return 0;
+}
+
+int lu_getname_dumb(struct dentry *d, char *name, int max)
+{
+    int len = 0;
+    struct dentry *p;
+
+    for(p = d; p != p->d_parent; p = p->d_parent)
+	len += p->d_name.len + 1;
+
+    if(len > max)
+	return -1;
+
+    if(len == 0){
+	name[0] = '/';
+	name[1] = 0;
+	goto out;
+    }
+
+    name[len] = 0;
+    for(p = d; p != p->d_parent; p = p->d_parent){
+	len -= p->d_name.len;
+	strncpy(&(name[len]), p->d_name.name, p->d_name.len);
+	name[--len] = '/';
+    }
+
+out:
+    return 0;
+}
+
+static void init_root_dirent(struct lufs_sb_info *server, struct lufs_fattr *fattr)
+{
+    memset(fattr, 0, sizeof(struct lufs_fattr));
+    fattr->f_nlink = 1;
+    fattr->f_uid = server->config.uid;
+    fattr->f_gid = server->config.gid;
+    fattr->f_blksize = 512;
+    fattr->f_ino = 2;
+    fattr->f_mtime = CURRENT_TIME.tv_sec;
+    fattr->f_mode = S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH | S_IFDIR | server->config.dmode;
+    fattr->f_size = 512;
+    fattr->f_blocks = 1;
+}
+
+void lu_lookup_root(struct lufs_sb_info *server, struct lufs_fattr *fattr)
+{
+    struct server_slot *slot;
+    struct iovec siov, riov;
+    int res;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(server)) == NULL){
+	init_root_dirent(server, fattr);
+	return;
+    }
+    
+    if(server->rootlen)
+	strcpy(slot->s_buf, server->root);
+    else
+	strcpy(slot->s_buf, "/");
+	
+    TRACE("stating root %s\n", slot->s_buf);
+
+    siov.iov_base = slot->s_buf;
+    siov.iov_len = strlen(slot->s_buf) + 1;
+    riov.iov_base = fattr;
+    riov.iov_len = sizeof(struct lufs_fattr);
+
+    if((res = lu_execute(server, slot, PTYPE_STAT, &siov, 1, &riov, 1)) < 0){
+	init_root_dirent(server, fattr);
+	goto out;
+    }
+
+    if(PIS_ERROR(res)){
+	WARN("stat failed!\n");
+	init_root_dirent(server, fattr);
+	goto out;
+    }
+
+    lu_fixattrs(server, fattr);
+
+    fattr->f_ino = 2;
+
+  out:
+    TRACE("out\n");
+    lu_putslot(slot);
+}
+
+void lu_fixattrs(struct lufs_sb_info *info, struct lufs_fattr *fattr)
+{
+
+    fattr->f_blksize = LU_BLOCKSIZE;
+    
+    if(S_ISREG(fattr->f_mode) || S_ISDIR(fattr->f_mode))
+	fattr->f_blocks = (fattr->f_size + LU_BLOCKSIZE - 1) / LU_BLOCKSIZE;
+    else
+	fattr->f_blocks = 0;
+
+    if(info->config.own_fs){
+
+	if(!fattr->f_uid)
+	    fattr->f_mode = (fattr->f_mode & ~S_IRWXU) | ((fattr->f_mode & S_IRWXO)*(S_IRWXU/S_IRWXO));
+
+	if(!fattr->f_gid)
+	    fattr->f_mode = (fattr->f_mode & ~S_IRWXG) | ((fattr->f_mode & S_IRWXO)*(S_IRWXG/S_IRWXO));
+	
+	fattr->f_uid = info->config.uid;
+	fattr->f_gid = info->config.gid;
+
+    }else{
+	
+	if(fattr->f_uid)
+	    fattr->f_uid = info->config.uid;
+	else
+	    fattr->f_uid = LU_DEF_UID;
+
+	if(fattr->f_gid)
+	    fattr->f_gid = info->config.gid;
+	else
+	    fattr->f_gid = LU_DEF_GID;
+    }
+
+    if(fattr->f_mode & S_IFDIR)
+	fattr->f_mode |= info->config.dmode;
+    else
+	fattr->f_mode |= info->config.fmode;
+}
+
+void lu_xlate_symlink(char *link, char *target, char *buf)
+{
+    int i;
+    char *c1, *c2 = link;
+
+    TRACE("translating %s->%s\n", link, target);
+
+    for(c1 = strchr(link, '/'); c1 && !strncmp(link, target, c1 - link); c2 = c1, c1 = strchr(c1 + 1, '/'));
+
+    TRACE("disjoint paths: %s, %s\n", c2, target + (c2 - link));
+
+    for(i = 0, c1 = c2; (c1 = strchr(c1 + 1, '/')); i++);
+
+    strcpy(buf, "./");
+    
+    for(; i > 0; i--)
+	strcat(buf, "../");
+
+    strcat(buf, target + (c2 - link) + 1);
+    
+    TRACE("absolute link resolved to %s\n", buf);
+   
+}
+
diff -urN oldtree/fs/lufs/proc.h newtree/fs/lufs/proc.h
--- oldtree/fs/lufs/proc.h	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/proc.h	2006-02-11 22:03:50.213468024 -0500
@@ -0,0 +1,51 @@
+/*
+ * proc.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LU_PROC_H_
+#define _LU_PROC_H_
+
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/socket.h>
+
+struct server_slot{
+    struct socket	*s_sock;
+    struct semaphore 	s_lock;
+    struct list_head 	s_list;
+    pid_t 		s_lastpid;
+    char		*s_buf;
+};
+
+struct lufs_fattr;
+
+int lu_execute(struct lufs_sb_info*, struct server_slot*, unsigned short, struct iovec*, unsigned short, struct iovec*, unsigned short);
+void lu_empty_slots(struct lufs_sb_info*);
+int lu_getname(struct dentry*, char*, int);
+int lu_getname_dumb(struct dentry*, char*, int);
+struct server_slot* lu_getslot(struct lufs_sb_info*);
+void lu_putslot(struct server_slot*);
+int lu_revalidate_inode(struct dentry*);
+void lu_lookup_root(struct lufs_sb_info*, struct lufs_fattr*);
+void lu_fixattrs(struct lufs_sb_info*, struct lufs_fattr*);
+void lu_xlate_symlink(char*, char*, char*);
+
+#endif
diff -urN oldtree/fs/lufs/proto.h newtree/fs/lufs/proto.h
--- oldtree/fs/lufs/proto.h	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/proto.h	2006-02-11 22:03:50.214467872 -0500
@@ -0,0 +1,106 @@
+/*
+ * proto.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LU_PROTO_H_
+#define _LU_PROTO_H_
+
+#define LU_MAXDATA	4096
+
+#define PVERSION	0x02
+
+#define PTYPE_OK	0x00
+#define PTYPE_MOUNT	0x01
+#define PTYPE_READ	0x02
+#define PTYPE_WRITE	0x03
+#define PTYPE_READDIR	0x04
+#define PTYPE_STAT	0x05
+#define PTYPE_UMOUNT	0x06
+#define PTYPE_SETATTR	0x07
+#define PTYPE_MKDIR	0x08
+#define PTYPE_RMDIR	0x09
+#define PTYPE_CREATE	0x0A
+#define PTYPE_UNLINK	0x0B
+#define PTYPE_RENAME	0x0C
+#define PTYPE_OPEN	0x0D
+#define PTYPE_RELEASE	0x0E
+#define PTYPE_READLINK	0x0F
+#define PTYPE_LINK	0x10
+#define PTYPE_SYMLINK	0x11
+
+#define PTYPE_MAX	0x11
+
+
+#define PTYPE_ERROR	0x100
+
+#define PERROR(x)	(-(x & (PTYPE_ERROR - 1)) - 1)
+#define PIS_ERROR(x)	(x & PTYPE_ERROR)
+
+struct lu_msg {
+    unsigned short	msg_version;
+    unsigned short	msg_type;
+    unsigned short	msg_datalen;
+    unsigned short	msg_pid;
+};
+
+
+struct lufs_fattr{
+    unsigned long	f_ino;
+    unsigned long	f_mode;
+    unsigned long	f_nlink;
+    unsigned long	f_uid;
+    unsigned long	f_gid;
+    long long		f_size;
+    unsigned long	f_atime;
+    unsigned long	f_mtime;
+    unsigned long	f_ctime;
+    unsigned long	f_blksize;
+    unsigned long	f_blocks;
+};
+
+
+struct lufs_req_readdir{
+    unsigned short	offset;
+    char		dirname[0];
+};
+
+struct lufs_req_mkdir{
+    int		mode;
+    char	dirname[0];
+};
+
+struct lufs_req_rw{
+    long long		offset;
+    unsigned long	count;
+    char		name[0];
+};
+
+struct lufs_req_open{
+    unsigned 	mode;
+    char	name[0];
+};
+
+struct lufs_req_setattr{
+    struct lufs_fattr 	fattr;
+    char		name[0];
+};
+
+#endif
diff -urN oldtree/fs/lufs/symlink.c newtree/fs/lufs/symlink.c
--- oldtree/fs/lufs/symlink.c	1969-12-31 19:00:00.000000000 -0500
+++ newtree/fs/lufs/symlink.c	2006-02-11 22:03:50.214467872 -0500
@@ -0,0 +1,184 @@
+/*
+ * symlink.c
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/socket.h>
+#include <linux/smp_lock.h>
+#include <linux/fs.h>
+
+#include <asm/uaccess.h>
+#include <asm/system.h>
+
+
+#include "lufs.h"
+#include "proc.h"
+
+static char failed_link[] = "invalid";
+
+static int lu_readlink(struct dentry *dentry, char *buffer, int bufflen)
+{
+    struct server_slot *slot;
+    struct iovec siov, riov;
+    int res;
+    char *cc = failed_link;
+
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return vfs_readlink(dentry, buffer, bufflen, cc);
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    siov.iov_base = slot->s_buf;
+    siov.iov_len = strlen(slot->s_buf) + 1;
+    riov.iov_base = &slot->s_buf[LU_MAXPATHLEN];
+    riov.iov_len = LU_MAXPATHLEN;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_READLINK, &siov, 1, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("read_link failed.\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    cc = &slot->s_buf[LU_MAXPATHLEN];
+    
+    TRACE("response: %s\n", cc);
+    
+    if(*cc == '/'){
+	if(GET_INFO(dentry->d_sb)->rootlen){
+	    if(strncmp(GET_INFO(dentry->d_sb)->root, cc, GET_INFO(dentry->d_sb)->rootlen)){
+		WARN("symlink outside mounted root!");
+		cc = failed_link;
+		goto out;
+	    }
+	    cc += GET_INFO(dentry->d_sb)->rootlen;
+	}
+
+	lu_xlate_symlink(slot->s_buf, slot->s_buf + LU_MAXPATHLEN, slot->s_buf);
+
+	cc = slot->s_buf;
+
+    }
+
+
+
+  out:
+    res = vfs_readlink(dentry, buffer, bufflen, cc);
+
+    lu_putslot(slot);
+
+    TRACE("out\n");
+    return res;
+}
+
+static int lu_followlink(struct dentry *dentry, struct nameidata *nd)
+{
+    struct server_slot *slot;
+    struct iovec siov, riov;
+    int res;
+    char *cc = failed_link;
+    char *tmp;
+    
+    TRACE("in\n");
+
+    if((slot = lu_getslot(GET_INFO(dentry->d_sb))) == NULL)
+	return vfs_follow_link(nd, cc);
+
+
+    if((res = lu_getname(dentry, slot->s_buf, LU_MAXDATA)) < 0){
+	WARN("lu_getname failed!\n");
+	goto out;
+    }
+
+    siov.iov_base = slot->s_buf;
+    siov.iov_len = strlen(slot->s_buf) + 1;
+    riov.iov_base = &slot->s_buf[LU_MAXPATHLEN];
+    riov.iov_len = LU_MAXPATHLEN;
+
+    if((res = lu_execute(GET_INFO(dentry->d_sb), slot, PTYPE_READLINK, &siov, 1, &riov, 1)) < 0)
+	goto out;
+
+    if(PIS_ERROR(res)){
+	TRACE("read_link failed.\n");
+	res = PERROR(res);
+	goto out;
+    }
+
+    cc = &slot->s_buf[LU_MAXPATHLEN];
+
+    if(*cc == '/'){
+	if(GET_INFO(dentry->d_sb)->rootlen){
+	    if(strncmp(GET_INFO(dentry->d_sb)->root, cc, GET_INFO(dentry->d_sb)->rootlen)){
+		WARN("symlink outside mounted root!");
+		cc = failed_link;
+		goto out;
+	    }
+	    cc += GET_INFO(dentry->d_sb)->rootlen;
+	}
+
+	lu_xlate_symlink(slot->s_buf, slot->s_buf + LU_MAXPATHLEN, slot->s_buf);
+
+	cc = slot->s_buf;
+
+    }
+
+  out:
+
+    /* vfs_follow_link somehow manages to call lookup_validate, so we need to 
+       release the slot, in case it's the only one, otherwise lu_lookup will 
+       fail (avoid a deadlock). bad, bad vfs_follow_link! you break the overall
+       beauty of no kmallocs... */
+
+    if((tmp = kmalloc(strlen(cc) + 1, GFP_KERNEL)) == NULL){
+	WARN("out of mem!\n");
+	tmp = failed_link;
+    }else    
+	strcpy(tmp, cc);
+
+    lu_putslot(slot);
+    res = vfs_follow_link(nd, tmp);
+
+    if(tmp != failed_link)
+	kfree(tmp);
+    
+    TRACE("out\n");
+    return res;
+}
+
+struct inode_operations lu_symlink_inode_operations = {
+    .readlink		= lu_readlink,
+    .follow_link	= lu_followlink,
+};
+
+
+
+
+
