diff -Naur linux-2001-12-12/Documentation/Configure.help evms-2001-12-12/Documentation/Configure.help
--- linux-2001-12-12/Documentation/Configure.help	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/Documentation/Configure.help	Wed Dec 12 08:15:30 2001
@@ -1461,6 +1461,178 @@
   called on26.o. You must also have a high-level driver for the type
   of device that you want to support.
 
+EVMS Kernel Runtime
+CONFIG_EVMS
+  EVMS runtime driver. This is a plugin-based framework for volume
+  management, and combines support for partitioning, software RAID,
+  LVM, and more into a single interface.
+
+  User-space tools are required to perform administration of EVMS logical
+  volumes. Please visit <http://www.sourceforge.net/projects/evms> for
+  more details on downloading and installing these tools.
+
+  This driver is also available as a pair of modules called evms.o and
+  evms_passthru.o ( = code which can be inserted and removed from the
+  running kernel whenever you want). If you want to compile it as a module,
+  say M here and read <file:Documentation/modules.txt>.
+
+EVMS Local Device Manager Plugin
+CONFIG_EVMS_LOCAL_DEV_MGR_PLUGIN
+  Support for local IDE and SCSI devices. This plugin is required if EVMS
+  support is selected.
+
+  This plugin is also available as a kernel module called ldev_mgr.o.
+
+EVMS DOS Partition Manager Plugin
+CONFIG_EVMS_DOS_PARTITION_PLUGIN
+  Support for recognizing all partitions using the ever-popular DOS
+  partitioning scheme (MBRs & EBRs). 99% of the time you will need 
+  this plugin to do anything useful with EVMS.
+
+  This plugin also contains support for recognizing BSD disklabels,
+  UNIXWARE partitions, Solaris-X86 partitions, and OS/2 DLAT entries.
+
+  This plugin is also available as a kernel module called dos_part.o.
+
+EVMS SnapShot Feature Plugin
+CONFIG_EVMS_SNAPSHOT_PLUGIN
+  This feature plugin lets you create a snapshot of any volume
+  under EVMS control using any other device under under EVMS
+  control as the target for the snapshot volume.
+
+  This plugin is also available as a kernel module called snapshot.o.
+
+EVMS DriveLink Feature Plugin
+CONFIG_EVMS_DRIVELINK_PLUGIN
+  This feature plugin lets you combine multiple devices into a
+  single virtual block device. The size of the virtual block
+  device is approximately equal to the sum of all its components.
+  It currently supports combining up to 60 devices (partitions,
+  disks, or logical volumes).
+
+  This plugin is also available as a kernel module called evms_drivelink.o.
+
+EVMS Bad Block Relocation (BBR) Feature
+CONFIG_EVMS_BBR_PLUGIN
+  BBR is designed to remap I/O write failures to another safe
+  location on disk. Note that most disk drives have BBR built
+  into them, so software BBR will only be activated when all
+  hardware BBR replacement sectors have been used.
+
+  This plugin is also available as a kernel module called evms_bbr.o.
+
+EVMS Linux LVM Plugin
+CONFIG_EVMS_LVM_PLUGIN
+  The LVM plugin is responsible for providing compatibility with the Linux
+  LVM. This plugin recognizes disks and partitions that are LVM physical
+  volumes (PVs), and assembles the appropriate volume groups (VGs). LVM
+  logical volumes (LVs) are exported as EVMS volumes with full read/write
+  support.  In addition, support for striped and snapshotted volumes is
+  included. The corresponding EVMS Engine plugin must also be installed in
+  order to perform any administration of LVM VGs and LVs.
+
+  This plugin is also available as a kernel module called lvm_vge.o.
+
+EVMS MD Plugin
+CONFIG_EVMS_MD_PLUGIN
+  The MD plugin is responsible for providing compatibility with the Linux
+  Software RAID driver (MD). It allows several devices to be combined into
+  one logical device. This can be used to simply append one disk or
+  partition to another, or to combine several redundant disks into a
+  RAID 1/4/5 device so as to provide protection against hard disk failures.
+
+  This plugin is also available as a kernel module called md_core.o.
+
+EVMS MD RAID-Linear Plugin
+CONFIG_EVMS_MD_LINEAR_PERS
+  The RAID-Linear personality combines disks and/or partitions simply by
+  appending one to the other.
+
+  This plugin is also available as a kernel module called md_linear.o.
+
+EVMS MD RAID-0 Plugin
+CONFIG_EVMS_MD_RAID0_PERS
+  The RAID-0 personality combines disks and/or partitions into one
+  logical device using striping. This method writes data evenly across
+  all members in the device in order to increase the throughput rate if
+  each member resides on a distinct disk.
+
+  This plugin is also available as a kernel module called md_raid0.o.
+
+EVMS MD RAID-1 Plugin
+CONFIG_EVMS_MD_RAID1_PERS
+  The RAID-1 personality implements mirroring, in which a logical device
+  consists of several disks that are exact copies of each other. In the
+  event of a mirror failure, the RAID-1 personality will continue to use
+  the remaining mirrors in the set, providing an error free device to the
+  higher levels of the kernel. In a set with N drives, the available space
+  is the capacity of a single drive, and the set protects against the
+  failure of N-1 drives.
+
+  This plugin is also available as a kernel module called md_raid1.o.
+
+EVMS MD RAID-4/RAID-5 Plugin
+CONFIG_EVMS_MD_RAID5_PERS
+  A RAID-5 set of N drives with a capacity of C MB per drive provides
+  the capacity of C * (N-1) MB, and protects against a failure of a
+  single drive. For a given sector (row) number, (N-1) drives contain
+  data sectors, and one drive contains the parity protection. For a
+  RAID-4 set, the parity blocks are present on a single drive, while
+  a RAID-5 set distributes the parity across all drives in one of the
+  available parity distribution methods.
+
+  This plugin is also available as a kernel module called md_raid5.o.
+
+EVMS AIX LVM Plugin
+CONFIG_EVMS_AIX_PLUGIN
+  The AIX LVM plugin is responsible for providing compatibility with the
+  AIX LVM. This plugin recognizes disks and partitions that are AIX disks,
+  and assembles the appropriate volume groups. AIX logical volumes are
+  exported as EVMS volumes with full read/write support. In addition,
+  support for striped volumes is included, and support for mirroring is
+  under development.
+
+  You should only need to select this option if you are running on a PPC
+  machine and want to access AIX LVM volumes. The user-space plugin for
+  AIX will be available in the future.
+
+  This plugin is also available as a kernel module called AIXlvm_vge.o.
+
+EVMS OS/2 LVM Plugin
+CONFIG_EVMS_OS2_PLUGIN
+  Support for recognizing the type 0x35 partitions that later versions
+  of OS/2 use in its Logical Volume Manager.  Provides binary
+  compatibility and includes Drive Linking and Bad Block Relocation
+  emulation. The user-space plugin for OS/2 will be available in the future.
+
+  This plugin is also available as a kernel module called os2lvm_vge.o.
+
+EVMS Clustering Plugin
+CONFIG_EVMS_ECR_PLUGIN
+
+  The EVMS Clustering Plugin is still under design and development.
+  Best to just say 'n' here.
+
+  This plugin is available as a kernel module called evms_ecr.o.
+
+EVMS Debug Level
+CONFIG_EVMS_INFO_CRITICAL
+  Set the level for kernel messages from EVMS. Each level on the list
+  produces message for that level and all levels above it. Thus, level
+  "Critical" only logs the most critical messages (and thus the fewest),
+  whereas level "Everything" produces more information that will probably
+  ever be useful.  Level "Default" is a good starting point. Level "Debug"
+  is good if you are having problems with EVMS and want more basic info
+  on what's going on during the volume discovery process.
+
+  EVMS also supports a boot-time kernel parameter to set the info level.
+  To use this method, specify "evms_info_level=5" at boot time, or add the
+  line "append = "evms_info_level=5"" to your lilo.conf file (replacing 5
+  with your desired info level). See include/linux/evms/evms.h for the
+  numerical definitions of the info levels. To use this boot-time parameter,
+  the EVMS core driver must be statically built into the kernel (not as a
+  module).
+
 Logical Volume Manager (LVM) support
 CONFIG_BLK_DEV_LVM
   This driver lets you combine several hard disks, hard disk
