summaryrefslogtreecommitdiffstats
path: root/fs/efs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/efs')
-rw-r--r--fs/efs/super.c40
1 files changed, 13 insertions, 27 deletions
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 4522b2cfe..092c2f0a7 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -13,12 +13,7 @@
#include <linux/efs_vh.h>
#include <linux/efs_fs_sb.h>
-static struct file_system_type efs_fs_type = {
- "efs", /* filesystem name */
- FS_REQUIRES_DEV, /* fs_flags */
- efs_read_super, /* entry function pointer */
- NULL /* next */
-};
+static DECLARE_FSTYPE_DEV(efs_fs_type, "efs", efs_read_super);
static struct super_operations efs_superblock_operations = {
read_inode: efs_read_inode,
@@ -145,9 +140,6 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int silent) {
struct efs_sb_info *sb;
struct buffer_head *bh;
- MOD_INC_USE_COUNT;
- lock_super(s);
-
sb = SUPER_INFO(s);
set_blocksize(dev, EFS_BLOCKSIZE);
@@ -199,7 +191,6 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int silent) {
s->s_op = &efs_superblock_operations;
s->s_dev = dev;
s->s_root = d_alloc_root(iget(s, EFS_ROOTINODE));
- unlock_super(s);
if (!(s->s_root)) {
printk(KERN_ERR "EFS: get root inode failed\n");
@@ -214,35 +205,30 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int silent) {
return(s);
out_no_fs_ul:
- unlock_super(s);
out_no_fs:
- s->s_dev = 0;
- MOD_DEC_USE_COUNT;
return(NULL);
}
void efs_put_super(struct super_block *s) {
- MOD_DEC_USE_COUNT;
}
-int efs_statfs(struct super_block *s, struct statfs *buf, int bufsiz) {
- struct statfs ret;
+int efs_statfs(struct super_block *s, struct statfs *buf) {
struct efs_sb_info *sb = SUPER_INFO(s);
- ret.f_type = EFS_SUPER_MAGIC; /* efs magic number */
- ret.f_bsize = EFS_BLOCKSIZE; /* blocksize */
- ret.f_blocks = sb->total_groups * /* total data blocks */
+ buf->f_type = EFS_SUPER_MAGIC; /* efs magic number */
+ buf->f_bsize = EFS_BLOCKSIZE; /* blocksize */
+ buf->f_blocks = sb->total_groups * /* total data blocks */
(sb->group_size - sb->inode_blocks);
- ret.f_bfree = sb->data_free; /* free data blocks */
- ret.f_bavail = sb->data_free; /* free blocks for non-root */
- ret.f_files = sb->total_groups * /* total inodes */
+ buf->f_bfree = sb->data_free; /* free data blocks */
+ buf->f_bavail = sb->data_free; /* free blocks for non-root */
+ buf->f_files = sb->total_groups * /* total inodes */
sb->inode_blocks *
(EFS_BLOCKSIZE / sizeof(struct efs_dinode));
- ret.f_ffree = sb->inode_free; /* free inodes */
- ret.f_fsid.val[0] = (sb->fs_magic >> 16) & 0xffff; /* fs ID */
- ret.f_fsid.val[1] = sb->fs_magic & 0xffff; /* fs ID */
- ret.f_namelen = EFS_MAXNAMELEN; /* max filename length */
+ buf->f_ffree = sb->inode_free; /* free inodes */
+ buf->f_fsid.val[0] = (sb->fs_magic >> 16) & 0xffff; /* fs ID */
+ buf->f_fsid.val[1] = sb->fs_magic & 0xffff; /* fs ID */
+ buf->f_namelen = EFS_MAXNAMELEN; /* max filename length */
- return copy_to_user(buf, &ret, bufsiz) ? -EFAULT : 0;
+ return 0;
}