diff options
Diffstat (limited to 'fs/sysfs/mount.c')
| -rw-r--r-- | fs/sysfs/mount.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c index fbc7b65fe262..c76c540be3c8 100644 --- a/fs/sysfs/mount.c +++ b/fs/sysfs/mount.c | |||
| @@ -1,5 +1,13 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * mount.c - operations for initializing and mounting sysfs. | 2 | * fs/sysfs/symlink.c - operations for initializing and mounting sysfs |
| 3 | * | ||
| 4 | * Copyright (c) 2001-3 Patrick Mochel | ||
| 5 | * Copyright (c) 2007 SUSE Linux Products GmbH | ||
| 6 | * Copyright (c) 2007 Tejun Heo <teheo@suse.de> | ||
| 7 | * | ||
| 8 | * This file is released under the GPLv2. | ||
| 9 | * | ||
| 10 | * Please see Documentation/filesystems/sysfs.txt for more information. | ||
| 3 | */ | 11 | */ |
| 4 | 12 | ||
| 5 | #define DEBUG | 13 | #define DEBUG |
| @@ -8,25 +16,25 @@ | |||
| 8 | #include <linux/mount.h> | 16 | #include <linux/mount.h> |
| 9 | #include <linux/pagemap.h> | 17 | #include <linux/pagemap.h> |
| 10 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 11 | #include <asm/semaphore.h> | ||
| 12 | 19 | ||
| 13 | #include "sysfs.h" | 20 | #include "sysfs.h" |
| 14 | 21 | ||
| 15 | /* Random magic number */ | 22 | /* Random magic number */ |
| 16 | #define SYSFS_MAGIC 0x62656572 | 23 | #define SYSFS_MAGIC 0x62656572 |
| 17 | 24 | ||
| 18 | struct vfsmount *sysfs_mount; | 25 | static struct vfsmount *sysfs_mount; |
| 19 | struct super_block * sysfs_sb = NULL; | 26 | struct super_block * sysfs_sb = NULL; |
| 20 | struct kmem_cache *sysfs_dir_cachep; | 27 | struct kmem_cache *sysfs_dir_cachep; |
| 21 | 28 | ||
| 22 | static const struct super_operations sysfs_ops = { | 29 | static const struct super_operations sysfs_ops = { |
| 23 | .statfs = simple_statfs, | 30 | .statfs = simple_statfs, |
| 24 | .drop_inode = sysfs_delete_inode, | 31 | .drop_inode = generic_delete_inode, |
| 25 | }; | 32 | }; |
| 26 | 33 | ||
| 27 | struct sysfs_dirent sysfs_root = { | 34 | struct sysfs_dirent sysfs_root = { |
| 35 | .s_name = "", | ||
| 28 | .s_count = ATOMIC_INIT(1), | 36 | .s_count = ATOMIC_INIT(1), |
| 29 | .s_flags = SYSFS_ROOT, | 37 | .s_flags = SYSFS_DIR, |
| 30 | .s_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, | 38 | .s_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, |
| 31 | .s_ino = 1, | 39 | .s_ino = 1, |
| 32 | }; | 40 | }; |
| @@ -50,11 +58,6 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 50 | return -ENOMEM; | 58 | return -ENOMEM; |
| 51 | } | 59 | } |
| 52 | 60 | ||
| 53 | inode->i_op = &sysfs_dir_inode_operations; | ||
| 54 | inode->i_fop = &sysfs_dir_operations; | ||
| 55 | inc_nlink(inode); /* directory, account for "." */ | ||
| 56 | unlock_new_inode(inode); | ||
| 57 | |||
| 58 | /* instantiate and link root dentry */ | 61 | /* instantiate and link root dentry */ |
| 59 | root = d_alloc_root(inode); | 62 | root = d_alloc_root(inode); |
| 60 | if (!root) { | 63 | if (!root) { |
| @@ -62,7 +65,6 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent) | |||
| 62 | iput(inode); | 65 | iput(inode); |
| 63 | return -ENOMEM; | 66 | return -ENOMEM; |
| 64 | } | 67 | } |
| 65 | sysfs_root.s_dentry = root; | ||
| 66 | root->d_fsdata = &sysfs_root; | 68 | root->d_fsdata = &sysfs_root; |
| 67 | sb->s_root = root; | 69 | sb->s_root = root; |
| 68 | return 0; | 70 | return 0; |
| @@ -77,7 +79,7 @@ static int sysfs_get_sb(struct file_system_type *fs_type, | |||
| 77 | static struct file_system_type sysfs_fs_type = { | 79 | static struct file_system_type sysfs_fs_type = { |
| 78 | .name = "sysfs", | 80 | .name = "sysfs", |
| 79 | .get_sb = sysfs_get_sb, | 81 | .get_sb = sysfs_get_sb, |
| 80 | .kill_sb = kill_litter_super, | 82 | .kill_sb = kill_anon_super, |
| 81 | }; | 83 | }; |
| 82 | 84 | ||
| 83 | int __init sysfs_init(void) | 85 | int __init sysfs_init(void) |