diff -Naur linux-2001-12-12/Makefile evms-2001-12-12/Makefile
--- linux-2001-12-12/Makefile	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/Makefile	Wed Dec 12 08:13:35 2001
@@ -182,6 +182,7 @@
 DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
 DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
 DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
+DRIVERS-$(CONFIG_EVMS) += drivers/evms/evmsdrvr.o
 
 DRIVERS := $(DRIVERS-y)
 
diff -Naur linux-2001-12-12/arch/i386/config.in evms-2001-12-12/arch/i386/config.in
--- linux-2001-12-12/arch/i386/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/i386/config.in	Wed Dec 12 08:14:00 2001
@@ -275,6 +275,8 @@
 
 source drivers/block/Config.in
 
+source drivers/evms/Config.in
+
 source drivers/md/Config.in
 
 if [ "$CONFIG_NET" = "y" ]; then
diff -Naur linux-2001-12-12/arch/ia64/config.in evms-2001-12-12/arch/ia64/config.in
--- linux-2001-12-12/arch/ia64/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/ia64/config.in	Wed Dec 12 07:57:29 2001
@@ -150,6 +150,7 @@
 source drivers/pnp/Config.in
 source drivers/block/Config.in
 source drivers/i2o/Config.in
+source drivers/evms/Config.in
 source drivers/md/Config.in
 
 mainmenu_option next_comment
