Commit e368ea0b authored by Brian Gerst's avatar Brian Gerst Committed by Linus Torvalds

[PATCH] struct super_block cleanup - hfs

Seperates hfs_sb_info from struct super_block.
parent 4758c319
...@@ -178,6 +178,9 @@ static void hfs_put_super(struct super_block *sb) ...@@ -178,6 +178,9 @@ static void hfs_put_super(struct super_block *sb)
/* restore default blocksize for the device */ /* restore default blocksize for the device */
set_blocksize(sb->s_dev, BLOCK_SIZE); set_blocksize(sb->s_dev, BLOCK_SIZE);
kfree(sb->u.generic_sbp);
sb->u.generic_sbp = NULL;
} }
/* /*
...@@ -443,6 +446,7 @@ static int parse_options(char *options, struct hfs_sb_info *hsb, int *part) ...@@ -443,6 +446,7 @@ static int parse_options(char *options, struct hfs_sb_info *hsb, int *part)
*/ */
int hfs_fill_super(struct super_block *s, void *data, int silent) int hfs_fill_super(struct super_block *s, void *data, int silent)
{ {
struct hfs_sb_info *sbi;
struct hfs_mdb *mdb; struct hfs_mdb *mdb;
struct hfs_cat_key key; struct hfs_cat_key key;
kdev_t dev = s->s_dev; kdev_t dev = s->s_dev;
...@@ -450,7 +454,13 @@ int hfs_fill_super(struct super_block *s, void *data, int silent) ...@@ -450,7 +454,13 @@ int hfs_fill_super(struct super_block *s, void *data, int silent)
struct inode *root_inode; struct inode *root_inode;
int part; int part;
if (!parse_options((char *)data, HFS_SB(s), &part)) { sbi = kmalloc(sizeof(struct hfs_sb_info), GFP_KERNEL);
if (!sbi)
return -ENOMEM;
s->u.generic_sbp = sbi;
memset(sbi, 0, sizeof(struct hfs_sb_info));
if (!parse_options((char *)data, sbi, &part)) {
hfs_warn("hfs_fs: unable to parse mount options.\n"); hfs_warn("hfs_fs: unable to parse mount options.\n");
goto bail3; goto bail3;
} }
...@@ -485,7 +495,7 @@ int hfs_fill_super(struct super_block *s, void *data, int silent) ...@@ -485,7 +495,7 @@ int hfs_fill_super(struct super_block *s, void *data, int silent)
goto bail2; goto bail2;
} }
HFS_SB(s)->s_mdb = mdb; sbi->s_mdb = mdb;
if (HFS_ITYPE(mdb->next_id) != 0) { if (HFS_ITYPE(mdb->next_id) != 0) {
hfs_warn("hfs_fs: too many files.\n"); hfs_warn("hfs_fs: too many files.\n");
goto bail1; goto bail1;
...@@ -522,6 +532,8 @@ int hfs_fill_super(struct super_block *s, void *data, int silent) ...@@ -522,6 +532,8 @@ int hfs_fill_super(struct super_block *s, void *data, int silent)
bail2: bail2:
set_blocksize(dev, BLOCK_SIZE); set_blocksize(dev, BLOCK_SIZE);
bail3: bail3:
kfree(sbi);
sb->u.generic_sbp = NULL;
return -EINVAL; return -EINVAL;
} }
......
...@@ -651,7 +651,6 @@ struct quota_mount_options ...@@ -651,7 +651,6 @@ struct quota_mount_options
#include <linux/affs_fs_sb.h> #include <linux/affs_fs_sb.h>
#include <linux/ufs_fs_sb.h> #include <linux/ufs_fs_sb.h>
#include <linux/romfs_fs_sb.h> #include <linux/romfs_fs_sb.h>
#include <linux/hfs_fs_sb.h>
#include <linux/adfs_fs_sb.h> #include <linux/adfs_fs_sb.h>
#include <linux/reiserfs_fs_sb.h> #include <linux/reiserfs_fs_sb.h>
#include <linux/bfs_fs_sb.h> #include <linux/bfs_fs_sb.h>
...@@ -697,7 +696,6 @@ struct super_block { ...@@ -697,7 +696,6 @@ struct super_block {
struct affs_sb_info affs_sb; struct affs_sb_info affs_sb;
struct ufs_sb_info ufs_sb; struct ufs_sb_info ufs_sb;
struct romfs_sb_info romfs_sb; struct romfs_sb_info romfs_sb;
struct hfs_sb_info hfs_sb;
struct adfs_sb_info adfs_sb; struct adfs_sb_info adfs_sb;
struct reiserfs_sb_info reiserfs_sb; struct reiserfs_sb_info reiserfs_sb;
struct bfs_sb_info bfs_sb; struct bfs_sb_info bfs_sb;
......
...@@ -318,12 +318,17 @@ extern int hfs_mac2triv(char *, const struct hfs_name *); ...@@ -318,12 +318,17 @@ extern int hfs_mac2triv(char *, const struct hfs_name *);
extern void hfs_tolower(unsigned char *, int); extern void hfs_tolower(unsigned char *, int);
#include <linux/hfs_fs_i.h> #include <linux/hfs_fs_i.h>
#include <linux/hfs_fs_sb.h>
static inline struct hfs_inode_info *HFS_I(struct inode *inode) static inline struct hfs_inode_info *HFS_I(struct inode *inode)
{ {
return list_entry(inode, struct hfs_inode_info, vfs_inode); return list_entry(inode, struct hfs_inode_info, vfs_inode);
} }
#define HFS_SB(X) (&((X)->u.hfs_sb))
static inline struct hfs_sb_info *HFS_SB(struct super_block *sb)
{
return sb->u.generic_sbp;
}
static inline void hfs_nameout(struct inode *dir, struct hfs_name *out, static inline void hfs_nameout(struct inode *dir, struct hfs_name *out,
const char *in, int len) { const char *in, int len) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment