Skip to contentSkip to conversation

struct super_block cleanup - hfs

PATCH New Brian Gerst 1 participant 1 message Mar 18, 2002

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 struct super_block cleanup - hfs

Seperates hfs_sb_info from struct super_block.

Signature · 1 line
						Brian Gerst
fs/hfs/super.c +14 -2
diff -urN linux-2.5.7-pre2/fs/hfs/super.c linux/fs/hfs/super.c
@@ -178,6 +178,9 @@
 
 	/* restore default blocksize for the device */
 	set_blocksize(sb->s_dev, BLOCK_SIZE);
+
+	kfree(sb->u.generic_sbp);
+	sb->u.generic_sbp = NULL;
 }
 
 /*
@@ -443,6 +446,7 @@
  */
 int hfs_fill_super(struct super_block *s, void *data, int silent)
 {
+	struct hfs_sb_info *sbi;
 	struct hfs_mdb *mdb;
 	struct hfs_cat_key key;
 	kdev_t dev = s->s_dev;
@@ -450,7 +454,13 @@
 	struct inode *root_inode;
 	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");
 		goto bail3;
 	}
@@ -485,7 +495,7 @@
 		goto bail2;
 	}
 
-	HFS_SB(s)->s_mdb = mdb;
+	sbi->s_mdb = mdb;
 	if (HFS_ITYPE(mdb->next_id) != 0) {
 		hfs_warn("hfs_fs: too many files.\n");
 		goto bail1;
@@ -522,6 +532,8 @@
 bail2:
 	set_blocksize(dev, BLOCK_SIZE);
 bail3:
+	kfree(sbi);
+	sb->u.generic_sbp = NULL;
 	return -EINVAL;	
 }
 
include/linux/fs.h +0 -2
diff -urN linux-2.5.7-pre2/include/linux/fs.h linux/include/linux/fs.h
@@ -653,7 +653,6 @@
 #include <linux/affs_fs_sb.h>
 #include <linux/ufs_fs_sb.h>
 #include <linux/romfs_fs_sb.h>
-#include <linux/hfs_fs_sb.h>
 #include <linux/adfs_fs_sb.h>
 #include <linux/reiserfs_fs_sb.h>
 #include <linux/bfs_fs_sb.h>
@@ -703,7 +702,6 @@
 		struct ufs_sb_info	ufs_sb;
 		struct shmem_sb_info	shmem_sb;
 		struct romfs_sb_info	romfs_sb;
-		struct hfs_sb_info	hfs_sb;
 		struct adfs_sb_info	adfs_sb;
 		struct reiserfs_sb_info	reiserfs_sb;
 		struct bfs_sb_info	bfs_sb;
include/linux/hfs_fs.h +6 -1
diff -urN linux-2.5.7-pre2/include/linux/hfs_fs.h linux/include/linux/hfs_fs.h
@@ -318,12 +318,17 @@
 extern void hfs_tolower(unsigned char *, int);
 
 #include <linux/hfs_fs_i.h>
+#include <linux/hfs_fs_sb.h>
 
 static inline struct hfs_inode_info *HFS_I(struct inode *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,
 				   const char *in, int len) {