From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Howells Subject: [PATCH] permit fs->get_sb() to return alternative root Date: Tue, 18 May 2004 15:14:49 +0100 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <6086.1084889689@redhat.com> Mime-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Cc: linux-fsdevel@vger.kernel.org Return-path: Received: from mx1.redhat.com ([66.187.233.31]:10112 "EHLO mx1.redhat.com") by vger.kernel.org with ESMTP id S263309AbUEROPh (ORCPT ); Tue, 18 May 2004 10:15:37 -0400 To: viro@parcelfarce.linux.theplanet.co.uk, Linus Torvalds , Trond Myklebust List-Id: linux-fsdevel.vger.kernel.org Hi Al, Linux, Here's a patch to add an extra argument to the get_sb() method of struct file_system_type that allows a filesystem to suggest an alternative dentry to be attached to the vfsmount structure. If no such suggestion is made, sb->s_root is selected as usual. The reason I want this is so that the NFS fs can be improved such that two mounts made from the same server will be able to use the same superblock, the same inodes and the same dentries (as I've been discussing with Trond), this eliminating aliasing at the client end. This deals with the case of doing, for instance: mount file:/export/home0/dhowells /home/dhowells mount file:/export/home0/dwmw2 /home/dwmw2 And then finding you've got files hard-linked across the two. In effect, you get a sort of bind mount. It also means that local on-disc caching becomes feasible with cachefs. David diff -uNr linux-2.6.6/include/linux/fs.h linux-2.6.6-getsb/include/linux/fs.h --- linux-2.6.6/include/linux/fs.h 2004-05-11 11:28:57.000000000 +0100 +++ linux-2.6.6-getsb/include/linux/fs.h 2004-05-18 11:35:07.000000000 +0100 @@ -1086,7 +1086,7 @@ const char *name; int fs_flags; struct super_block *(*get_sb) (struct file_system_type *, int, - const char *, void *); + const char *, void *, struct dentry **); void (*kill_sb) (struct super_block *); struct module *owner; struct file_system_type * next; diff -uNr linux-2.6.6/fs/super.c linux-2.6.6-getsb/fs/super.c --- linux-2.6.6/fs/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/super.c 2004-05-18 13:55:58.000000000 +0100 @@ -738,6 +738,7 @@ struct file_system_type *type = get_fs_type(fstype); struct super_block *sb = ERR_PTR(-ENOMEM); struct vfsmount *mnt; + struct dentry *root; int error; char *secdata = NULL; @@ -762,15 +763,18 @@ } } - sb = type->get_sb(type, flags, name, data); + root = NULL; + sb = type->get_sb(type, flags, name, data, &root); if (IS_ERR(sb)) goto out_free_secdata; + if (!root) + root = sb->s_root; error = security_sb_kern_mount(sb, secdata); if (error) goto out_sb; mnt->mnt_sb = sb; - mnt->mnt_root = dget(sb->s_root); - mnt->mnt_mountpoint = sb->s_root; + mnt->mnt_root = dget(root); + mnt->mnt_mountpoint = mnt->mnt_root; mnt->mnt_parent = mnt; up_write(&sb->s_umount); put_filesystem(type); diff -uNr linux-2.6.6/arch/ia64/kernel/perfmon.c linux-2.6.6-getsb/arch/ia64/kernel/perfmon.c --- linux-2.6.6/arch/ia64/kernel/perfmon.c 2004-05-11 11:28:36.000000000 +0100 +++ linux-2.6.6-getsb/arch/ia64/kernel/perfmon.c 2004-05-18 13:35:17.000000000 +0100 @@ -592,7 +592,8 @@ static struct super_block * -pfmfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) +pfmfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, + struct dentry **_root) { return get_sb_pseudo(fs_type, "pfm:", NULL, PFMFS_MAGIC); } diff -uNr linux-2.6.6/arch/ia64/sn/io/hwgfs/ramfs.c linux-2.6.6-getsb/arch/ia64/sn/io/hwgfs/ramfs.c --- linux-2.6.6/arch/ia64/sn/io/hwgfs/ramfs.c 2004-05-11 11:28:14.000000000 +0100 +++ linux-2.6.6-getsb/arch/ia64/sn/io/hwgfs/ramfs.c 2004-05-18 13:35:35.000000000 +0100 @@ -165,7 +165,7 @@ } static struct super_block *hwgfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, hwgfs_fill_super); } diff -uNr linux-2.6.6/drivers/isdn/capi/capifs.c linux-2.6.6-getsb/drivers/isdn/capi/capifs.c --- linux-2.6.6/drivers/isdn/capi/capifs.c 2004-05-11 11:26:21.000000000 +0100 +++ linux-2.6.6-getsb/drivers/isdn/capi/capifs.c 2004-05-18 13:37:35.000000000 +0100 @@ -118,7 +118,7 @@ } static struct super_block *capifs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, capifs_fill_super); } diff -uNr linux-2.6.6/drivers/misc/ibmasm/ibmasmfs.c linux-2.6.6-getsb/drivers/misc/ibmasm/ibmasmfs.c --- linux-2.6.6/drivers/misc/ibmasm/ibmasmfs.c 2004-05-11 11:26:31.000000000 +0100 +++ linux-2.6.6-getsb/drivers/misc/ibmasm/ibmasmfs.c 2004-05-18 13:38:51.000000000 +0100 @@ -103,7 +103,8 @@ static struct super_block *ibmasmfs_get_super(struct file_system_type *fst, - int flags, const char *name, void *data) + int flags, const char *name, void *data, + struct dentry **_root) { return get_sb_single(fst, flags, data, ibmasmfs_fill_super); } diff -uNr linux-2.6.6/drivers/oprofile/oprofilefs.c linux-2.6.6-getsb/drivers/oprofile/oprofilefs.c --- linux-2.6.6/drivers/oprofile/oprofilefs.c 2004-05-11 11:26:28.000000000 +0100 +++ linux-2.6.6-getsb/drivers/oprofile/oprofilefs.c 2004-05-18 13:38:25.000000000 +0100 @@ -300,7 +300,7 @@ static struct super_block *oprofilefs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, oprofilefs_fill_super); } diff -uNr linux-2.6.6/drivers/usb/core/inode.c linux-2.6.6-getsb/drivers/usb/core/inode.c --- linux-2.6.6/drivers/usb/core/inode.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/drivers/usb/core/inode.c 2004-05-18 13:37:48.000000000 +0100 @@ -497,7 +497,7 @@ static struct file_system_type usbdevice_fs_type; static struct super_block *usb_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, usbfs_fill_super); } diff -uNr linux-2.6.6/drivers/usb/gadget/inode.c linux-2.6.6-getsb/drivers/usb/gadget/inode.c --- linux-2.6.6/drivers/usb/gadget/inode.c 2004-05-11 11:26:25.000000000 +0100 +++ linux-2.6.6-getsb/drivers/usb/gadget/inode.c 2004-05-18 13:38:08.000000000 +0100 @@ -1842,7 +1842,7 @@ /* "mount -t gadgetfs path /dev/gadget" ends up here */ static struct super_block * gadgetfs_get_sb (struct file_system_type *t, int flags, - const char *path, void *opts) + const char *path, void *opts, struct dentry **_root) { return get_sb_single (t, flags, opts, gadgetfs_fill_super); } diff -uNr linux-2.6.6/fs/adfs/super.c linux-2.6.6-getsb/fs/adfs/super.c --- linux-2.6.6/fs/adfs/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/adfs/super.c 2004-05-18 13:17:45.000000000 +0100 @@ -470,7 +470,7 @@ } static struct super_block *adfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, adfs_fill_super); } diff -uNr linux-2.6.6/fs/affs/super.c linux-2.6.6-getsb/fs/affs/super.c --- linux-2.6.6/fs/affs/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/affs/super.c 2004-05-18 13:20:59.000000000 +0100 @@ -546,7 +546,7 @@ } static struct super_block *affs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, affs_fill_super); } diff -uNr linux-2.6.6/fs/afs/super.c linux-2.6.6-getsb/fs/afs/super.c --- linux-2.6.6/fs/afs/super.c 2004-05-11 11:28:30.000000000 +0100 +++ linux-2.6.6-getsb/fs/afs/super.c 2004-05-18 13:14:07.000000000 +0100 @@ -40,7 +40,7 @@ static struct super_block *afs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data); + void *data, struct dentry **_root); static struct inode *afs_alloc_inode(struct super_block *sb); @@ -299,7 +299,8 @@ static struct super_block *afs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *options) + void *options, + struct dentry **_root) { struct afs_mount_params params; struct super_block *sb; diff -uNr linux-2.6.6/fs/autofs/init.c linux-2.6.6-getsb/fs/autofs/init.c --- linux-2.6.6/fs/autofs/init.c 2004-05-11 11:26:07.000000000 +0100 +++ linux-2.6.6-getsb/fs/autofs/init.c 2004-05-18 13:20:44.000000000 +0100 @@ -15,7 +15,7 @@ #include "autofs_i.h" static struct super_block *autofs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, autofs_fill_super); } diff -uNr linux-2.6.6/fs/autofs4/init.c linux-2.6.6-getsb/fs/autofs4/init.c --- linux-2.6.6/fs/autofs4/init.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/autofs4/init.c 2004-05-18 13:19:25.000000000 +0100 @@ -15,7 +15,7 @@ #include "autofs_i.h" static struct super_block *autofs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, autofs4_fill_super); } diff -uNr linux-2.6.6/fs/befs/linuxvfs.c linux-2.6.6-getsb/fs/befs/linuxvfs.c --- linux-2.6.6/fs/befs/linuxvfs.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/befs/linuxvfs.c 2004-05-18 13:19:00.000000000 +0100 @@ -928,7 +928,7 @@ static struct super_block * befs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data) + void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, befs_fill_super); } diff -uNr linux-2.6.6/fs/bfs/inode.c linux-2.6.6-getsb/fs/bfs/inode.c --- linux-2.6.6/fs/bfs/inode.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/bfs/inode.c 2004-05-18 13:18:05.000000000 +0100 @@ -381,7 +381,7 @@ } static struct super_block *bfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, bfs_fill_super); } diff -uNr linux-2.6.6/fs/binfmt_misc.c linux-2.6.6-getsb/fs/binfmt_misc.c --- linux-2.6.6/fs/binfmt_misc.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/binfmt_misc.c 2004-05-18 13:21:41.000000000 +0100 @@ -622,7 +622,7 @@ } static struct super_block *bm_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, bm_fill_super); } diff -uNr linux-2.6.6/fs/cifs/cifsfs.c linux-2.6.6-getsb/fs/cifs/cifsfs.c --- linux-2.6.6/fs/cifs/cifsfs.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/cifs/cifsfs.c 2004-05-18 13:16:00.000000000 +0100 @@ -398,7 +398,7 @@ static struct super_block * cifs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, , struct dentry **_root) { int rc; struct super_block *sb = sget(fs_type, NULL, set_anon_super, NULL); diff -uNr linux-2.6.6/fs/coda/inode.c linux-2.6.6-getsb/fs/coda/inode.c --- linux-2.6.6/fs/coda/inode.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/coda/inode.c 2004-05-18 13:16:59.000000000 +0100 @@ -306,7 +306,7 @@ /* init_coda: used by filesystems.c to register coda */ static struct super_block *coda_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, coda_fill_super); } diff -uNr linux-2.6.6/fs/cramfs/inode.c linux-2.6.6-getsb/fs/cramfs/inode.c --- linux-2.6.6/fs/cramfs/inode.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/cramfs/inode.c 2004-05-18 13:19:48.000000000 +0100 @@ -494,7 +494,7 @@ }; static struct super_block *cramfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, cramfs_fill_super); } diff -uNr linux-2.6.6/fs/devfs/base.c linux-2.6.6-getsb/fs/devfs/base.c --- linux-2.6.6/fs/devfs/base.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/devfs/base.c 2004-05-18 13:20:27.000000000 +0100 @@ -2566,7 +2566,7 @@ static struct super_block *devfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data) + void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, devfs_fill_super); } diff -uNr linux-2.6.6/fs/devpts/inode.c linux-2.6.6-getsb/fs/devpts/inode.c --- linux-2.6.6/fs/devpts/inode.c 2004-05-11 11:26:07.000000000 +0100 +++ linux-2.6.6-getsb/fs/devpts/inode.c 2004-05-18 13:21:07.000000000 +0100 @@ -109,7 +109,7 @@ } static struct super_block *devpts_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, devpts_fill_super); } diff -uNr linux-2.6.6/fs/efs/super.c linux-2.6.6-getsb/fs/efs/super.c --- linux-2.6.6/fs/efs/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/efs/super.c 2004-05-18 13:21:14.000000000 +0100 @@ -16,7 +16,7 @@ #include static struct super_block *efs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, efs_fill_super); } diff -uNr linux-2.6.6/fs/eventpoll.c linux-2.6.6-getsb/fs/eventpoll.c --- linux-2.6.6/fs/eventpoll.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/eventpoll.c 2004-05-18 13:21:51.000000000 +0100 @@ -326,7 +326,7 @@ static struct inode *ep_eventpoll_inode(void); static struct super_block *eventpollfs_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data); + void *data, struct dentry **_root); /* * This semaphore is used to serialize ep_free() and eventpoll_release_file(). @@ -1679,7 +1679,7 @@ static struct super_block * eventpollfs_get_sb(struct file_system_type *fs_type, int flags, - const char *dev_name, void *data) + const char *dev_name, void *data, struct dentry **_root) { return get_sb_pseudo(fs_type, "eventpoll:", NULL, EVENTPOLLFS_MAGIC); } diff -uNr linux-2.6.6/fs/ext2/super.c linux-2.6.6-getsb/fs/ext2/super.c --- linux-2.6.6/fs/ext2/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/ext2/super.c 2004-05-18 13:20:40.000000000 +0100 @@ -1008,7 +1008,7 @@ } static struct super_block *ext2_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, ext2_fill_super); } diff -uNr linux-2.6.6/fs/ext3/super.c linux-2.6.6-getsb/fs/ext3/super.c --- linux-2.6.6/fs/ext3/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/ext3/super.c 2004-05-18 13:20:08.000000000 +0100 @@ -2280,7 +2280,7 @@ #endif static struct super_block *ext3_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, ext3_fill_super); } diff -uNr linux-2.6.6/fs/freevxfs/vxfs_super.c linux-2.6.6-getsb/fs/freevxfs/vxfs_super.c --- linux-2.6.6/fs/freevxfs/vxfs_super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/freevxfs/vxfs_super.c 2004-05-18 13:19:52.000000000 +0100 @@ -243,7 +243,7 @@ * The usual module blurb. */ static struct super_block *vxfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, vxfs_fill_super); } diff -uNr linux-2.6.6/fs/hfs/super.c linux-2.6.6-getsb/fs/hfs/super.c --- linux-2.6.6/fs/hfs/super.c 2004-05-11 11:28:55.000000000 +0100 +++ linux-2.6.6-getsb/fs/hfs/super.c 2004-05-18 13:21:20.000000000 +0100 @@ -316,7 +316,8 @@ } static struct super_block *hfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, + struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, hfs_fill_super); } diff -uNr linux-2.6.6/fs/hfsplus/super.c linux-2.6.6-getsb/fs/hfsplus/super.c --- linux-2.6.6/fs/hfsplus/super.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/hfsplus/super.c 2004-05-18 13:18:00.000000000 +0100 @@ -441,7 +441,8 @@ #define HFSPLUS_INODE_SIZE sizeof(struct hfsplus_inode_info) static struct super_block *hfsplus_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, + struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, hfsplus_fill_super); } diff -uNr linux-2.6.6/fs/hpfs/super.c linux-2.6.6-getsb/fs/hpfs/super.c --- linux-2.6.6/fs/hpfs/super.c 2004-05-11 11:28:31.000000000 +0100 +++ linux-2.6.6-getsb/fs/hpfs/super.c 2004-05-18 13:19:36.000000000 +0100 @@ -661,7 +661,7 @@ } static struct super_block *hpfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, hpfs_fill_super); } diff -uNr linux-2.6.6/fs/hugetlbfs/inode.c linux-2.6.6-getsb/fs/hugetlbfs/inode.c --- linux-2.6.6/fs/hugetlbfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/hugetlbfs/inode.c 2004-05-18 13:21:25.000000000 +0100 @@ -670,7 +670,7 @@ } static struct super_block *hugetlbfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, hugetlbfs_fill_super); } diff -uNr linux-2.6.6/fs/intermezzo/super.c linux-2.6.6-getsb/fs/intermezzo/super.c --- linux-2.6.6/fs/intermezzo/super.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/intermezzo/super.c 2004-05-18 13:17:06.000000000 +0100 @@ -188,7 +188,7 @@ mount options to cache FS */ struct super_block * presto_get_sb(struct file_system_type *izo_type, int flags, - const char *devname, void *data) + const char *devname, void *data, struct dentry **_root) { struct file_system_type *fstype; struct presto_cache *cache = NULL; diff -uNr linux-2.6.6/fs/isofs/inode.c linux-2.6.6-getsb/fs/isofs/inode.c --- linux-2.6.6/fs/isofs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/isofs/inode.c 2004-05-18 13:20:49.000000000 +0100 @@ -1419,7 +1419,7 @@ #endif static struct super_block *isofs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, isofs_fill_super); } diff -uNr linux-2.6.6/fs/jffs/inode-v23.c linux-2.6.6-getsb/fs/jffs/inode-v23.c --- linux-2.6.6/fs/jffs/inode-v23.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/jffs/inode-v23.c 2004-05-18 13:22:10.000000000 +0100 @@ -1788,7 +1788,7 @@ }; static struct super_block *jffs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, jffs_fill_super); } diff -uNr linux-2.6.6/fs/jffs2/super.c linux-2.6.6-getsb/fs/jffs2/super.c --- linux-2.6.6/fs/jffs2/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/jffs2/super.c 2004-05-18 13:16:54.000000000 +0100 @@ -167,7 +167,7 @@ static struct super_block *jffs2_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data) + void *data, struct dentry **_root) { int err; struct nameidata nd; diff -uNr linux-2.6.6/fs/jfs/super.c linux-2.6.6-getsb/fs/jfs/super.c --- linux-2.6.6/fs/jfs/super.c 2004-05-11 11:28:31.000000000 +0100 +++ linux-2.6.6-getsb/fs/jfs/super.c 2004-05-18 13:15:46.000000000 +0100 @@ -494,7 +494,7 @@ } static struct super_block *jfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, jfs_fill_super); } diff -uNr linux-2.6.6/fs/minix/inode.c linux-2.6.6-getsb/fs/minix/inode.c --- linux-2.6.6/fs/minix/inode.c 2004-05-11 11:26:07.000000000 +0100 +++ linux-2.6.6-getsb/fs/minix/inode.c 2004-05-18 13:21:10.000000000 +0100 @@ -556,7 +556,7 @@ } static struct super_block *minix_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, minix_fill_super); } diff -uNr linux-2.6.6/fs/msdos/namei.c linux-2.6.6-getsb/fs/msdos/namei.c --- linux-2.6.6/fs/msdos/namei.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/msdos/namei.c 2004-05-18 13:22:30.000000000 +0100 @@ -596,7 +596,7 @@ } static struct super_block *msdos_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, msdos_fill_super); } diff -uNr linux-2.6.6/fs/ncpfs/inode.c linux-2.6.6-getsb/fs/ncpfs/inode.c --- linux-2.6.6/fs/ncpfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/ncpfs/inode.c 2004-05-18 13:19:57.000000000 +0100 @@ -963,7 +963,7 @@ #endif static struct super_block *ncp_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, ncp_fill_super); } diff -uNr linux-2.6.6/fs/nfs/inode.c linux-2.6.6-getsb/fs/nfs/inode.c --- linux-2.6.6/fs/nfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/nfs/inode.c 2004-05-18 13:14:47.000000000 +0100 @@ -1305,7 +1305,7 @@ } static struct super_block *nfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *raw_data) + int flags, const char *dev_name, void *raw_data, struct dentry **_root) { int error; struct nfs_server *server; @@ -1623,7 +1623,7 @@ } static struct super_block *nfs4_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *raw_data) + int flags, const char *dev_name, void *raw_data, struct dentry **_root) { int error; struct nfs_server *server; diff -uNr linux-2.6.6/fs/nfsd/nfsctl.c linux-2.6.6-getsb/fs/nfsd/nfsctl.c --- linux-2.6.6/fs/nfsd/nfsctl.c 2004-05-11 11:26:05.000000000 +0100 +++ linux-2.6.6-getsb/fs/nfsd/nfsctl.c 2004-05-18 13:22:50.000000000 +0100 @@ -417,7 +417,7 @@ } static struct super_block *nfsd_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, nfsd_fill_super); } diff -uNr linux-2.6.6/fs/ntfs/super.c linux-2.6.6-getsb/fs/ntfs/super.c --- linux-2.6.6/fs/ntfs/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/ntfs/super.c 2004-05-18 13:19:44.000000000 +0100 @@ -1999,7 +1999,7 @@ DECLARE_MUTEX(ntfs_lock); static struct super_block *ntfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, ntfs_fill_super); } diff -uNr linux-2.6.6/fs/openpromfs/inode.c linux-2.6.6-getsb/fs/openpromfs/inode.c --- linux-2.6.6/fs/openpromfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/openpromfs/inode.c 2004-05-18 13:22:05.000000000 +0100 @@ -1054,7 +1054,7 @@ } static struct super_block *openprom_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, openprom_fill_super); } diff -uNr linux-2.6.6/fs/pipe.c linux-2.6.6-getsb/fs/pipe.c --- linux-2.6.6/fs/pipe.c 2004-05-11 11:28:31.000000000 +0100 +++ linux-2.6.6-getsb/fs/pipe.c 2004-05-18 13:22:19.000000000 +0100 @@ -696,7 +696,7 @@ */ static struct super_block *pipefs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_pseudo(fs_type, "pipe:", NULL, PIPEFS_MAGIC); } diff -uNr linux-2.6.6/fs/proc/root.c linux-2.6.6-getsb/fs/proc/root.c --- linux-2.6.6/fs/proc/root.c 2004-05-11 11:28:31.000000000 +0100 +++ linux-2.6.6-getsb/fs/proc/root.c 2004-05-18 13:20:31.000000000 +0100 @@ -25,7 +25,7 @@ #endif static struct super_block *proc_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, proc_fill_super); } diff -uNr linux-2.6.6/fs/qnx4/inode.c linux-2.6.6-getsb/fs/qnx4/inode.c --- linux-2.6.6/fs/qnx4/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/qnx4/inode.c 2004-05-18 13:21:56.000000000 +0100 @@ -559,7 +559,7 @@ } static struct super_block *qnx4_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, qnx4_fill_super); } diff -uNr linux-2.6.6/fs/ramfs/inode.c linux-2.6.6-getsb/fs/ramfs/inode.c --- linux-2.6.6/fs/ramfs/inode.c 2004-05-11 11:26:07.000000000 +0100 +++ linux-2.6.6-getsb/fs/ramfs/inode.c 2004-05-18 13:21:33.000000000 +0100 @@ -199,13 +199,13 @@ } static struct super_block *ramfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, ramfs_fill_super); } static struct super_block *rootfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags|MS_NOUSER, data, ramfs_fill_super); } diff -uNr linux-2.6.6/fs/reiserfs/super.c linux-2.6.6-getsb/fs/reiserfs/super.c --- linux-2.6.6/fs/reiserfs/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/reiserfs/super.c 2004-05-18 13:18:52.000000000 +0100 @@ -1509,7 +1509,7 @@ static struct super_block* get_super_block (struct file_system_type *fs_type, int flags, - const char *dev_name, void *data) + const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, reiserfs_fill_super); } diff -uNr linux-2.6.6/fs/romfs/inode.c linux-2.6.6-getsb/fs/romfs/inode.c --- linux-2.6.6/fs/romfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/romfs/inode.c 2004-05-18 13:21:03.000000000 +0100 @@ -607,7 +607,7 @@ }; static struct super_block *romfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, romfs_fill_super); } diff -uNr linux-2.6.6/fs/smbfs/inode.c linux-2.6.6-getsb/fs/smbfs/inode.c --- linux-2.6.6/fs/smbfs/inode.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/smbfs/inode.c 2004-05-18 13:20:21.000000000 +0100 @@ -776,7 +776,7 @@ #endif static struct super_block *smb_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, smb_fill_super); } diff -uNr linux-2.6.6/fs/sysfs/mount.c linux-2.6.6-getsb/fs/sysfs/mount.c --- linux-2.6.6/fs/sysfs/mount.c 2004-05-11 11:26:06.000000000 +0100 +++ linux-2.6.6-getsb/fs/sysfs/mount.c 2004-05-18 13:18:10.000000000 +0100 @@ -55,7 +55,7 @@ } static struct super_block *sysfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, sysfs_fill_super); } diff -uNr linux-2.6.6/fs/sysv/super.c linux-2.6.6-getsb/fs/sysv/super.c --- linux-2.6.6/fs/sysv/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/sysv/super.c 2004-05-18 13:19:16.000000000 +0100 @@ -499,13 +499,13 @@ /* Every kernel module contains stuff like this. */ static struct super_block *sysv_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, sysv_fill_super); } static struct super_block *v7_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, v7_fill_super); } diff -uNr linux-2.6.6/fs/udf/super.c linux-2.6.6-getsb/fs/udf/super.c --- linux-2.6.6/fs/udf/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/udf/super.c 2004-05-18 13:17:49.000000000 +0100 @@ -100,7 +100,7 @@ /* UDF filesystem type */ static struct super_block *udf_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, udf_fill_super); } diff -uNr linux-2.6.6/fs/ufs/super.c linux-2.6.6-getsb/fs/ufs/super.c --- linux-2.6.6/fs/ufs/super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/ufs/super.c 2004-05-18 13:14:57.000000000 +0100 @@ -1209,7 +1209,7 @@ }; static struct super_block *ufs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, ufs_fill_super); } diff -uNr linux-2.6.6/fs/vfat/namei.c linux-2.6.6-getsb/fs/vfat/namei.c --- linux-2.6.6/fs/vfat/namei.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/vfat/namei.c 2004-05-18 13:22:25.000000000 +0100 @@ -1121,7 +1121,7 @@ } static struct super_block *vfat_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, vfat_fill_super); } diff -uNr linux-2.6.6/fs/xfs/linux/xfs_super.c linux-2.6.6-getsb/fs/xfs/linux/xfs_super.c --- linux-2.6.6/fs/xfs/linux/xfs_super.c 2004-05-11 11:28:56.000000000 +0100 +++ linux-2.6.6-getsb/fs/xfs/linux/xfs_super.c 2004-05-18 13:22:42.000000000 +0100 @@ -745,7 +745,8 @@ struct file_system_type *fs_type, int flags, const char *dev_name, - void *data) + void *data, + struct dentry **_root) { return get_sb_bdev(fs_type, flags, dev_name, data, linvfs_fill_super); } diff -uNr linux-2.6.6/ipc/mqueue.c linux-2.6.6-getsb/ipc/mqueue.c --- linux-2.6.6/ipc/mqueue.c 2004-05-11 11:28:57.000000000 +0100 +++ linux-2.6.6-getsb/ipc/mqueue.c 2004-05-18 13:35:59.000000000 +0100 @@ -168,7 +168,7 @@ static struct super_block *mqueue_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, - void *data) + void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, mqueue_fill_super); } diff -uNr linux-2.6.6/kernel/futex.c linux-2.6.6-getsb/kernel/futex.c --- linux-2.6.6/kernel/futex.c 2004-05-11 11:27:00.000000000 +0100 +++ linux-2.6.6-getsb/kernel/futex.c 2004-05-18 13:34:41.000000000 +0100 @@ -674,7 +674,7 @@ static struct super_block * futexfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_pseudo(fs_type, "futex", NULL, 0xBAD1DEA); } diff -uNr linux-2.6.6/mm/shmem.c linux-2.6.6-getsb/mm/shmem.c --- linux-2.6.6/mm/shmem.c 2004-05-11 11:28:57.000000000 +0100 +++ linux-2.6.6-getsb/mm/shmem.c 2004-05-18 13:36:22.000000000 +0100 @@ -1879,7 +1879,7 @@ }; static struct super_block *shmem_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_nodev(fs_type, flags, data, shmem_fill_super); } diff -uNr linux-2.6.6/net/socket.c linux-2.6.6-getsb/net/socket.c --- linux-2.6.6/net/socket.c 2004-05-11 11:28:58.000000000 +0100 +++ linux-2.6.6-getsb/net/socket.c 2004-05-18 13:33:37.000000000 +0100 @@ -323,7 +323,7 @@ }; static struct super_block *sockfs_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC); } diff -uNr linux-2.6.6/net/sunrpc/rpc_pipe.c linux-2.6.6-getsb/net/sunrpc/rpc_pipe.c --- linux-2.6.6/net/sunrpc/rpc_pipe.c 2004-05-11 11:26:46.000000000 +0100 +++ linux-2.6.6-getsb/net/sunrpc/rpc_pipe.c 2004-05-18 13:34:18.000000000 +0100 @@ -793,7 +793,7 @@ static struct super_block * rpc_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, struct dentry **_root) { return get_sb_single(fs_type, flags, data, rpc_fill_super); } diff -uNr linux-2.6.6/security/selinux/selinuxfs.c linux-2.6.6-getsb/security/selinux/selinuxfs.c --- linux-2.6.6/security/selinux/selinuxfs.c 2004-05-11 11:28:58.000000000 +0100 +++ linux-2.6.6-getsb/security/selinux/selinuxfs.c 2004-05-18 13:36:43.000000000 +0100 @@ -1088,7 +1088,8 @@ } static struct super_block *sel_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) + int flags, const char *dev_name, void *data, + struct dentry **_root) { return get_sb_single(fs_type, flags, data, sel_fill_super); }