diff -Naur linux-2001-12-12/arch/ppc/config.in evms-2001-12-12/arch/ppc/config.in
--- linux-2001-12-12/arch/ppc/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/ppc/config.in	Wed Dec 12 07:57:29 2001
@@ -237,6 +237,7 @@
 source drivers/mtd/Config.in
 source drivers/pnp/Config.in
 source drivers/block/Config.in
+source drivers/evms/Config.in
 source drivers/md/Config.in
 
 if [ "$CONFIG_NET" = "y" ]; then
diff -Naur linux-2001-12-12/arch/parisc/config.in evms-2001-12-12/arch/parisc/config.in
--- linux-2001-12-12/arch/parisc/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/parisc/config.in	Wed Dec 12 07:57:29 2001
@@ -106,6 +106,8 @@
 
 source drivers/block/Config.in
 
+source drivers/evms/Config.in
+
 if [ "$CONFIG_NET" = "y" ]; then
   source net/Config.in
 fi
diff -Naur linux-2001-12-12/arch/s390/config.in evms-2001-12-12/arch/s390/config.in
--- linux-2001-12-12/arch/s390/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/s390/config.in	Wed Dec 12 07:57:29 2001
@@ -56,6 +56,8 @@
 
 source drivers/s390/Config.in
 
+source drivers/evms/Config.in
+
 if [ "$CONFIG_NET" = "y" ]; then
   source net/Config.in
 fi
diff -Naur linux-2001-12-12/arch/s390x/config.in evms-2001-12-12/arch/s390x/config.in
--- linux-2001-12-12/arch/s390x/config.in	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/arch/s390x/config.in	Wed Dec 12 07:57:29 2001
@@ -60,6 +60,8 @@
 
 source drivers/s390/Config.in
 
+source drivers/evms/Config.in
+
 if [ "$CONFIG_NET" = "y" ]; then
   source net/Config.in
 fi
diff -Naur linux-2001-12-12/drivers/Makefile evms-2001-12-12/drivers/Makefile
--- linux-2001-12-12/drivers/Makefile	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/drivers/Makefile	Wed Dec 12 08:09:27 2001
@@ -8,7 +8,7 @@
 
 mod-subdirs :=	dio mtd sbus video macintosh usb input telephony sgi ide \
 		i2o message/fusion scsi md ieee1394 pnp isdn atm \
-		fc4 net/hamradio i2c acpi bluetooth
+		fc4 net/hamradio i2c acpi bluetooth evms
 
 subdir-y :=	parport char block net sound misc media cdrom
 subdir-m :=	$(subdir-y)
@@ -46,6 +46,7 @@
 subdir-$(CONFIG_ACPI)		+= acpi
 
 subdir-$(CONFIG_BLUEZ)		+= bluetooth
+subdir-$(CONFIG_EVMS)		+= evms
 
 include $(TOPDIR)/Rules.make
 
