--- 2.4.19pre8aa3/fs/ext3/super.c.~1~ Mon Feb 25 22:05:08 2002 +++ 2.4.19pre8aa3/fs/ext3/super.c Fri May 10 14:09:28 2002 @@ -1736,7 +1736,7 @@ static int __init init_ext3_fs(void) { - return register_filesystem(&ext3_fs_type); + return register_filesystem_lifo(&ext3_fs_type); } static void __exit exit_ext3_fs(void) --- 2.4.19pre8aa3/fs/super.c.~1~ Thu May 9 23:30:07 2002 +++ 2.4.19pre8aa3/fs/super.c Fri May 10 14:08:29 2002 @@ -89,7 +89,7 @@ * unregistered. */ -int register_filesystem(struct file_system_type * fs) +int __register_filesystem(struct file_system_type * fs, int lifo) { int res = 0; struct file_system_type ** p; @@ -103,8 +103,14 @@ p = find_filesystem(fs->name); if (*p) res = -EBUSY; - else - *p = fs; + else { + if (!lifo) + *p = fs; + else { + fs->next = file_systems; + file_systems = fs; + } + } write_unlock(&file_systems_lock); return res; } --- 2.4.19pre8aa3/include/linux/fs.h.~1~ Fri May 10 00:46:11 2002 +++ 2.4.19pre8aa3/include/linux/fs.h Fri May 10 14:16:54 2002 @@ -1077,7 +1077,9 @@ __MOD_DEC_USE_COUNT((fops)->owner); \ } while(0) -extern int register_filesystem(struct file_system_type *); +extern int __register_filesystem(struct file_system_type *, int); +#define register_filesystem(fs) __register_filesystem(fs, 0) +#define register_filesystem_lifo(fs) __register_filesystem(fs, 1) extern int unregister_filesystem(struct file_system_type *); extern struct vfsmount *kern_mount(struct file_system_type *); extern int may_umount(struct vfsmount *); --- 2.4.19pre8aa3/kernel/ksyms.c.~1~ Thu May 9 23:30:06 2002 +++ 2.4.19pre8aa3/kernel/ksyms.c Fri May 10 14:14:22 2002 @@ -355,7 +355,7 @@ EXPORT_SYMBOL(do_SAK); /* filesystem registration */ -EXPORT_SYMBOL(register_filesystem); +EXPORT_SYMBOL(__register_filesystem); EXPORT_SYMBOL(unregister_filesystem); EXPORT_SYMBOL(kern_mount); EXPORT_SYMBOL(__mntput);