diff -urN oldtree/MAINTAINERS newtree/MAINTAINERS --- oldtree/MAINTAINERS 2006-02-18 17:12:37.735742488 +0000 +++ newtree/MAINTAINERS 2006-02-18 17:26:02.055467304 +0000 @@ -1672,6 +1672,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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/MAINTAINERS.orig 2006-02-18 17:12:37.000000000 +0000 @@ -0,0 +1,3125 @@ + + 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: linux-acpi@vger.kernel.org +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 +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 +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. + +AMD GEODE PROCESSOR/CHIPSET SUPPORT +P: Jordan Crouse +M: info-linux@geode.amd.com +L: info-linux@geode.amd.com +W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html +S: Supported + +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@infradead.org +M: v4l-dvb-maintainer@linuxtv.org +L: video4linux-list@redhat.com +W: http://linuxtv.org +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git +S: Maintained + +COMMON INTERNET FILE SYSTEM (CIFS) +P: Steve French +M: sfrench@samba.org +L: linux-cifs-client@lists.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 + +CONFIGFS +P: Joel Becker +M: joel.becker@oracle.com +L: linux-kernel@vger.kernel.org +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 +P: Nils Faerber (port to kernel 2.4) +M: Nils Faerber +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 + +CS5535 Audio ALSA driver +P: Jaya Kumar +M: jayakumar.alsa@gmail.com +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 + +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 +T: git http://tali.admingilde.org/git/linux-docbook.git +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: mchehab@infradead.org +M: v4l-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: Maintained + +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 + +EDAC-CORE +P: Doug Thompson +M: norsk5@xmission.com, dthompson@linuxnetworx.com +P: Dave Peterson +M: dsp@llnl.gov, dave_peterson@pobox.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.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 + +F71805F HARDWARE MONITORING DRIVER +P: Jean Delvare +M: khali@linux-fr.org +L: lm-sensors@lm-sensors.org +S: Maintained + +FARSYNC SYNCHRONOUS DRIVER +P: Kevin Curtis +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: Jes Sorensen +M: jes@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 +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 +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@modernduck.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@modernduck.com +L: linux1394-devel@lists.sourceforge.net +W: http://www.linux1394.org/ +S: Maintained + +IEEE 1394 PCILYNX DRIVER +P: Jody McIntyre +M: scjody@modernduck.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 FRAMEBUFFER DRIVER (excluding 810 and 815) +P: Sylvain Meyer +M: sylvain.meyer@worldonline.fr +L: linux-fbdev-devel@lists.sourceforge.net +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: Odd Fixes + +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/ +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 + +KEXEC +P: Eric Biederman +P: Randy Dunlap +M: ebiederm@xmission.com +M: rdunlap@xenotime.net +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 MV643XX ETHERNET DRIVER +P: Dale Farnsworth +M: dale@farnsworth.org +P: Manish Lachwani +M: mlachwani@mvista.com +L: netdev@vger.kernel.org +S: Odd Fixes for 2.4; Maintained for 2.6. + +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/git/davem/net-2.6.git +S: Maintained + +NETWORKING [WIRELESS] +P: John W. Linville +M: linville@tuxdriver.com +L: netdev@vger.kernel.org +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-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 +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 (rivafb and nvidiafb) FRAMEBUFFER DRIVER +P: Antonino Daplas +M: adaplas@pol.net +L: linux-fbdev-devel@lists.sourceforge.net +S: Maintained + +ORACLE CLUSTER FILESYSTEM 2 (OCFS2) +P: Mark Fasheh +M: mark.fasheh@oracle.com +P: Kurt Hackel +M: kurt.hackel@oracle.com +L: ocfs2-devel@oss.oracle.com +W: http://oss.oracle.com/projects/ocfs2/ +S: Supported + +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 +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 ERROR RECOVERY +P: Linas Vepstas +M: linas@austin.ibm.com +L: linux-kernel@vger.kernel.org +L: linux-pci@atrey.karlin.mff.cuni.cz +S: Supported + +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: linux-kernel@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 + +S3 SAVAGE FRAMEBUFFER DRIVER +P: Antonino Daplas +M: adaplas@pol.net +L: linux-fbdev-devel@lists.sourceforge.net +S: Maintained + +S390 +P: Martin Schwidefsky +M: schwidefsky@de.ibm.com +M: linux390@de.ibm.com +L: linux-390@vm.marist.edu +W: http://www.ibm.com/developerworks/linux/linux390/ +S: Supported + +S390 NETWORK DRIVERS +P: Frank Pavlic +M: fpavlic@de.ibm.com +M: linux390@de.ibm.com +L: linux-390@vm.marist.edu +W: http://www.ibm.com/developerworks/linux/linux390/ +S: Supported + +S390 ZFCP DRIVER +P: Andreas Herrmann +M: aherrman@de.ibm.com +M: linux390@de.ibm.com +L: linux-390@vm.marist.edu +W: http://www.ibm.com/developerworks/linux/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@tycho.nsa.gov +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 + +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: linuxsh-dev@lists.sourceforge.net +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 + +TIPC NETWORK LAYER +P: Per Liden +M: per.liden@ericsson.com +P: Jon Maloy +M: jon.maloy@ericsson.com +P: Allan Stephens +M: allan.stephens@windriver.com +L: tipc-discussion@lists.sourceforge.net +W: http://tipc.sourceforge.net/ +W: http://tipc.cslab.ericsson.net/ +T: git tipc.cslab.ericsson.net:/pub/git/tipc.git +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 +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 ET61X[12]51 DRIVER +P: Luca Risolia +M: luca.risolia@studio.unibo.it +L: linux-usb-devel@lists.sourceforge.net +L: video4linux-list@redhat.com +W: http://www.linux-projects.org +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 ISP116X DRIVER +P: Olav Kongas +M: ok@artecdesign.ee +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: usb-storage@lists.one-eyed-alien.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 +L: video4linux-list@redhat.com +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 +L: video4linux-list@redhat.com +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@infradead.org +M: v4l-dvb-maintainer@linuxtv.org +L: video4linux-list@redhat.com +W: http://linuxtv.org +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git +S: Maintained + +VT8231 HARDWARE MONITOR DRIVER +P: Roger Lucas +M: roger@planbit.co.uk +L: lm-sensors@lm-sensors.org +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 + +WATCHDOG DEVICE DRIVERS +P: Wim Van Sebroeck +M: wim@iguana.be +T: git kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git +S: Maintained + +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-02-18 17:12:40.743285272 +0000 +++ newtree/fs/Kconfig 2006-02-18 17:26:04.975023464 +0000 @@ -1330,6 +1330,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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/Kconfig.orig 2006-02-18 17:12:40.000000000 +0000 @@ -0,0 +1,1833 @@ +# +# 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 + 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 . + + 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" + select JBD + 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 ). + + 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 + 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 . + + 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 + tristate + help + This is a generic journaling layer for block devices. It is + currently used by the ext3 and OCFS2 file systems, 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 or OCFS2 file systems, you need to + say Y here. If you are not using ext3 OCFS2 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 or OCFS2 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 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 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 + 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 . + + 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 . + + 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 . + + 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 OCFS2_FS + tristate "OCFS2 file system support (EXPERIMENTAL)" + depends on NET && EXPERIMENTAL + select CONFIGFS_FS + select JBD + select CRC32 + select INET + help + OCFS2 is a general purpose extent based shared disk cluster file + system with many similarities to ext3. It supports 64 bit inode + numbers, and has automatically extending metadata groups which may + also make it attractive for non-clustered use. + + You'll want to install the ocfs2-tools package in order to at least + get "mount.ocfs2". + + Project web page: http://oss.oracle.com/projects/ocfs2 + Tools web page: http://oss.oracle.com/projects/ocfs2-tools + OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ + + Note: Features which OCFS2 does not support yet: + - extended attributes + - shared writeable mmap + - loopback is supported, but data written will not + be cluster coherent. + - quotas + - cluster aware flock + - Directory change notification (F_NOTIFY) + - Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease) + - POSIX ACLs + - readpages / writepages (not user visible) + +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 + 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 + , 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 . + 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 + ; 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: + + + See for more information. + See 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 + and the CD-ROM-HOWTO, + available from ), 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 + 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 + 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 . + + 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 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 + , or try dmsdosfs in + . 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 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 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 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 + and . + + 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 + + + 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 + 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 && 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 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. + +config CONFIGFS_FS + tristate "Userspace-driven configuration filesystem (EXPERIMENTAL)" + depends on EXPERIMENTAL + help + configfs is a ram-based filesystem that provides the converse + of sysfs's functionality. Where sysfs is a filesystem-based + view of kernel objects, configfs is a filesystem-based manager + of kernel objects, or config_items. + + Both sysfs and configfs can and should exist together on the + same system. One is not a replacement for the other. + +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 + 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 + and . + + With this driver you can also mount disk files used by Bernd + Schmidt's Un*X Amiga Emulator + (). + 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 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 + . + + 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 . + + 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 (). + +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 . + +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 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 and + 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 + . + + 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 . + 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 + ). + 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 + . + 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 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 && BROKEN + 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 + , 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 + , and Etherboot, + available from . + + 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 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 + . + + 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 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 + and the SMB-HOWTO, + available from . + + 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 ) + for that. + + General information about how to connect Linux, Windows machines and + Macs is on the WWW at . + + 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 + 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 + in the kernel source and + the IPX-HOWTO from . + + 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 . + + 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 + and check out the Coda + home page . + + 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 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 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-02-18 17:12:40.745284968 +0000 +++ newtree/fs/Makefile 2006-02-18 17:26:06.926726760 +0000 @@ -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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/Makefile.orig 2006-02-18 17:26:06.927726608 +0000 @@ -0,0 +1,103 @@ +# +# Makefile for the Linux filesystems. +# +# 14 Sep 2000, Christoph Hellwig +# 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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/Makefile 2006-02-18 17:26:06.928726456 +0000 @@ -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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/dir.c 2006-02-18 17:26:06.929726304 +0000 @@ -0,0 +1,582 @@ +/* + * dir.c + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/file.c 2006-02-18 17:26:06.930726152 +0000 @@ -0,0 +1,321 @@ +/* + * file.c + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include +#include +#include +#include + +#include +#include + +#include + +#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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/fs.h 2006-02-18 17:26:06.931726000 +0000 @@ -0,0 +1,112 @@ +/* + * lufs.h + * Copyright (C) 2002 Florin Malita + * + * 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 + +#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 + +#ifdef DEBUG +#define TRACE(x) cout< + +#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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/inode.c 2006-02-18 17:26:06.932725848 +0000 @@ -0,0 +1,535 @@ +/* + * inode.c + * Copyright (C) 2002-2003 Florin Malita + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "lufs.h" +#include "proc.h" + +MODULE_AUTHOR("Florin Malita "); +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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/lufs.h 2006-02-18 17:26:06.933725696 +0000 @@ -0,0 +1,87 @@ +/* + * lufs.h + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include + +#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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/proc.c 2006-02-18 17:26:06.934725544 +0000 @@ -0,0 +1,505 @@ +/* + * proc.c + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#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(¤t->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(¤t->pending.signal, SIGPIPE)){ + TRACE("got a SIGPIPE\n"); + sigdelset(¤t->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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/proc.h 2006-02-18 17:26:06.935725392 +0000 @@ -0,0 +1,51 @@ +/* + * proc.h + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include + +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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/proto.h 2006-02-18 17:26:06.936725240 +0000 @@ -0,0 +1,106 @@ +/* + * proto.h + * Copyright (C) 2002 Florin Malita + * + * 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 1970-01-01 00:00:00.000000000 +0000 +++ newtree/fs/lufs/symlink.c 2006-02-18 17:26:06.937725088 +0000 @@ -0,0 +1,184 @@ +/* + * symlink.c + * Copyright (C) 2002 Florin Malita + * + * 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 +#include +#include +#include +#include +#include +#include + +#include +#include + + +#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, +}; + + + + +