diff -Naur linux-2001-12-12/drivers/block/genhd.c evms-2001-12-12/drivers/block/genhd.c
--- linux-2001-12-12/drivers/block/genhd.c	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/drivers/block/genhd.c	Wed Dec 12 08:19:54 2001
@@ -105,6 +105,32 @@
 EXPORT_SYMBOL(get_gendisk);
 
 
+/**
+ * walk_gendisk - issue a command for every registered gendisk
+ * @walk: user-specified callback
+ * @data: opaque data for the callback
+ *
+ * This function walks through the gendisk chain and calls back
+ * into @walk for every element.                               
+ */
+int
+walk_gendisk(int (*walk)(struct gendisk *, void *), void *data)
+{
+        struct gendisk *gp;
+        int error = 0;     
+
+        read_lock(&gendisk_lock);
+        for (gp = gendisk_head; gp; gp = gp->next)
+                if ((error = walk(gp, data)))
+                        break;
+        read_unlock(&gendisk_lock);
+
+        return error;
+}
+
+EXPORT_SYMBOL(walk_gendisk);
+
+
 #ifdef CONFIG_PROC_FS
 int
 get_partition_list(char *page, char **start, off_t offset, int count)
diff -Naur linux-2001-12-12/include/linux/genhd.h evms-2001-12-12/include/linux/genhd.h
--- linux-2001-12-12/include/linux/genhd.h	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/include/linux/genhd.h	Wed Dec 12 08:20:24 2001
@@ -81,6 +81,7 @@
 extern void add_gendisk(struct gendisk *gp);
 extern void del_gendisk(struct gendisk *gp);
 extern struct gendisk *get_gendisk(kdev_t dev);
+extern int walk_gendisk(int (*walk)(struct gendisk *, void *), void *);
 
 #endif  /*  __KERNEL__  */
 
diff -Naur linux-2001-12-12/include/linux/sysctl.h evms-2001-12-12/include/linux/sysctl.h
--- linux-2001-12-12/include/linux/sysctl.h	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/include/linux/sysctl.h	Wed Dec 12 08:20:24 2001
@@ -549,7 +549,8 @@
 	DEV_HWMON=2,
 	DEV_PARPORT=3,
 	DEV_RAID=4,
-	DEV_MAC_HID=5
+	DEV_MAC_HID=5,
+	DEV_EVMS=6
 };
 
 /* /proc/sys/dev/cdrom */
@@ -565,6 +566,18 @@
 /* /proc/sys/dev/parport */
 enum {
 	DEV_PARPORT_DEFAULT=-3
+};
+
+/* /proc/sys/dev/evms */
+enum {
+	DEV_EVMS_INFO_LEVEL=1,
+	DEV_EVMS_MD=2
+};
+
+/* /proc/sys/dev/evms/raid */
+enum {
+	DEV_EVMS_MD_SPEED_LIMIT_MIN=1,
+	DEV_EVMS_MD_SPEED_LIMIT_MAX=2
 };
 
 /* /proc/sys/dev/raid */
diff -Naur linux-2001-12-12/init/main.c evms-2001-12-12/init/main.c
--- linux-2001-12-12/init/main.c	Wed Dec 12 08:21:04 2001
+++ evms-2001-12-12/init/main.c	Wed Dec 12 08:20:44 2001
@@ -261,6 +261,7 @@
 #ifdef CONFIG_NFTL
 	{ "nftla", 0x5d00 },
 #endif
+	{ "evms", 0x3f00 },
 	{ NULL, 0 }
 };
 
diff -Naur linux-2001-12-12/kernel/ksyms.c evms-2001-12-12/kernel/ksyms.c
--- linux-2001-12-12/kernel/ksyms.c	Mon Sep 17 17:28:32 2001
+++ evms-2001-12-12/kernel/ksyms.c	Thu Jan 24 16:22:58 2002
@@ -305,6 +305,8 @@
 EXPORT_SYMBOL(refile_buffer);
 EXPORT_SYMBOL(max_sectors);
 EXPORT_SYMBOL(max_readahead);
+EXPORT_SYMBOL(is_swap_partition);
+EXPORT_SYMBOL(root_device_name);
 
 /* tty routines */
 EXPORT_SYMBOL(tty_hangup);
