]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] futex filesystem handling
authorAlexander Viro <viro@math.psu.edu>
Sun, 14 Jul 2002 10:07:57 +0000 (03:07 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Sun, 14 Jul 2002 10:07:57 +0000 (03:07 -0700)
Eeek....

futex.c is seriously b0rken.

kernel/futex.c

index 36c693bd1e2337c4dabd460e123bcb590d5b91bf..4f108c29a5e64a601afdb7a8f983114289da73d6 100644 (file)
@@ -48,7 +48,7 @@
 extern void send_sigio(struct fown_struct *fown, int fd, int band);
 
 /* Everyone needs a dentry and inode */
-static struct dentry *futex_dentry;
+static struct vfsmount *futex_mnt;
 
 /* We use this instead of a normal wait_queue_t, so we can wake only
    the relevent ones (hashed queues may be shared) */
@@ -272,7 +272,8 @@ static int futex_fd(struct list_head *head,
                return -ENFILE;
        }
        filp->f_op = &futex_fops;
-       filp->f_dentry = dget(futex_dentry);
+       filp->f_vfsmnt = mntget(futex_mnt);
+       filp->f_dentry = dget(futex_mnt->mnt_root);
 
        if (signal) {
                filp->f_owner.pid = current->pid;
@@ -348,46 +349,16 @@ asmlinkage int sys_futex(void *uaddr, int op, int val, struct timespec *utime)
        return ret;
 }
 
-/* FIXME: Oh yeah, makes sense to write a filesystem... */
-static struct super_operations futexfs_ops = { statfs: simple_statfs };
-
-/* Don't check error returns: we're dead if they happen */
-static int futexfs_fill_super(struct super_block *sb, void *data, int silent)
-{
-       struct inode *root;
-
-       sb->s_blocksize = 1024;
-       sb->s_blocksize_bits = 10;
-       sb->s_magic = 0xBAD1DEA;
-       sb->s_op = &futexfs_ops;
-
-       root = new_inode(sb);
-       root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
-       root->i_uid = root->i_gid = 0;
-       root->i_atime = root->i_mtime = root->i_ctime = CURRENT_TIME;
-
-       sb->s_root = d_alloc(NULL, &(const struct qstr) { "futex", 5, 0 });
-       sb->s_root->d_sb = sb;
-       sb->s_root->d_parent = sb->s_root;
-       d_instantiate(sb->s_root, root);
-
-       /* We never let this drop to zero. */
-       futex_dentry = dget(sb->s_root);
-
-       return 0;
-}
-
 static struct super_block *
 futexfs_get_sb(struct file_system_type *fs_type,
               int flags, char *dev_name, void *data)
 {
-       return get_sb_nodev(fs_type, flags, data, futexfs_fill_super);
+       return get_sb_pseudo(fs_type, "futex", NULL, 0xBAD1DEA);
 }
 
 static struct file_system_type futex_fs_type = {
        name:           "futexfs",
        get_sb:         futexfs_get_sb,
-       kill_sb:        kill_anon_super,
 };
 
 static int __init init(void)
@@ -395,7 +366,7 @@ static int __init init(void)
        unsigned int i;
 
        register_filesystem(&futex_fs_type);
-       kern_mount(&futex_fs_type);
+       futex_mnt = kern_mount(&futex_fs_type);
 
        for (i = 0; i < ARRAY_SIZE(futex_queues); i++)
                INIT_LIST_HEAD(&futex_queues[i]);