summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-07-14 03:07:57 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-07-14 03:07:57 -0700
commitf70158b9ca9a1ba46043475167e64bf9a6898fed (patch)
treeef30d4d6a1759149790d3eea59882f046e784a50 /kernel
parentca3dd5647c654d115ff906db03ae9550fa4ed722 (diff)
[PATCH] futex filesystem handling
Eeek.... futex.c is seriously b0rken.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/futex.c39
1 files changed, 5 insertions, 34 deletions
diff --git a/kernel/futex.c b/kernel/futex.c
index 36c693bd1e23..4f108c29a5e6 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -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]);