#include <linux/buffer_head.h>
#include <linux/vfs.h>
+static int efs_statfs(struct super_block *s, struct kstatfs *buf);
+static int efs_fill_super(struct super_block *s, void *d, int silent);
+
static struct super_block *efs_get_sb(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data)
{
.fs_flags = FS_REQUIRES_DEV,
};
+static struct pt_types sgi_pt_types[] = {
+ {0x00, "SGI vh"},
+ {0x01, "SGI trkrepl"},
+ {0x02, "SGI secrepl"},
+ {0x03, "SGI raw"},
+ {0x04, "SGI bsd"},
+ {SGI_SYSV, "SGI sysv"},
+ {0x06, "SGI vol"},
+ {SGI_EFS, "SGI efs"},
+ {0x08, "SGI lv"},
+ {0x09, "SGI rlv"},
+ {0x0A, "SGI xfs"},
+ {0x0B, "SGI xfslog"},
+ {0x0C, "SGI xlv"},
+ {0x82, "Linux swap"},
+ {0x83, "Linux native"},
+ {0, NULL}
+};
+
+
static kmem_cache_t * efs_inode_cachep;
static struct inode *efs_alloc_inode(struct super_block *sb)
{
efs_inode_cachep = kmem_cache_create("efs_inode_cache",
sizeof(struct efs_inode_info),
- 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
+ 0, SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD,
init_once, NULL);
if (efs_inode_cachep == NULL)
return -ENOMEM;
printk(KERN_INFO "efs_inode_cache: not all structures were freed\n");
}
-void efs_put_super(struct super_block *s)
+static void efs_put_super(struct super_block *s)
{
kfree(s->s_fs_info);
s->s_fs_info = NULL;
.remount_fs = efs_remount,
};
+static struct export_operations efs_export_ops = {
+ .get_parent = efs_get_parent,
+};
+
static int __init init_efs_fs(void) {
int err;
printk("EFS: "EFS_VERSION" - http://aeschi.ch.eu.org/efs/\n");
static efs_block_t efs_validate_vh(struct volume_header *vh) {
int i;
- unsigned int cs, csum, *ui;
+ __be32 cs, *ui;
+ int csum;
efs_block_t sblock = 0; /* shuts up gcc */
struct pt_types *pt_entry;
int pt_type, slice = -1;
return 0;
}
- ui = ((unsigned int *) (vh + 1)) - 1;
- for(csum = 0; ui >= ((unsigned int *) vh);) {
+ ui = ((__be32 *) (vh + 1)) - 1;
+ for(csum = 0; ui >= ((__be32 *) vh);) {
cs = *ui--;
csum += be32_to_cpu(cs);
}
sblock);
#endif
}
- return(sblock);
+ return sblock;
}
static int efs_validate_super(struct efs_sb_info *sb, struct efs_super *super) {
- if (!IS_EFS_MAGIC(be32_to_cpu(super->fs_magic))) return -1;
+ if (!IS_EFS_MAGIC(be32_to_cpu(super->fs_magic)))
+ return -1;
sb->fs_magic = be32_to_cpu(super->fs_magic);
sb->total_blocks = be32_to_cpu(super->fs_size);
return 0;
}
-int efs_fill_super(struct super_block *s, void *d, int silent)
+static int efs_fill_super(struct super_block *s, void *d, int silent)
{
struct efs_sb_info *sb;
struct buffer_head *bh;
s->s_flags |= MS_RDONLY;
}
s->s_op = &efs_superblock_operations;
+ s->s_export_op = &efs_export_ops;
root = iget(s, EFS_ROOTINODE);
s->s_root = d_alloc_root(root);
return -EINVAL;
}
-int efs_statfs(struct super_block *s, struct kstatfs *buf) {
+static int efs_statfs(struct super_block *s, struct kstatfs *buf) {
struct efs_sb_info *sb = SUPER_INFO(s);
buf->f_type = EFS_SUPER_MAGIC; /* efs magic number */