public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] struct super_block cleanup - reiserfs
@ 2002-03-28  1:11 Brian Gerst
  0 siblings, 0 replies; 2+ messages in thread
From: Brian Gerst @ 2002-03-28  1:11 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux-Kernel, davej

[-- Attachment #1: Type: text/plain, Size: 76 bytes --]

Seperates reiserfs_sb_info from struct super_block.

-- 

						Brian Gerst

[-- Attachment #2: sb-reiserfs-1 --]
[-- Type: text/plain, Size: 24375 bytes --]

diff -urN linux-2.5.7/fs/reiserfs/do_balan.c linux/fs/reiserfs/do_balan.c
--- linux-2.5.7/fs/reiserfs/do_balan.c	Thu Mar  7 21:18:15 2002
+++ linux/fs/reiserfs/do_balan.c	Wed Mar 27 19:38:22 2002
@@ -1527,7 +1527,7 @@
     ** and then free them now
     */
 
-    tb->tb_sb->u.reiserfs_sb.s_do_balance ++;
+    REISERFS_SB(tb->tb_sb)->s_do_balance ++;
 
 
     /* release all nodes hold to perform the balancing */
diff -urN linux-2.5.7/fs/reiserfs/fix_node.c linux/fs/reiserfs/fix_node.c
--- linux-2.5.7/fs/reiserfs/fix_node.c	Thu Mar  7 21:18:22 2002
+++ linux/fs/reiserfs/fix_node.c	Wed Mar 27 19:38:22 2002
@@ -1988,13 +1988,13 @@
 
     vp = kmalloc (size, flags);
     if (vp) {
-	s->u.reiserfs_sb.s_kmallocs += size;
-	if (s->u.reiserfs_sb.s_kmallocs > malloced + 200000) {
-	    reiserfs_warning ("vs-8301: reiserfs_kmalloc: allocated memory %d\n", s->u.reiserfs_sb.s_kmallocs);
-	    malloced = s->u.reiserfs_sb.s_kmallocs;
+	REISERFS_SB(s)->s_kmallocs += size;
+	if (REISERFS_SB(s)->s_kmallocs > malloced + 200000) {
+	    reiserfs_warning ("vs-8301: reiserfs_kmalloc: allocated memory %d\n", REISERFS_SB(s)->s_kmallocs);
+	    malloced = REISERFS_SB(s)->s_kmallocs;
 	}
     }
-/*printk ("malloc : size %d, allocated %d\n", size, s->u.reiserfs_sb.s_kmallocs);*/
+/*printk ("malloc : size %d, allocated %d\n", size, REISERFS_SB(s)->s_kmallocs);*/
     return vp;
 }
 
@@ -2002,9 +2002,9 @@
 {
     kfree (vp);
   
-    s->u.reiserfs_sb.s_kmallocs -= size;
-    if (s->u.reiserfs_sb.s_kmallocs < 0)
-	reiserfs_warning ("vs-8302: reiserfs_kfree: allocated memory %d\n", s->u.reiserfs_sb.s_kmallocs);
+    REISERFS_SB(s)->s_kmallocs -= size;
+    if (REISERFS_SB(s)->s_kmallocs < 0)
+	reiserfs_warning ("vs-8302: reiserfs_kfree: allocated memory %d\n", REISERFS_SB(s)->s_kmallocs);
 
 }
 #endif
@@ -2062,7 +2062,7 @@
 #ifdef CONFIG_REISERFS_CHECK
 		reiserfs_warning ("vs-8345: get_mem_for_virtual_node: "
 				  "kmalloc failed. reiserfs kmalloced %d bytes\n",
-				  tb->tb_sb->u.reiserfs_sb.s_kmallocs);
+				  REISERFS_SB(tb->tb_sb)->s_kmallocs);
 #endif
 		tb->vn_buf_size = 0;
 	    }
@@ -2290,7 +2290,7 @@
     int windex ;
     struct buffer_head  * p_s_tbS0 = PATH_PLAST_BUFFER(p_s_tb->tb_path);
 
-    ++ p_s_tb -> tb_sb -> u.reiserfs_sb.s_fix_nodes;
+    ++ REISERFS_SB(p_s_tb -> tb_sb) -> s_fix_nodes;
 
     n_pos_in_item = p_s_tb->tb_path->pos_in_item;
 
diff -urN linux-2.5.7/fs/reiserfs/ibalance.c linux/fs/reiserfs/ibalance.c
--- linux-2.5.7/fs/reiserfs/ibalance.c	Thu Mar  7 21:18:54 2002
+++ linux/fs/reiserfs/ibalance.c	Wed Mar 27 19:38:22 2002
@@ -623,10 +623,10 @@
 		new_root = tb->L[h-1];
 	    /* switch super block's tree root block number to the new value */
             PUT_SB_ROOT_BLOCK( tb->tb_sb, new_root->b_blocknr );
-	    //tb->tb_sb->u.reiserfs_sb.s_rs->s_tree_height --;
+	    //REISERFS_SB(tb->tb_sb)->s_rs->s_tree_height --;
             PUT_SB_TREE_HEIGHT( tb->tb_sb, SB_TREE_HEIGHT(tb->tb_sb) - 1 );
 
-	    do_balance_mark_sb_dirty (tb, tb->tb_sb->u.reiserfs_sb.s_sbh, 1);
+	    do_balance_mark_sb_dirty (tb, REISERFS_SB(tb->tb_sb)->s_sbh, 1);
 	    /*&&&&&&&&&&&&&&&&&&&&&&*/
 	    if (h > 1)
 		/* use check_internal if new root is an internal node */
@@ -949,7 +949,7 @@
 	/* Change root in structure super block. */
         PUT_SB_ROOT_BLOCK( tb->tb_sb, tbSh->b_blocknr );
         PUT_SB_TREE_HEIGHT( tb->tb_sb, SB_TREE_HEIGHT(tb->tb_sb) + 1 );
-	do_balance_mark_sb_dirty (tb, tb->tb_sb->u.reiserfs_sb.s_sbh, 1);
+	do_balance_mark_sb_dirty (tb, REISERFS_SB(tb->tb_sb)->s_sbh, 1);
 	tb->tb_sb->s_dirt = 1;
     }
 	
diff -urN linux-2.5.7/fs/reiserfs/inode.c linux/fs/reiserfs/inode.c
--- linux-2.5.7/fs/reiserfs/inode.c	Thu Mar  7 21:18:23 2002
+++ linux/fs/reiserfs/inode.c	Wed Mar 27 19:38:22 2002
@@ -1176,7 +1176,7 @@
        nlink==0: processing of open-unlinked and half-truncated files
        during mount (fs/reiserfs/super.c:finish_unfinished()). */
     if( ( inode -> i_nlink == 0 ) && 
-	! inode -> i_sb -> u.reiserfs_sb.s_is_unlinked_ok ) {
+	! REISERFS_SB(inode -> i_sb) -> s_is_unlinked_ok ) {
 	    reiserfs_warning( "vs-13075: reiserfs_read_inode2: "
 			      "dead inode read from disk %K. "
 			      "This is likely to be race with knfsd. Ignore\n", 
@@ -1515,7 +1515,7 @@
     else
 #if defined( USE_INODE_GENERATION_COUNTER )
       inode->i_generation = 
-	le32_to_cpu( sb -> u.reiserfs_sb.s_rs -> s_inode_generation );
+	le32_to_cpu( REISERFS_SB(sb) -> s_rs -> s_inode_generation );
 #else
       inode->i_generation = ++event;
 #endif
diff -urN linux-2.5.7/fs/reiserfs/namei.c linux/fs/reiserfs/namei.c
--- linux-2.5.7/fs/reiserfs/namei.c	Thu Mar  7 21:18:06 2002
+++ linux/fs/reiserfs/namei.c	Wed Mar 27 19:38:22 2002
@@ -183,7 +183,7 @@
     if (len == 2 && name[0] == '.' && name[1] == '.')
 	return DOT_DOT_OFFSET;
 
-    res = s->u.reiserfs_sb.s_hash_function (name, len);
+    res = REISERFS_SB(s)->s_hash_function (name, len);
 
     // take bits from 7-th to 30-th including both bounds
     res = GET_HASH_VALUE(res);
diff -urN linux-2.5.7/fs/reiserfs/prints.c linux/fs/reiserfs/prints.c
--- linux-2.5.7/fs/reiserfs/prints.c	Thu Mar  7 21:18:07 2002
+++ linux/fs/reiserfs/prints.c	Wed Mar 27 19:38:22 2002
@@ -592,7 +592,7 @@
 	     "MODE=%c, ITEM_POS=%d POS_IN_ITEM=%d\n" 
 	     "=====================================================================\n"
 	     "* h *    S    *    L    *    R    *   F   *   FL  *   FR  *  CFL  *  CFR  *\n",
-	     tb->tb_sb->u.reiserfs_sb.s_do_balance,
+	     REISERFS_SB(tb->tb_sb)->s_do_balance,
 	     tb->tb_mode, PATH_LAST_POSITION (tb->tb_path), tb->tb_path->pos_in_item);
   
     for (h = 0; h < sizeof(tb->insert_size) / sizeof (tb->insert_size[0]); h ++) {
@@ -717,9 +717,9 @@
   /*
   printk ("reiserfs_put_super: session statistics: balances %d, fix_nodes %d, \
 bmap with search %d, without %d, dir2ind %d, ind2dir %d\n",
-	  s->u.reiserfs_sb.s_do_balance, s->u.reiserfs_sb.s_fix_nodes,
-	  s->u.reiserfs_sb.s_bmaps, s->u.reiserfs_sb.s_bmaps_without_search,
-	  s->u.reiserfs_sb.s_direct2indirect, s->u.reiserfs_sb.s_indirect2direct);
+	  REISERFS_SB(s)->s_do_balance, REISERFS_SB(s)->s_fix_nodes,
+	  REISERFS_SB(s)->s_bmaps, REISERFS_SB(s)->s_bmaps_without_search,
+	  REISERFS_SB(s)->s_direct2indirect, REISERFS_SB(s)->s_indirect2direct);
   */
 
 }
diff -urN linux-2.5.7/fs/reiserfs/procfs.c linux/fs/reiserfs/procfs.c
--- linux-2.5.7/fs/reiserfs/procfs.c	Thu Mar  7 21:18:20 2002
+++ linux/fs/reiserfs/procfs.c	Wed Mar 27 19:38:22 2002
@@ -82,9 +82,9 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	if ( sb->u.reiserfs_sb.s_properties & (1 << REISERFS_3_6) ) {
+	if ( REISERFS_SB(sb)->s_properties & (1 << REISERFS_3_6) ) {
 		format = "3.6";
-	} else if ( sb->u.reiserfs_sb.s_properties & (1 << REISERFS_3_5) ) {
+	} else if ( REISERFS_SB(sb)->s_properties & (1 << REISERFS_3_5) ) {
 		format = "3.5";
 	} else {
 		format = "unknown";
@@ -140,7 +140,7 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	r = &sb->u.reiserfs_sb;
+	r = REISERFS_SB(sb);
 	len += sprintf( &buffer[ len ], 
 			"state: \t%s\n"
 			"mount options: \t%s%s%s%s%s%s%s%s%s%s%s%s\n"
@@ -220,7 +220,7 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	r = &sb->u.reiserfs_sb;
+	r = REISERFS_SB(sb);
 
 	len += sprintf( &buffer[ len ],
 			"level\t"
@@ -293,13 +293,13 @@
 			     int count, int *eof, void *data )
 {
 	struct super_block *sb;
-	struct reiserfs_sb_info *r = &sb->u.reiserfs_sb;
+	struct reiserfs_sb_info *r;
 	int len = 0;
     
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	r = &sb->u.reiserfs_sb;
+	r = REISERFS_SB(sb);
 
 	len += sprintf( &buffer[ len ], "free_block: %lu\n"
 			"find_forward:"
@@ -340,7 +340,7 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	sb_info = &sb->u.reiserfs_sb;
+	sb_info = REISERFS_SB(sb);
 	rs = sb_info -> s_rs;
 	hash_code = DFL( s_hash_function_code );
 
@@ -397,7 +397,7 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	sb_info = &sb->u.reiserfs_sb;
+	sb_info = REISERFS_SB(sb);
 	rs = sb_info -> s_rs;
 	mapsize = le16_to_cpu( rs -> s_v1.s_oid_cursize );
 	total_used = 0;
@@ -449,7 +449,7 @@
 	sb = procinfo_prologue( to_kdev_t((int)data) );
 	if( sb == NULL )
 		return -ENOENT;
-	r = &sb->u.reiserfs_sb;
+	r = REISERFS_SB(sb);
 	rs = r -> s_rs;
 	jp = &rs->s_v1.s_journal;
 
@@ -557,9 +557,9 @@
 int reiserfs_proc_info_init( struct super_block *sb )
 {
 	spin_lock_init( & __PINFO( sb ).lock );
-	sb->u.reiserfs_sb.procdir = proc_mkdir(sb->s_id, proc_info_root);
-	if( sb->u.reiserfs_sb.procdir ) {
-		sb->u.reiserfs_sb.procdir -> owner = THIS_MODULE;
+	REISERFS_SB(sb)->procdir = proc_mkdir(sb->s_id, proc_info_root);
+	if( REISERFS_SB(sb)->procdir ) {
+		REISERFS_SB(sb)->procdir -> owner = THIS_MODULE;
 		return 0;
 	}
 	reiserfs_warning( "reiserfs: cannot create /proc/%s/%s\n",
@@ -575,7 +575,7 @@
 	spin_unlock( & __PINFO( sb ).lock );
 	if ( proc_info_root ) {
 		remove_proc_entry( sb->s_id, proc_info_root );
-		sb->u.reiserfs_sb.procdir = NULL;
+		REISERFS_SB(sb)->procdir = NULL;
 	}
 	return 0;
 }
@@ -587,14 +587,14 @@
 struct proc_dir_entry *reiserfs_proc_register( struct super_block *sb, 
 					       char *name, read_proc_t *func )
 {
-	return ( sb->u.reiserfs_sb.procdir ) ? create_proc_read_entry
-		( name, 0, sb->u.reiserfs_sb.procdir, func, 
+	return ( REISERFS_SB(sb)->procdir ) ? create_proc_read_entry
+		( name, 0, REISERFS_SB(sb)->procdir, func, 
 		  ( void * ) kdev_t_to_nr( sb -> s_dev ) ) : NULL;
 }
 
 void reiserfs_proc_unregister( struct super_block *sb, const char *name )
 {
-	remove_proc_entry( name, sb->u.reiserfs_sb.procdir );
+	remove_proc_entry( name, REISERFS_SB(sb)->procdir );
 }
 
 struct proc_dir_entry *reiserfs_proc_register_global( char *name, 
diff -urN linux-2.5.7/fs/reiserfs/stree.c linux/fs/reiserfs/stree.c
--- linux-2.5.7/fs/reiserfs/stree.c	Thu Mar  7 21:18:55 2002
+++ linux/fs/reiserfs/stree.c	Wed Mar 27 19:38:22 2002
@@ -1387,7 +1387,7 @@
        __u32 *inode_generation;
        
        inode_generation = 
-         &th -> t_super -> u.reiserfs_sb.s_rs -> s_inode_generation;
+         &REISERFS_SB(th -> t_super) -> s_rs -> s_inode_generation;
        *inode_generation = cpu_to_le32( le32_to_cpu( *inode_generation ) + 1 );
       }
 /* USE_INODE_GENERATION_COUNTER */
diff -urN linux-2.5.7/fs/reiserfs/super.c linux/fs/reiserfs/super.c
--- linux-2.5.7/fs/reiserfs/super.c	Mon Mar 18 16:14:16 2002
+++ linux/fs/reiserfs/super.c	Wed Mar 27 19:39:33 2002
@@ -153,7 +153,7 @@
     max_cpu_key.key_length = 3;
  
     done = 0;
-    s -> u.reiserfs_sb.s_is_unlinked_ok = 1;
+    REISERFS_SB(s)->s_is_unlinked_ok = 1;
     while (1) {
         retval = search_item (s, &max_cpu_key, &path);
         if (retval != ITEM_NOT_FOUND) {
@@ -239,7 +239,7 @@
         printk ("done\n");
         done ++;
     }
-    s -> u.reiserfs_sb.s_is_unlinked_ok = 0;
+    REISERFS_SB(s)->s_is_unlinked_ok = 0;
      
     pathrelse (&path);
     if (done)
@@ -378,7 +378,7 @@
   if (!(s->s_flags & MS_RDONLY)) {
     journal_begin(&th, s, 10) ;
     reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1) ;
-    set_sb_umount_state( SB_DISK_SUPER_BLOCK(s), s->u.reiserfs_sb.s_mount_state );
+    set_sb_umount_state( SB_DISK_SUPER_BLOCK(s), REISERFS_SB(s)->s_mount_state );
     journal_mark_dirty(&th, s, SB_BUFFER_WITH_SB (s));
   }
 
@@ -396,9 +396,9 @@
 
   print_statistics (s);
 
-  if (s->u.reiserfs_sb.s_kmallocs != 0) {
+  if (REISERFS_SB(s)->s_kmallocs != 0) {
     reiserfs_warning ("vs-2004: reiserfs_put_super: allocated memory left %d\n",
-		      s->u.reiserfs_sb.s_kmallocs);
+		      REISERFS_SB(s)->s_kmallocs);
   }
 
   reiserfs_proc_unregister( s, "journal" );
@@ -409,6 +409,10 @@
   reiserfs_proc_unregister( s, "super" );
   reiserfs_proc_unregister( s, "version" );
   reiserfs_proc_info_done( s );
+
+  kfree(s->u.generic_sbp);
+  s->u.generic_sbp = NULL;
+
   return;
 }
 
@@ -612,30 +616,30 @@
   
   if (*flags & MS_RDONLY) {
     /* try to remount file system with read-only permissions */
-    if (sb_umount_state(rs) == REISERFS_VALID_FS || s->u.reiserfs_sb.s_mount_state != REISERFS_VALID_FS) {
+    if (sb_umount_state(rs) == REISERFS_VALID_FS || REISERFS_SB(s)->s_mount_state != REISERFS_VALID_FS) {
       return 0;
     }
 
     journal_begin(&th, s, 10) ;
     /* Mounting a rw partition read-only. */
     reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1) ;
-    set_sb_umount_state( rs, s->u.reiserfs_sb.s_mount_state );
+    set_sb_umount_state( rs, REISERFS_SB(s)->s_mount_state );
     journal_mark_dirty(&th, s, SB_BUFFER_WITH_SB (s));
     s->s_dirt = 0;
   } else {
-    s->u.reiserfs_sb.s_mount_state = sb_umount_state(rs) ;
+    REISERFS_SB(s)->s_mount_state = sb_umount_state(rs) ;
     s->s_flags &= ~MS_RDONLY ; /* now it is safe to call journal_begin */
     journal_begin(&th, s, 10) ;
 
     /* Mount a partition which is read-only, read-write */
     reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s), 1) ;
-    s->u.reiserfs_sb.s_mount_state = sb_umount_state(rs);
+    REISERFS_SB(s)->s_mount_state = sb_umount_state(rs);
     s->s_flags &= ~MS_RDONLY;
     set_sb_umount_state( rs, REISERFS_ERROR_FS );
     /* mark_buffer_dirty (SB_BUFFER_WITH_SB (s), 1); */
     journal_mark_dirty(&th, s, SB_BUFFER_WITH_SB (s));
     s->s_dirt = 0;
-    s->u.reiserfs_sb.s_mount_state = REISERFS_VALID_FS ;
+    REISERFS_SB(s)->s_mount_state = REISERFS_VALID_FS ;
   }
   /* this will force a full flush of all journal lists */
   SB_JOURNAL(s)->j_must_wait = 1 ;
@@ -1001,10 +1005,16 @@
     struct reiserfs_iget4_args args ;
     struct reiserfs_super_block * rs;
     char *jdev_name;
+    struct reiserfs_sb_info *sbi;
+
+    sbi = kmalloc(sizeof(struct reiserfs_sb_info), GFP_KERNEL);
+    if (!sbi)
+	return -ENOMEM;
+    s->u.generic_sbp = sbi;
+    memset (sbi, 0, sizeof (struct reiserfs_sb_info));
 
-    memset (&s->u.reiserfs_sb, 0, sizeof (struct reiserfs_sb_info));
     jdev_name = NULL;
-    if (parse_options ((char *) data, &(s->u.reiserfs_sb.s_mount_opt), &blocks, &jdev_name) == 0) {
+    if (parse_options ((char *) data, &(sbi->s_mount_opt), &blocks, &jdev_name) == 0) {
 	return -EINVAL;
     }
 
@@ -1024,8 +1034,8 @@
       printk("sh-2021: reiserfs_fill_super: can not find reiserfs on %s\n", s->s_id);
       goto error;    
     }
-    s->u.reiserfs_sb.s_mount_state = SB_REISERFS_STATE(s);
-    s->u.reiserfs_sb.s_mount_state = REISERFS_VALID_FS ;
+    sbi->s_mount_state = SB_REISERFS_STATE(s);
+    sbi->s_mount_state = REISERFS_VALID_FS ;
 
     if (old_format ? read_old_bitmaps(s) : read_bitmaps(s)) { 
 	printk ("reiserfs_fill_super: unable to read bitmap\n");
@@ -1071,8 +1081,8 @@
     }
 
     // define and initialize hash function
-    s->u.reiserfs_sb.s_hash_function = hash_function (s);
-    if (s->u.reiserfs_sb.s_hash_function == NULL) {
+    sbi->s_hash_function = hash_function (s);
+    if (sbi->s_hash_function == NULL) {
       dput(s->s_root) ;
       s->s_root = NULL ;
       goto error ;
@@ -1080,9 +1090,9 @@
 
     rs = SB_DISK_SUPER_BLOCK (s);
     if (is_reiserfs_3_5 (rs) || (is_reiserfs_jr (rs) && SB_VERSION (s) == REISERFS_VERSION_1))
-	set_bit(REISERFS_3_5, &(s->u.reiserfs_sb.s_properties));
+	set_bit(REISERFS_3_5, &(sbi->s_properties));
     else
-	set_bit(REISERFS_3_6, &(s->u.reiserfs_sb.s_properties));
+	set_bit(REISERFS_3_6, &(sbi->s_properties));
     
     if (!(s->s_flags & MS_RDONLY)) {
 
@@ -1107,8 +1117,8 @@
 	    
 	    set_sb_version(rs,REISERFS_VERSION_2);
 	    reiserfs_convert_objectid_map_v1(s) ;
-	    set_bit(REISERFS_3_6, &(s->u.reiserfs_sb.s_properties));
-	    clear_bit(REISERFS_3_5, &(s->u.reiserfs_sb.s_properties));
+	    set_bit(REISERFS_3_6, &(sbi->s_properties));
+	    clear_bit(REISERFS_3_5, &(sbi->s_properties));
 	  } else {
 	    reiserfs_warning("reiserfs: using 3.5.x disk format\n") ;
 	  }
@@ -1127,7 +1137,7 @@
 	}
     }
     // mark hash in super block: it could be unset. overwrite should be ok
-    set_sb_hash_function_code( rs, function2code(s->u.reiserfs_sb.s_hash_function ) );
+    set_sb_hash_function_code( rs, function2code(sbi->s_hash_function ) );
 
     reiserfs_proc_info_init( s );
     reiserfs_proc_register( s, "version", reiserfs_version_in_proc );
@@ -1137,7 +1147,7 @@
     reiserfs_proc_register( s, "on-disk-super", reiserfs_on_disk_super_in_proc );
     reiserfs_proc_register( s, "oidmap", reiserfs_oidmap_in_proc );
     reiserfs_proc_register( s, "journal", reiserfs_journal_in_proc );
-    init_waitqueue_head (&(s->u.reiserfs_sb.s_wait));
+    init_waitqueue_head (&(sbi->s_wait));
 
     return 0;
 
@@ -1156,6 +1166,9 @@
     if (SB_BUFFER_WITH_SB (s))
 	brelse(SB_BUFFER_WITH_SB (s));
 
+    kfree(sbi);
+    s->u.generic_sbp = NULL;
+
     return -EINVAL;
 }
 
diff -urN linux-2.5.7/fs/reiserfs/tail_conversion.c linux/fs/reiserfs/tail_conversion.c
--- linux-2.5.7/fs/reiserfs/tail_conversion.c	Thu Mar  7 21:18:33 2002
+++ linux/fs/reiserfs/tail_conversion.c	Wed Mar 27 19:38:22 2002
@@ -35,7 +35,7 @@
 				       tree. */
 
 
-    sb->u.reiserfs_sb.s_direct2indirect ++;
+    REISERFS_SB(sb)->s_direct2indirect ++;
 
     n_blk_size = sb->s_blocksize;
 
@@ -202,7 +202,7 @@
     loff_t pos, pos1; /* position of first byte of the tail */
     struct cpu_key key;
 
-    p_s_sb->u.reiserfs_sb.s_indirect2direct ++;
+    REISERFS_SB(p_s_sb)->s_indirect2direct ++;
 
     *p_c_mode = M_SKIP_BALANCING;
 
diff -urN linux-2.5.7/include/linux/fs.h linux/include/linux/fs.h
--- linux-2.5.7/include/linux/fs.h	Wed Mar 27 15:35:49 2002
+++ linux/include/linux/fs.h	Wed Mar 27 19:41:19 2002
@@ -651,7 +651,6 @@
 #include <linux/ufs_fs_sb.h>
 #include <linux/romfs_fs_sb.h>
 #include <linux/adfs_fs_sb.h>
-#include <linux/reiserfs_fs_sb.h>
 #include <linux/bfs_fs_sb.h>
 
 extern struct list_head super_blocks;
@@ -695,7 +694,6 @@
 		struct ufs_sb_info	ufs_sb;
 		struct romfs_sb_info	romfs_sb;
 		struct adfs_sb_info	adfs_sb;
-		struct reiserfs_sb_info	reiserfs_sb;
 		struct bfs_sb_info	bfs_sb;
 		void			*generic_sbp;
 	} u;
diff -urN linux-2.5.7/include/linux/reiserfs_fs.h linux/include/linux/reiserfs_fs.h
--- linux-2.5.7/include/linux/reiserfs_fs.h	Thu Mar  7 21:18:24 2002
+++ linux/include/linux/reiserfs_fs.h	Wed Mar 27 19:43:32 2002
@@ -21,6 +21,7 @@
 #include <linux/bitops.h>
 #include <linux/proc_fs.h>
 #include <linux/reiserfs_fs_i.h>
+#include <linux/reiserfs_fs_sb.h>
 #endif
 
 /*
@@ -96,7 +97,7 @@
 /***************************************************************************/
 
 /*
- * Structure of super block on disk, a version of which in RAM is often accessed as s->u.reiserfs_sb.s_rs
+ * Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs
  * the version in RAM is part of a larger structure containing fields never written to disk.
  */
 #define UNSET_HASH 0 // read_super will guess about, what hash names
@@ -176,7 +177,7 @@
 
 
 // on-disk super block fields converted to cpu form
-#define SB_DISK_SUPER_BLOCK(s) ((s)->u.reiserfs_sb.s_rs)
+#define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs)
 #define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1))
 #define SB_BLOCKSIZE(s) \
         le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize))
@@ -287,6 +288,12 @@
 {
 	return list_entry(inode, struct reiserfs_inode_info, vfs_inode);
 }
+
+static inline struct reiserfs_sb_info *REISERFS_SB(const struct super_block *sb)
+{
+	return sb->u.generic_sbp;
+}
+
 /** this says about version of key of all items (but stat data) the
     object consists of */
 #define get_inode_item_key_version( inode )                                    \
@@ -1284,7 +1291,7 @@
 #define REISERFS_KERNEL_MEM		0	/* reiserfs kernel memory mode	*/
 #define REISERFS_USER_MEM		1	/* reiserfs user memory mode		*/
 
-#define fs_generation(s) ((s)->u.reiserfs_sb.s_generation_counter)
+#define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
 #define get_generation(s) atomic_read (&fs_generation(s))
 #define FILESYSTEM_CHANGED_TB(tb)  (get_generation((tb)->tb_sb) != (tb)->fs_gen)
 #define fs_changed(gen,s) (gen != get_generation (s))
@@ -1884,10 +1891,10 @@
 #define PROC_EXP( e )   e
 
 #define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
-#define __PINFO( sb ) ( sb ) -> u.reiserfs_sb.s_proc_info_data
+#define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data
 #define PROC_INFO_MAX( sb, field, value )								\
     __PINFO( sb ).field =												\
-        MAX( ( sb ) -> u.reiserfs_sb.s_proc_info_data.field, value )
+        MAX( REISERFS_SB( sb ) -> s_proc_info_data.field, value )
 #define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) )
 #define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) )
 #define PROC_INFO_BH_STAT( sb, bh, level )							\
diff -urN linux-2.5.7/include/linux/reiserfs_fs_sb.h linux/include/linux/reiserfs_fs_sb.h
--- linux-2.5.7/include/linux/reiserfs_fs_sb.h	Wed Mar 27 15:35:49 2002
+++ linux/include/linux/reiserfs_fs_sb.h	Wed Mar 27 19:43:32 2002
@@ -412,20 +412,20 @@
 #define REISERFS_TEST3 13
 #define REISERFS_TEST4 14 
 
-#define reiserfs_r5_hash(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_R5_HASH))
-#define reiserfs_rupasov_hash(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_RUPASOV_HASH))
-#define reiserfs_tea_hash(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_TEA_HASH))
-#define reiserfs_hash_detect(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_HASH_DETECT))
-#define reiserfs_no_border(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_NO_BORDER))
-#define reiserfs_no_unhashed_relocation(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION))
-#define reiserfs_hashed_relocation(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_HASHED_RELOCATION))
-#define reiserfs_test4(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_TEST4))
-
-#define dont_have_tails(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << NOTAIL))
-#define replay_only(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REPLAYONLY))
-#define reiserfs_dont_log(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_NOLOG))
-#define old_format_only(s) ((s)->u.reiserfs_sb.s_properties & (1 << REISERFS_3_5))
-#define convert_reiserfs(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_CONVERT))
+#define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH))
+#define reiserfs_rupasov_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_RUPASOV_HASH))
+#define reiserfs_tea_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_TEA_HASH))
+#define reiserfs_hash_detect(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_HASH_DETECT))
+#define reiserfs_no_border(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_BORDER))
+#define reiserfs_no_unhashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION))
+#define reiserfs_hashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_HASHED_RELOCATION))
+#define reiserfs_test4(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_TEST4))
+
+#define dont_have_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << NOTAIL))
+#define replay_only(s) (REISERFS_SB(s)->s_mount_opt & (1 << REPLAYONLY))
+#define reiserfs_dont_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NOLOG))
+#define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5))
+#define convert_reiserfs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_CONVERT))
 
 
 void reiserfs_file_buffer (struct buffer_head * bh, int list);
@@ -439,13 +439,13 @@
 #define SCHEDULE_OCCURRED       1
 
 
-#define SB_BUFFER_WITH_SB(s) ((s)->u.reiserfs_sb.s_sbh)
-#define SB_JOURNAL(s) ((s)->u.reiserfs_sb.s_journal)
+#define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh)
+#define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal)
 #define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block)
 #define SB_JOURNAL_LIST(s) (SB_JOURNAL(s)->j_journal_list)
 #define SB_JOURNAL_LIST_INDEX(s) (SB_JOURNAL(s)->j_journal_list_index) 
 #define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free) 
-#define SB_AP_BITMAP(s) ((s)->u.reiserfs_sb.s_ap_bitmap)
+#define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap)
 
 #define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->)
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH] struct super_block cleanup - reiserfs
@ 2002-03-28  1:37 Brian Gerst
  0 siblings, 0 replies; 2+ messages in thread
From: Brian Gerst @ 2002-03-28  1:37 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux-Kernel, davej

[-- Attachment #1: Type: text/plain, Size: 71 bytes --]

Seperates ufs_sb_info from struct super_block.

-- 

						Brian Gerst

[-- Attachment #2: sb-ufs-1 --]
[-- Type: text/plain, Size: 39161 bytes --]

diff -urN linux-2.5.7-bg1/fs/ufs/balloc.c linux-2.5.7-bg2/fs/ufs/balloc.c
--- linux-2.5.7-bg1/fs/ufs/balloc.c	Thu Mar  7 21:18:10 2002
+++ linux-2.5.7-bg2/fs/ufs/balloc.c	Wed Mar 27 20:18:33 2002
@@ -46,7 +46,7 @@
 	unsigned cgno, bit, end_bit, bbase, blkmap, i, blkno, cylno;
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	
 	UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
@@ -88,7 +88,7 @@
 	
 	fs32_add(sb, &ucg->cg_cs.cs_nffree, count);
 	fs32_add(sb, &usb1->fs_cstotal.cs_nffree, count);
-	fs32_add(sb, &sb->fs_cs(cgno).cs_nffree, count);
+	fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
 	blkmap = ubh_blkmap (UCPI_UBH, ucpi->c_freeoff, bbase);
 	ufs_fragacct(sb, blkmap, ucg->cg_frsum, 1);
 
@@ -99,12 +99,12 @@
 	if (ubh_isblockset(UCPI_UBH, ucpi->c_freeoff, blkno)) {
 		fs32_sub(sb, &ucg->cg_cs.cs_nffree, uspi->s_fpb);
 		fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, uspi->s_fpb);
-		fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, uspi->s_fpb);
-		if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
+		fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, uspi->s_fpb);
+		if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
 			ufs_clusteracct (sb, ucpi, blkno, 1);
 		fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1);
 		fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1);
-		fs32_add(sb, &sb->fs_cs(cgno).cs_nbfree, 1);
+		fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nbfree, 1);
 		cylno = ufs_cbtocylno (bbase);
 		fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(bbase)), 1);
 		fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1);
@@ -140,7 +140,7 @@
 	unsigned overflow, cgno, bit, end_bit, blkno, i, cylno;
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 
 	UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
@@ -183,13 +183,13 @@
 			ufs_error(sb, "ufs_free_blocks", "freeing free fragment");
 		}
 		ubh_setblock(UCPI_UBH, ucpi->c_freeoff, blkno);
-		if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
+		if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
 			ufs_clusteracct (sb, ucpi, blkno, 1);
 		DQUOT_FREE_BLOCK(inode, uspi->s_fpb);
 
 		fs32_add(sb, &ucg->cg_cs.cs_nbfree, 1);
 		fs32_add(sb, &usb1->fs_cstotal.cs_nbfree, 1);
-		fs32_add(sb, &sb->fs_cs(cgno).cs_nbfree, 1);
+		fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nbfree, 1);
 		cylno = ufs_cbtocylno(i);
 		fs16_add(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(i)), 1);
 		fs32_add(sb, &ubh_cg_blktot(ucpi, cylno), 1);
@@ -246,7 +246,7 @@
 	UFSD(("ENTER, ino %lu, fragment %u, goal %u, count %u\n", inode->i_ino, fragment, goal, count))
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	*err = -ENOSPC;
 
@@ -406,12 +406,12 @@
 	UFSD(("ENTER, fragment %u, oldcount %u, newcount %u\n", fragment, oldcount, newcount))
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first (USPI_UBH);
 	count = newcount - oldcount;
 	
 	cgno = ufs_dtog(fragment);
-	if (sb->fs_cs(cgno).cs_nffree < count)
+	if (UFS_SB(sb)->fs_cs(cgno).cs_nffree < count)
 		return 0;
 	if ((ufs_fragnum (fragment) + newcount) > uspi->s_fpb)
 		return 0;
@@ -452,7 +452,7 @@
 	}
 
 	fs32_sub(sb, &ucg->cg_cs.cs_nffree, count);
-	fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, count);
+	fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
 	fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count);
 	
 	ubh_mark_buffer_dirty (USPI_UBH);
@@ -469,7 +469,7 @@
 }
 
 #define UFS_TEST_FREE_SPACE_CG \
-	ucg = (struct ufs_cylinder_group *) sb->u.ufs_sb.s_ucg[cgno]->b_data; \
+	ucg = (struct ufs_cylinder_group *) UFS_SB(sb)->s_ucg[cgno]->b_data; \
 	if (fs32_to_cpu(sb, ucg->cg_cs.cs_nbfree)) \
 		goto cg_found; \
 	for (k = count; k < uspi->s_fpb; k++) \
@@ -489,7 +489,7 @@
 	UFSD(("ENTER, ino %lu, cgno %u, goal %u, count %u\n", inode->i_ino, cgno, goal, count))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	oldcg = cgno;
 	
@@ -556,7 +556,7 @@
 
 		fs32_add(sb, &ucg->cg_cs.cs_nffree, i);
 		fs32_add(sb, &usb1->fs_cstotal.cs_nffree, i);
-		fs32_add(sb, &sb->fs_cs(cgno).cs_nffree, i);
+		fs32_add(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, i);
 		fs32_add(sb, &ucg->cg_frsum[i], 1);
 		goto succed;
 	}
@@ -573,7 +573,7 @@
 	
 	fs32_sub(sb, &ucg->cg_cs.cs_nffree, count);
 	fs32_sub(sb, &usb1->fs_cstotal.cs_nffree, count);
-	fs32_sub(sb, &sb->fs_cs(cgno).cs_nffree, count);
+	fs32_sub(sb, &UFS_SB(sb)->fs_cs(cgno).cs_nffree, count);
 	fs32_sub(sb, &ucg->cg_frsum[allocsize], 1);
 
 	if (count != allocsize)
@@ -605,7 +605,7 @@
 	UFSD(("ENTER, goal %u\n", goal))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	ucg = ubh_get_ucg(UCPI_UBH);
 
@@ -632,7 +632,7 @@
 gotit:
 	blkno = ufs_fragstoblks(result);
 	ubh_clrblock (UCPI_UBH, ucpi->c_freeoff, blkno);
-	if ((sb->u.ufs_sb.s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
+	if ((UFS_SB(sb)->s_flags & UFS_CG_MASK) == UFS_CG_44BSD)
 		ufs_clusteracct (sb, ucpi, blkno, -1);
 	if(DQUOT_ALLOC_BLOCK(inode, uspi->s_fpb)) {
 		*err = -EDQUOT;
@@ -641,7 +641,7 @@
 
 	fs32_sub(sb, &ucg->cg_cs.cs_nbfree, 1);
 	fs32_sub(sb, &usb1->fs_cstotal.cs_nbfree, 1);
-	fs32_sub(sb, &sb->fs_cs(ucpi->c_cgx).cs_nbfree, 1);
+	fs32_sub(sb, &UFS_SB(sb)->fs_cs(ucpi->c_cgx).cs_nbfree, 1);
 	cylno = ufs_cbtocylno(result);
 	fs16_sub(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(result)), 1);
 	fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1);
@@ -662,7 +662,7 @@
 	
 	UFSD(("ENTER, cg %u, goal %u, count %u\n", ucpi->c_cgx, goal, count))
 
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first (USPI_UBH);
 	ucg = ubh_get_ucg(UCPI_UBH);
 
@@ -728,7 +728,7 @@
 	struct ufs_sb_private_info * uspi;
 	int i, start, end, forw, back;
 	
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	if (uspi->s_contigsumsize <= 0)
 		return;
 
diff -urN linux-2.5.7-bg1/fs/ufs/cylinder.c linux-2.5.7-bg2/fs/ufs/cylinder.c
--- linux-2.5.7-bg1/fs/ufs/cylinder.c	Thu Mar  7 21:18:16 2002
+++ linux-2.5.7-bg2/fs/ufs/cylinder.c	Wed Mar 27 20:18:33 2002
@@ -37,26 +37,27 @@
 static void ufs_read_cylinder (struct super_block * sb,
 	unsigned cgno, unsigned bitmap_nr)
 {
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 	struct ufs_sb_private_info * uspi;
 	struct ufs_cg_private_info * ucpi;
 	struct ufs_cylinder_group * ucg;
 	unsigned i, j;
 
 	UFSD(("ENTER, cgno %u, bitmap_nr %u\n", cgno, bitmap_nr))
-	uspi = sb->u.ufs_sb.s_uspi;
-	ucpi = sb->u.ufs_sb.s_ucpi[bitmap_nr];
-	ucg = (struct ufs_cylinder_group *)sb->u.ufs_sb.s_ucg[cgno]->b_data;
+	uspi = sbi->s_uspi;
+	ucpi = sbi->s_ucpi[bitmap_nr];
+	ucg = (struct ufs_cylinder_group *)sbi->s_ucg[cgno]->b_data;
 
 	UCPI_UBH->fragment = ufs_cgcmin(cgno);
 	UCPI_UBH->count = uspi->s_cgsize >> sb->s_blocksize_bits;
 	/*
 	 * We have already the first fragment of cylinder group block in buffer
 	 */
-	UCPI_UBH->bh[0] = sb->u.ufs_sb.s_ucg[cgno];
+	UCPI_UBH->bh[0] = sbi->s_ucg[cgno];
 	for (i = 1; i < UCPI_UBH->count; i++)
 		if (!(UCPI_UBH->bh[i] = sb_bread(sb, UCPI_UBH->fragment + i)))
 			goto failed;
-	sb->u.ufs_sb.s_cgno[bitmap_nr] = cgno;
+	sbi->s_cgno[bitmap_nr] = cgno;
 			
 	ucpi->c_cgx	= fs32_to_cpu(sb, ucg->cg_cgx);
 	ucpi->c_ncyl	= fs16_to_cpu(sb, ucg->cg_ncyl);
@@ -78,8 +79,8 @@
 	
 failed:
 	for (j = 1; j < i; j++)
-		brelse (sb->u.ufs_sb.s_ucg[j]);
-	sb->u.ufs_sb.s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
+		brelse (sbi->s_ucg[j]);
+	sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
 	ufs_error (sb, "ufs_read_cylinder", "can't read cylinder group block %u", cgno);
 }
 
@@ -89,6 +90,7 @@
  */
 void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
 {
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 	struct ufs_sb_private_info * uspi; 
 	struct ufs_cg_private_info * ucpi;
 	struct ufs_cylinder_group * ucg;
@@ -96,15 +98,15 @@
 
 	UFSD(("ENTER, bitmap_nr %u\n", bitmap_nr))
 
-	uspi = sb->u.ufs_sb.s_uspi;
-	if (sb->u.ufs_sb.s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
+	uspi = sbi->s_uspi;
+	if (sbi->s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
 		UFSD(("EXIT\n"))
 		return;
 	}
-	ucpi = sb->u.ufs_sb.s_ucpi[bitmap_nr];
+	ucpi = sbi->s_ucpi[bitmap_nr];
 	ucg = ubh_get_ucg(UCPI_UBH);
 
-	if (uspi->s_ncg > UFS_MAX_GROUP_LOADED && bitmap_nr >= sb->u.ufs_sb.s_cg_loaded) {
+	if (uspi->s_ncg > UFS_MAX_GROUP_LOADED && bitmap_nr >= sbi->s_cg_loaded) {
 		ufs_panic (sb, "ufs_put_cylinder", "internal error");
 		return;
 	}
@@ -120,7 +122,7 @@
 		brelse (UCPI_UBH->bh[i]);
 	}
 
-	sb->u.ufs_sb.s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
+	sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
 	UFSD(("EXIT\n"))
 }
 
@@ -133,13 +135,14 @@
 struct ufs_cg_private_info * ufs_load_cylinder (
 	struct super_block * sb, unsigned cgno)
 {
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 	struct ufs_sb_private_info * uspi;
 	struct ufs_cg_private_info * ucpi;
 	unsigned cg, i, j;
 
 	UFSD(("ENTER, cgno %u\n", cgno))
 
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = sbi->s_uspi;
 	if (cgno >= uspi->s_ncg) {
 		ufs_panic (sb, "ufs_load_cylinder", "internal error, high number of cg");
 		return NULL;
@@ -147,61 +150,61 @@
 	/*
 	 * Cylinder group number cg it in cache and it was last used
 	 */
-	if (sb->u.ufs_sb.s_cgno[0] == cgno) {
+	if (sbi->s_cgno[0] == cgno) {
 		UFSD(("EXIT\n"))
-		return sb->u.ufs_sb.s_ucpi[0];
+		return sbi->s_ucpi[0];
 	}
 	/*
 	 * Number of cylinder groups is not higher than UFS_MAX_GROUP_LOADED
 	 */
 	if (uspi->s_ncg <= UFS_MAX_GROUP_LOADED) {
-		if (sb->u.ufs_sb.s_cgno[cgno] != UFS_CGNO_EMPTY) {
-			if (sb->u.ufs_sb.s_cgno[cgno] != cgno) {
+		if (sbi->s_cgno[cgno] != UFS_CGNO_EMPTY) {
+			if (sbi->s_cgno[cgno] != cgno) {
 				ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache");
 				UFSD(("EXIT (FAILED)\n"))
 				return NULL;
 			}
 			else {
 				UFSD(("EXIT\n"))
-				return sb->u.ufs_sb.s_ucpi[cgno];
+				return sbi->s_ucpi[cgno];
 			}
 		} else {
 			ufs_read_cylinder (sb, cgno, cgno);
 			UFSD(("EXIT\n"))
-			return sb->u.ufs_sb.s_ucpi[cgno];
+			return sbi->s_ucpi[cgno];
 		}
 	}
 	/*
 	 * Cylinder group number cg is in cache but it was not last used, 
 	 * we will move to the first position
 	 */
-	for (i = 0; i < sb->u.ufs_sb.s_cg_loaded && sb->u.ufs_sb.s_cgno[i] != cgno; i++);
-	if (i < sb->u.ufs_sb.s_cg_loaded && sb->u.ufs_sb.s_cgno[i] == cgno) {
-		cg = sb->u.ufs_sb.s_cgno[i];
-		ucpi = sb->u.ufs_sb.s_ucpi[i];
+	for (i = 0; i < sbi->s_cg_loaded && sbi->s_cgno[i] != cgno; i++);
+	if (i < sbi->s_cg_loaded && sbi->s_cgno[i] == cgno) {
+		cg = sbi->s_cgno[i];
+		ucpi = sbi->s_ucpi[i];
 		for (j = i; j > 0; j--) {
-			sb->u.ufs_sb.s_cgno[j] = sb->u.ufs_sb.s_cgno[j-1];
-			sb->u.ufs_sb.s_ucpi[j] = sb->u.ufs_sb.s_ucpi[j-1];
+			sbi->s_cgno[j] = sbi->s_cgno[j-1];
+			sbi->s_ucpi[j] = sbi->s_ucpi[j-1];
 		}
-		sb->u.ufs_sb.s_cgno[0] = cg;
-		sb->u.ufs_sb.s_ucpi[0] = ucpi;
+		sbi->s_cgno[0] = cg;
+		sbi->s_ucpi[0] = ucpi;
 	/*
 	 * Cylinder group number cg is not in cache, we will read it from disk
 	 * and put it to the first position
 	 */
 	} else {
-		if (sb->u.ufs_sb.s_cg_loaded < UFS_MAX_GROUP_LOADED)
-			sb->u.ufs_sb.s_cg_loaded++;
+		if (sbi->s_cg_loaded < UFS_MAX_GROUP_LOADED)
+			sbi->s_cg_loaded++;
 		else
 			ufs_put_cylinder (sb, UFS_MAX_GROUP_LOADED-1);
-		ucpi = sb->u.ufs_sb.s_ucpi[sb->u.ufs_sb.s_cg_loaded - 1];
-		for (j = sb->u.ufs_sb.s_cg_loaded - 1; j > 0; j--) {
-			sb->u.ufs_sb.s_cgno[j] = sb->u.ufs_sb.s_cgno[j-1];
-			sb->u.ufs_sb.s_ucpi[j] = sb->u.ufs_sb.s_ucpi[j-1];
+		ucpi = sbi->s_ucpi[sbi->s_cg_loaded - 1];
+		for (j = sbi->s_cg_loaded - 1; j > 0; j--) {
+			sbi->s_cgno[j] = sbi->s_cgno[j-1];
+			sbi->s_ucpi[j] = sbi->s_ucpi[j-1];
 		}
-		sb->u.ufs_sb.s_ucpi[0] = ucpi;
+		sbi->s_ucpi[0] = ucpi;
 		ufs_read_cylinder (sb, cgno, 0);
 	}
 	UFSD(("EXIT\n"))
-	return sb->u.ufs_sb.s_ucpi[0];
+	return sbi->s_ucpi[0];
 }
diff -urN linux-2.5.7-bg1/fs/ufs/dir.c linux-2.5.7-bg2/fs/ufs/dir.c
--- linux-2.5.7-bg1/fs/ufs/dir.c	Thu Mar  7 21:18:19 2002
+++ linux-2.5.7-bg2/fs/ufs/dir.c	Wed Mar 27 20:18:33 2002
@@ -63,7 +63,7 @@
 	unsigned flags;
 
 	sb = inode->i_sb;
-	flags = sb->u.ufs_sb.s_flags;
+	flags = UFS_SB(sb)->s_flags;
 
 	UFSD(("ENTER, ino %lu  f_pos %lu\n", inode->i_ino, (unsigned long) filp->f_pos))
 
@@ -301,8 +301,8 @@
 		error_msg = "reclen is too small for namlen";
 	else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
 		error_msg = "directory entry across blocks";
-	else if (fs32_to_cpu(sb, de->d_ino) > (sb->u.ufs_sb.s_uspi->s_ipg *
-				      sb->u.ufs_sb.s_uspi->s_ncg))
+	else if (fs32_to_cpu(sb, de->d_ino) > (UFS_SB(sb)->s_uspi->s_ipg *
+				      UFS_SB(sb)->s_uspi->s_ncg))
 		error_msg = "inode out of bounds";
 
 	if (error_msg != NULL)
@@ -379,7 +379,7 @@
 	UFSD(("ENTER, name %s, namelen %u\n", name, namelen))
 	
 	sb = dir->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 
 	if (!namelen)
 		return -EINVAL;
diff -urN linux-2.5.7-bg1/fs/ufs/ialloc.c linux-2.5.7-bg2/fs/ufs/ialloc.c
--- linux-2.5.7-bg1/fs/ufs/ialloc.c	Thu Mar  7 21:18:23 2002
+++ linux-2.5.7-bg2/fs/ufs/ialloc.c	Wed Mar 27 20:18:33 2002
@@ -70,7 +70,7 @@
 	UFSD(("ENTER, ino %lu\n", inode->i_ino))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	
 	ino = inode->i_ino;
@@ -111,12 +111,12 @@
 			ucpi->c_irotor = ino;
 		fs32_add(sb, &ucg->cg_cs.cs_nifree, 1);
 		fs32_add(sb, &usb1->fs_cstotal.cs_nifree, 1);
-		fs32_add(sb, &sb->fs_cs(cg).cs_nifree, 1);
+		fs32_add(sb, &UFS_SB(sb)->fs_cs(cg).cs_nifree, 1);
 
 		if (is_directory) {
 			fs32_sub(sb, &ucg->cg_cs.cs_ndir, 1);
 			fs32_sub(sb, &usb1->fs_cstotal.cs_ndir, 1);
-			fs32_sub(sb, &sb->fs_cs(cg).cs_ndir, 1);
+			fs32_sub(sb, &UFS_SB(sb)->fs_cs(cg).cs_ndir, 1);
 		}
 	}
 
@@ -145,6 +145,7 @@
 struct inode * ufs_new_inode(struct inode * dir, int mode)
 {
 	struct super_block * sb;
+	struct ufs_sb_info * sbi;
 	struct ufs_sb_private_info * uspi;
 	struct ufs_super_block_first * usb1;
 	struct ufs_cg_private_info * ucpi;
@@ -163,7 +164,8 @@
 	if (!inode)
 		return ERR_PTR(-ENOMEM);
 	ufsi = UFS_I(inode);
-	uspi = sb->u.ufs_sb.s_uspi;
+	sbi = UFS_SB(sb);
+	uspi = sbi->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 
 	lock_super (sb);
@@ -172,7 +174,7 @@
 	 * Try to place the inode in its parent directory
 	 */
 	i = ufs_inotocg(dir->i_ino);
-	if (sb->fs_cs(i).cs_nifree) {
+	if (sbi->fs_cs(i).cs_nifree) {
 		cg = i;
 		goto cg_found;
 	}
@@ -184,7 +186,7 @@
 		i += j;
 		if (i >= uspi->s_ncg)
 			i -= uspi->s_ncg;
-		if (sb->fs_cs(i).cs_nifree) {
+		if (sbi->fs_cs(i).cs_nifree) {
 			cg = i;
 			goto cg_found;
 		}
@@ -198,7 +200,7 @@
 		i++;
 		if (i >= uspi->s_ncg)
 			i = 0;
-		if (sb->fs_cs(i).cs_nifree) {
+		if (sbi->fs_cs(i).cs_nifree) {
 			cg = i;
 			goto cg_found;
 		}
@@ -234,12 +236,12 @@
 	
 	fs32_sub(sb, &ucg->cg_cs.cs_nifree, 1);
 	fs32_sub(sb, &usb1->fs_cstotal.cs_nifree, 1);
-	fs32_sub(sb, &sb->fs_cs(cg).cs_nifree, 1);
+	fs32_sub(sb, &sbi->fs_cs(cg).cs_nifree, 1);
 	
 	if (S_ISDIR(mode)) {
 		fs32_add(sb, &ucg->cg_cs.cs_ndir, 1);
 		fs32_add(sb, &usb1->fs_cstotal.cs_ndir, 1);
-		fs32_add(sb, &sb->fs_cs(cg).cs_ndir, 1);
+		fs32_add(sb, &sbi->fs_cs(cg).cs_ndir, 1);
 	}
 
 	ubh_mark_buffer_dirty (USPI_UBH);
diff -urN linux-2.5.7-bg1/fs/ufs/inode.c linux-2.5.7-bg2/fs/ufs/inode.c
--- linux-2.5.7-bg1/fs/ufs/inode.c	Thu Mar  7 21:18:16 2002
+++ linux-2.5.7-bg2/fs/ufs/inode.c	Wed Mar 27 20:18:33 2002
@@ -52,7 +52,7 @@
 
 static int ufs_block_to_path(struct inode *inode, long i_block, int offsets[4])
 {
-	struct ufs_sb_private_info *uspi = inode->i_sb->u.ufs_sb.s_uspi;
+	struct ufs_sb_private_info *uspi = UFS_SB(inode->i_sb)->s_uspi;
 	int ptrs = uspi->s_apb;
 	int ptrs_bits = uspi->s_apbshift;
 	const long direct_blocks = UFS_NDADDR,
@@ -86,7 +86,7 @@
 {
 	struct ufs_inode_info *ufsi = UFS_I(inode);
 	struct super_block *sb = inode->i_sb;
-	struct ufs_sb_private_info *uspi = sb->u.ufs_sb.s_uspi;
+	struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
 	int mask = uspi->s_apbmask>>uspi->s_fpbshift;
 	int shift = uspi->s_apbshift-uspi->s_fpbshift;
 	int offsets[4], *p;
@@ -137,7 +137,7 @@
 		inode->i_ino, fragment, new_fragment, required))         
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	block = ufs_fragstoblks (fragment);
 	blockoff = ufs_fragnum (fragment);
 	p = ufsi->i_u1.i_data + block;
@@ -243,7 +243,7 @@
 	u32 * p;
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	block = ufs_fragstoblks (fragment);
 	blockoff = ufs_fragnum (fragment);
 
@@ -313,7 +313,7 @@
 static int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create)
 {
 	struct super_block * sb = inode->i_sb;
-	struct ufs_sb_private_info * uspi = sb->u.ufs_sb.s_uspi;
+	struct ufs_sb_private_info * uspi = UFS_SB(sb)->s_uspi;
 	struct buffer_head * bh;
 	int ret, err, new;
 	unsigned long ptr, phys;
@@ -483,8 +483,8 @@
 	UFSD(("ENTER, ino %lu\n", inode->i_ino))
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
-	flags = sb->u.ufs_sb.s_flags;
+	uspi = UFS_SB(sb)->s_uspi;
+	flags = UFS_SB(sb)->s_flags;
 
 	if (inode->i_ino < UFS_ROOTINO || 
 	    inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) {
@@ -579,8 +579,8 @@
 	UFSD(("ENTER, ino %lu\n", inode->i_ino))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
-	flags = sb->u.ufs_sb.s_flags;
+	uspi = UFS_SB(sb)->s_uspi;
+	flags = UFS_SB(sb)->s_flags;
 
 	if (inode->i_ino < UFS_ROOTINO || 
 	    inode->i_ino > (uspi->s_ncg * uspi->s_ipg)) {
diff -urN linux-2.5.7-bg1/fs/ufs/namei.c linux-2.5.7-bg2/fs/ufs/namei.c
--- linux-2.5.7-bg1/fs/ufs/namei.c	Thu Mar  7 21:18:32 2002
+++ linux-2.5.7-bg2/fs/ufs/namei.c	Wed Mar 27 20:18:33 2002
@@ -138,7 +138,7 @@
 	if (IS_ERR(inode))
 		goto out;
 
-	if (l > sb->u.ufs_sb.s_uspi->s_maxsymlinklen) {
+	if (l > UFS_SB(sb)->s_uspi->s_maxsymlinklen) {
 		/* slow symlink */
 		inode->i_op = &page_symlink_inode_operations;
 		inode->i_mapping->a_ops = &ufs_aops;
diff -urN linux-2.5.7-bg1/fs/ufs/super.c linux-2.5.7-bg2/fs/ufs/super.c
--- linux-2.5.7-bg1/fs/ufs/super.c	Mon Mar 18 16:14:16 2002
+++ linux-2.5.7-bg2/fs/ufs/super.c	Wed Mar 27 20:18:33 2002
@@ -188,7 +188,7 @@
 	struct ufs_super_block_first * usb1;
 	va_list args;
 
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	
 	if (!(sb->s_flags & MS_RDONLY)) {
@@ -200,7 +200,7 @@
 	va_start (args, fmt);
 	vsprintf (error_buf, fmt, args);
 	va_end (args);
-	switch (sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_ONERROR) {
+	switch (UFS_SB(sb)->s_mount_opt & UFS_MOUNT_ONERROR) {
 	case UFS_MOUNT_ONERROR_PANIC:
 		panic ("UFS-fs panic (device %s): %s: %s\n", 
 			sb->s_id, function, error_buf);
@@ -220,7 +220,7 @@
 	struct ufs_super_block_first * usb1;
 	va_list args;
 	
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	
 	if (!(sb->s_flags & MS_RDONLY)) {
@@ -317,6 +317,7 @@
  * Read on-disk structures associated with cylinder groups
  */
 int ufs_read_cylinder_structures (struct super_block * sb) {
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 	struct ufs_sb_private_info * uspi;
 	struct ufs_buffer_head * ubh;
 	unsigned char * base, * space;
@@ -324,7 +325,7 @@
 	
 	UFSD(("ENTER\n"))
 	
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = sbi->s_uspi;
 	
 	/*
 	 * Read cs structures from (usually) first data block
@@ -343,7 +344,7 @@
 		if (!ubh)
 			goto failed;
 		ubh_ubhcpymem (space, ubh, size);
-		sb->u.ufs_sb.s_csp[ufs_fragstoblks(i)] = (struct ufs_csum *)space;
+		sbi->s_csp[ufs_fragstoblks(i)] = (struct ufs_csum *)space;
 		space += size;
 		ubh_brelse (ubh);
 		ubh = NULL;
@@ -353,41 +354,41 @@
 	 * Read cylinder group (we read only first fragment from block
 	 * at this time) and prepare internal data structures for cg caching.
 	 */
-	if (!(sb->u.ufs_sb.s_ucg = kmalloc (sizeof(struct buffer_head *) * uspi->s_ncg, GFP_KERNEL)))
+	if (!(sbi->s_ucg = kmalloc (sizeof(struct buffer_head *) * uspi->s_ncg, GFP_KERNEL)))
 		goto failed;
 	for (i = 0; i < uspi->s_ncg; i++) 
-		sb->u.ufs_sb.s_ucg[i] = NULL;
+		sbi->s_ucg[i] = NULL;
 	for (i = 0; i < UFS_MAX_GROUP_LOADED; i++) {
-		sb->u.ufs_sb.s_ucpi[i] = NULL;
-		sb->u.ufs_sb.s_cgno[i] = UFS_CGNO_EMPTY;
+		sbi->s_ucpi[i] = NULL;
+		sbi->s_cgno[i] = UFS_CGNO_EMPTY;
 	}
 	for (i = 0; i < uspi->s_ncg; i++) {
 		UFSD(("read cg %u\n", i))
-		if (!(sb->u.ufs_sb.s_ucg[i] = sb_bread(sb, ufs_cgcmin(i))))
+		if (!(sbi->s_ucg[i] = sb_bread(sb, ufs_cgcmin(i))))
 			goto failed;
-		if (!ufs_cg_chkmagic (sb, (struct ufs_cylinder_group *) sb->u.ufs_sb.s_ucg[i]->b_data))
+		if (!ufs_cg_chkmagic (sb, (struct ufs_cylinder_group *) sbi->s_ucg[i]->b_data))
 			goto failed;
 #ifdef UFS_SUPER_DEBUG_MORE
-		ufs_print_cylinder_stuff(sb, (struct ufs_cylinder_group *) sb->u.ufs_sb.s_ucg[i]->b_data);
+		ufs_print_cylinder_stuff(sb, (struct ufs_cylinder_group *) sbi->s_ucg[i]->b_data);
 #endif
 	}
 	for (i = 0; i < UFS_MAX_GROUP_LOADED; i++) {
-		if (!(sb->u.ufs_sb.s_ucpi[i] = kmalloc (sizeof(struct ufs_cg_private_info), GFP_KERNEL)))
+		if (!(sbi->s_ucpi[i] = kmalloc (sizeof(struct ufs_cg_private_info), GFP_KERNEL)))
 			goto failed;
-		sb->u.ufs_sb.s_cgno[i] = UFS_CGNO_EMPTY;
+		sbi->s_cgno[i] = UFS_CGNO_EMPTY;
 	}
-	sb->u.ufs_sb.s_cg_loaded = 0;
+	sbi->s_cg_loaded = 0;
 	UFSD(("EXIT\n"))
 	return 1;
 
 failed:
 	if (base) kfree (base);
-	if (sb->u.ufs_sb.s_ucg) {
+	if (sbi->s_ucg) {
 		for (i = 0; i < uspi->s_ncg; i++)
-			if (sb->u.ufs_sb.s_ucg[i]) brelse (sb->u.ufs_sb.s_ucg[i]);
-		kfree (sb->u.ufs_sb.s_ucg);
+			if (sbi->s_ucg[i]) brelse (sbi->s_ucg[i]);
+		kfree (sbi->s_ucg);
 		for (i = 0; i < UFS_MAX_GROUP_LOADED; i++)
-			if (sb->u.ufs_sb.s_ucpi[i]) kfree (sb->u.ufs_sb.s_ucpi[i]);
+			if (sbi->s_ucpi[i]) kfree (sbi->s_ucpi[i]);
 	}
 	UFSD(("EXIT (FAILED)\n"))
 	return 0;
@@ -398,6 +399,7 @@
  * write them back to disk
  */
 void ufs_put_cylinder_structures (struct super_block * sb) {
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 	struct ufs_sb_private_info * uspi;
 	struct ufs_buffer_head * ubh;
 	unsigned char * base, * space;
@@ -405,11 +407,11 @@
 	
 	UFSD(("ENTER\n"))
 	
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = sbi->s_uspi;
 
 	size = uspi->s_cssize;
 	blks = (size + uspi->s_fsize - 1) >> uspi->s_fshift;
-	base = space = (char*) sb->u.ufs_sb.s_csp[0];
+	base = space = (char*) sbi->s_csp[0];
 	for (i = 0; i < blks; i += uspi->s_fpb) {
 		size = uspi->s_bsize;
 		if (i + uspi->s_fpb > blks)
@@ -421,21 +423,22 @@
 		ubh_mark_buffer_dirty (ubh);
 		ubh_brelse (ubh);
 	}
-	for (i = 0; i < sb->u.ufs_sb.s_cg_loaded; i++) {
+	for (i = 0; i < sbi->s_cg_loaded; i++) {
 		ufs_put_cylinder (sb, i);
-		kfree (sb->u.ufs_sb.s_ucpi[i]);
+		kfree (sbi->s_ucpi[i]);
 	}
 	for (; i < UFS_MAX_GROUP_LOADED; i++) 
-		kfree (sb->u.ufs_sb.s_ucpi[i]);
+		kfree (sbi->s_ucpi[i]);
 	for (i = 0; i < uspi->s_ncg; i++) 
-		brelse (sb->u.ufs_sb.s_ucg[i]);
-	kfree (sb->u.ufs_sb.s_ucg);
+		brelse (sbi->s_ucg[i]);
+	kfree (sbi->s_ucg);
 	kfree (base);
 	UFSD(("EXIT\n"))
 }
 
 static int ufs_fill_super(struct super_block *sb, void *data, int silent)
 {
+	struct ufs_sb_info * sbi;
 	struct ufs_sb_private_info * uspi;
 	struct ufs_super_block_first * usb1;
 	struct ufs_super_block_second * usb2;
@@ -451,6 +454,12 @@
 	
 	UFSD(("ENTER\n"))
 		
+	sbi = kmalloc(sizeof(struct ufs_sb_info), GFP_KERNEL);
+	if (!sbi)
+		goto failed_nomem;
+	sb->u.generic_sbp = sbi;
+	memset(sbi, 0, sizeof(struct ufs_sb_info));
+
 	UFSD(("flag %u\n", (int)(sb->s_flags & MS_RDONLY)))
 	
 #ifndef CONFIG_UFS_FS_WRITE
@@ -464,22 +473,22 @@
 	 * Set default mount options
 	 * Parse mount options
 	 */
-	sb->u.ufs_sb.s_mount_opt = 0;
-	ufs_set_opt (sb->u.ufs_sb.s_mount_opt, ONERROR_LOCK);
-	if (!ufs_parse_options ((char *) data, &sb->u.ufs_sb.s_mount_opt)) {
+	sbi->s_mount_opt = 0;
+	ufs_set_opt (sbi->s_mount_opt, ONERROR_LOCK);
+	if (!ufs_parse_options ((char *) data, &sbi->s_mount_opt)) {
 		printk("wrong mount options\n");
 		goto failed;
 	}
-	if (!(sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE)) {
+	if (!(sbi->s_mount_opt & UFS_MOUNT_UFSTYPE)) {
 		printk("You didn't specify the type of your ufs filesystem\n\n"
 		"mount -t ufs -o ufstype="
 		"sun|sunx86|44bsd|old|hp|nextstep|netxstep-cd|openstep ...\n\n"
 		">>>WARNING<<< Wrong ufstype may corrupt your filesystem, "
 		"default is ufstype=old\n");
-		ufs_set_opt (sb->u.ufs_sb.s_mount_opt, UFSTYPE_OLD);
+		ufs_set_opt (sbi->s_mount_opt, UFSTYPE_OLD);
 	}
 
-	sb->u.ufs_sb.s_uspi = uspi =
+	sbi->s_uspi = uspi =
 		kmalloc (sizeof(struct ufs_sb_private_info), GFP_KERNEL);
 	if (!uspi)
 		goto failed;
@@ -488,7 +497,7 @@
 	   this but as I don't know which I'll let those in the know loosen
 	   the rules */
 	   
-	switch (sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE) {
+	switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) {
 	case UFS_MOUNT_UFSTYPE_44BSD:
 		UFSD(("ufstype=44bsd\n"))
 		uspi->s_fsize = block_size = 512;
@@ -617,7 +626,7 @@
 		case UFS_MAGIC_LFN:
 	        case UFS_MAGIC_FEA:
 	        case UFS_MAGIC_4GB:
-			sb->u.ufs_sb.s_bytesex = BYTESEX_LE;
+			sbi->s_bytesex = BYTESEX_LE;
 			goto magic_found;
 	}
 	switch (__constant_be32_to_cpu(usb3->fs_magic)) {
@@ -625,13 +634,13 @@
 		case UFS_MAGIC_LFN:
 	        case UFS_MAGIC_FEA:
 	        case UFS_MAGIC_4GB:
-			sb->u.ufs_sb.s_bytesex = BYTESEX_BE;
+			sbi->s_bytesex = BYTESEX_BE;
 			goto magic_found;
 	}
 
-	if ((((sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_NEXTSTEP) 
-	  || ((sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_NEXTSTEP_CD) 
-	  || ((sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_OPENSTEP)) 
+	if ((((sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_NEXTSTEP) 
+	  || ((sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_NEXTSTEP_CD) 
+	  || ((sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) == UFS_MOUNT_UFSTYPE_OPENSTEP)) 
 	  && uspi->s_sbbase < 256) {
 		ubh_brelse_uspi(uspi);
 		ubh = NULL;
@@ -783,12 +792,12 @@
 	uspi->s_bpf = uspi->s_fsize << 3;
 	uspi->s_bpfshift = uspi->s_fshift + 3;
 	uspi->s_bpfmask = uspi->s_bpf - 1;
-	if ((sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE) ==
+	if ((sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) ==
 	    UFS_MOUNT_UFSTYPE_44BSD)
 		uspi->s_maxsymlinklen =
 		    fs32_to_cpu(sb, usb3->fs_u2.fs_44.fs_maxsymlinklen);
 	
-	sb->u.ufs_sb.s_flags = flags;
+	sbi->s_flags = flags;
 
 	inode = iget(sb, UFS_ROOTINO);
 	if (!inode || is_bad_inode(inode))
@@ -813,8 +822,14 @@
 failed:
 	if (ubh) ubh_brelse_uspi (uspi);
 	if (uspi) kfree (uspi);
+	if (sbi) kfree(sbi);
+	sb->u.generic_sbp = NULL;
 	UFSD(("EXIT (FAILED)\n"))
 	return -EINVAL;
+
+failed_nomem:
+	UFSD(("EXIT (NOMEM)\n"))
+	return -ENOMEM;
 }
 
 void ufs_write_super (struct super_block * sb) {
@@ -824,8 +839,8 @@
 	unsigned flags;
 
 	UFSD(("ENTER\n"))
-	flags = sb->u.ufs_sb.s_flags;
-	uspi = sb->u.ufs_sb.s_uspi;
+	flags = UFS_SB(sb)->s_flags;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	usb3 = ubh_get_usb_third(USPI_UBH);
 
@@ -843,17 +858,17 @@
 
 void ufs_put_super (struct super_block * sb)
 {
-	struct ufs_sb_private_info * uspi;
+	struct ufs_sb_info * sbi = UFS_SB(sb);
 		
 	UFSD(("ENTER\n"))
 
-	uspi = sb->u.ufs_sb.s_uspi;
-
 	if (!(sb->s_flags & MS_RDONLY))
 		ufs_put_cylinder_structures (sb);
 	
-	ubh_brelse_uspi (uspi);
-	kfree (sb->u.ufs_sb.s_uspi);
+	ubh_brelse_uspi (sbi->s_uspi);
+	kfree (sbi->s_uspi);
+	kfree (sbi);
+	sb->u.generic_sbp = NULL;
 	return;
 }
 
@@ -866,8 +881,8 @@
 	unsigned new_mount_opt, ufstype;
 	unsigned flags;
 	
-	uspi = sb->u.ufs_sb.s_uspi;
-	flags = sb->u.ufs_sb.s_flags;
+	uspi = UFS_SB(sb)->s_uspi;
+	flags = UFS_SB(sb)->s_flags;
 	usb1 = ubh_get_usb_first(USPI_UBH);
 	usb3 = ubh_get_usb_third(USPI_UBH);
 	
@@ -875,7 +890,7 @@
 	 * Allow the "check" option to be passed as a remount option.
 	 * It is not possible to change ufstype option during remount
 	 */
-	ufstype = sb->u.ufs_sb.s_mount_opt & UFS_MOUNT_UFSTYPE;
+	ufstype = UFS_SB(sb)->s_mount_opt & UFS_MOUNT_UFSTYPE;
 	new_mount_opt = 0;
 	ufs_set_opt (new_mount_opt, ONERROR_LOCK);
 	if (!ufs_parse_options (data, &new_mount_opt))
@@ -889,7 +904,7 @@
 	}
 
 	if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) {
-		sb->u.ufs_sb.s_mount_opt = new_mount_opt;
+		UFS_SB(sb)->s_mount_opt = new_mount_opt;
 		return 0;
 	}
 	
@@ -929,7 +944,7 @@
 		sb->s_flags &= ~MS_RDONLY;
 #endif
 	}
-	sb->u.ufs_sb.s_mount_opt = new_mount_opt;
+	UFS_SB(sb)->s_mount_opt = new_mount_opt;
 	return 0;
 }
 
@@ -938,7 +953,7 @@
 	struct ufs_sb_private_info * uspi;
 	struct ufs_super_block_first * usb1;
 
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	usb1 = ubh_get_usb_first (USPI_UBH);
 	
 	buf->f_type = UFS_MAGIC;
diff -urN linux-2.5.7-bg1/fs/ufs/swab.h linux-2.5.7-bg2/fs/ufs/swab.h
--- linux-2.5.7-bg1/fs/ufs/swab.h	Thu Mar  7 21:18:58 2002
+++ linux-2.5.7-bg2/fs/ufs/swab.h	Wed Mar 27 20:18:33 2002
@@ -25,7 +25,7 @@
 static __inline u64
 fs64_to_cpu(struct super_block *sbp, u64 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return le64_to_cpu(n);
 	else
 		return be64_to_cpu(n);
@@ -34,7 +34,7 @@
 static __inline u64
 cpu_to_fs64(struct super_block *sbp, u64 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return cpu_to_le64(n);
 	else
 		return cpu_to_be64(n);
@@ -43,7 +43,7 @@
 static __inline u32
 fs64_add(struct super_block *sbp, u32 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le64(le64_to_cpu(*n)+d);
 	else
 		return *n = cpu_to_be64(be64_to_cpu(*n)+d);
@@ -52,7 +52,7 @@
 static __inline u32
 fs64_sub(struct super_block *sbp, u32 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le64(le64_to_cpu(*n)-d);
 	else
 		return *n = cpu_to_be64(be64_to_cpu(*n)-d);
@@ -61,7 +61,7 @@
 static __inline u32
 fs32_to_cpu(struct super_block *sbp, u32 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return le32_to_cpu(n);
 	else
 		return be32_to_cpu(n);
@@ -70,7 +70,7 @@
 static __inline u32
 cpu_to_fs32(struct super_block *sbp, u32 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return cpu_to_le32(n);
 	else
 		return cpu_to_be32(n);
@@ -79,7 +79,7 @@
 static __inline u32
 fs32_add(struct super_block *sbp, u32 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le32(le32_to_cpu(*n)+d);
 	else
 		return *n = cpu_to_be32(be32_to_cpu(*n)+d);
@@ -88,7 +88,7 @@
 static __inline u32
 fs32_sub(struct super_block *sbp, u32 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le32(le32_to_cpu(*n)-d);
 	else
 		return *n = cpu_to_be32(be32_to_cpu(*n)-d);
@@ -97,7 +97,7 @@
 static __inline u16
 fs16_to_cpu(struct super_block *sbp, u16 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return le16_to_cpu(n);
 	else
 		return be16_to_cpu(n);
@@ -106,7 +106,7 @@
 static __inline u16
 cpu_to_fs16(struct super_block *sbp, u16 n)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return cpu_to_le16(n);
 	else
 		return cpu_to_be16(n);
@@ -115,7 +115,7 @@
 static __inline u16
 fs16_add(struct super_block *sbp, u16 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le16(le16_to_cpu(*n)+d);
 	else
 		return *n = cpu_to_be16(be16_to_cpu(*n)+d);
@@ -124,7 +124,7 @@
 static __inline u16
 fs16_sub(struct super_block *sbp, u16 *n, int d)
 {
-	if (sbp->u.ufs_sb.s_bytesex == BYTESEX_LE)
+	if (UFS_SB(sbp)->s_bytesex == BYTESEX_LE)
 		return *n = cpu_to_le16(le16_to_cpu(*n)-d);
 	else
 		return *n = cpu_to_be16(be16_to_cpu(*n)-d);
diff -urN linux-2.5.7-bg1/fs/ufs/truncate.c linux-2.5.7-bg2/fs/ufs/truncate.c
--- linux-2.5.7-bg1/fs/ufs/truncate.c	Thu Mar  7 21:18:31 2002
+++ linux-2.5.7-bg2/fs/ufs/truncate.c	Wed Mar 27 20:18:33 2002
@@ -81,7 +81,7 @@
 	UFSD(("ENTER\n"))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	
 	frag_to_free = 0;
 	free_count = 0;
@@ -211,7 +211,7 @@
 	UFSD(("ENTER\n"))
 		
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 
 	frag_to_free = 0;
 	free_count = 0;
@@ -305,7 +305,7 @@
 	UFSD(("ENTER\n"))
 	
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 
 	dindirect_block = (DIRECT_BLOCK > offset) 
 		? ((DIRECT_BLOCK - offset) >> uspi->s_apbshift) : 0;
@@ -373,7 +373,7 @@
 	UFSD(("ENTER\n"))
 
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	retry = 0;
 	
 	tindirect_block = (DIRECT_BLOCK > (UFS_NDADDR + uspi->s_apb + uspi->s_2apb))
@@ -434,7 +434,7 @@
 	
 	UFSD(("ENTER\n"))
 	sb = inode->i_sb;
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 
 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
 		return;
diff -urN linux-2.5.7-bg1/fs/ufs/util.h linux-2.5.7-bg2/fs/ufs/util.h
--- linux-2.5.7-bg1/fs/ufs/util.h	Thu Mar  7 21:18:33 2002
+++ linux-2.5.7-bg2/fs/ufs/util.h	Wed Mar 27 20:28:51 2002
@@ -30,7 +30,7 @@
 ufs_get_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1,
 		 struct ufs_super_block_third *usb3)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
 	case UFS_ST_SUN:
 		return fs32_to_cpu(sb, usb3->fs_u2.fs_sun.fs_state);
 	case UFS_ST_SUNx86:
@@ -45,7 +45,7 @@
 ufs_set_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1,
 		 struct ufs_super_block_third *usb3, s32 value)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
 	case UFS_ST_SUN:
 		usb3->fs_u2.fs_sun.fs_state = cpu_to_fs32(sb, value);
 		break;
@@ -62,7 +62,7 @@
 ufs_get_fs_npsect(struct super_block *sb, struct ufs_super_block_first *usb1,
 		  struct ufs_super_block_third *usb3)
 {
-	if ((sb->u.ufs_sb.s_flags & UFS_ST_MASK) == UFS_ST_SUNx86)
+	if ((UFS_SB(sb)->s_flags & UFS_ST_MASK) == UFS_ST_SUNx86)
 		return fs32_to_cpu(sb, usb3->fs_u2.fs_sunx86.fs_npsect);
 	else
 		return fs32_to_cpu(sb, usb1->fs_u1.fs_sun.fs_npsect);
@@ -73,7 +73,7 @@
 {
 	u64 tmp;
 
-	switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
 	case UFS_ST_SUN:
 		((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qbmask[0];
 		((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qbmask[1];
@@ -96,7 +96,7 @@
 {
 	u64 tmp;
 
-	switch (sb->u.ufs_sb.s_flags & UFS_ST_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
 	case UFS_ST_SUN:
 		((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qfmask[0];
 		((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qfmask[1];
@@ -117,7 +117,7 @@
 static inline u16
 ufs_get_de_namlen(struct super_block *sb, struct ufs_dir_entry *de)
 {
-	if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) == UFS_DE_OLD)
+	if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) == UFS_DE_OLD)
 		return fs16_to_cpu(sb, de->d_u.d_namlen);
 	else
 		return de->d_u.d_44.d_namlen; /* XXX this seems wrong */
@@ -126,7 +126,7 @@
 static inline void
 ufs_set_de_namlen(struct super_block *sb, struct ufs_dir_entry *de, u16 value)
 {
-	if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) == UFS_DE_OLD)
+	if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) == UFS_DE_OLD)
 		de->d_u.d_namlen = cpu_to_fs16(sb, value);
 	else
 		de->d_u.d_44.d_namlen = value; /* XXX this seems wrong */
@@ -135,7 +135,7 @@
 static inline void
 ufs_set_de_type(struct super_block *sb, struct ufs_dir_entry *de, int mode)
 {
-	if ((sb->u.ufs_sb.s_flags & UFS_DE_MASK) != UFS_DE_44BSD)
+	if ((UFS_SB(sb)->s_flags & UFS_DE_MASK) != UFS_DE_44BSD)
 		return;
 
 	/*
@@ -171,7 +171,7 @@
 static inline u32
 ufs_get_inode_uid(struct super_block *sb, struct ufs_inode *inode)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
 	case UFS_UID_EFT:
 		return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_uid);
 	case UFS_UID_44BSD:
@@ -184,7 +184,7 @@
 static inline void
 ufs_set_inode_uid(struct super_block *sb, struct ufs_inode *inode, u32 value)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
 	case UFS_UID_EFT:
 		inode->ui_u3.ui_sun.ui_uid = cpu_to_fs32(sb, value);
 		break;
@@ -198,7 +198,7 @@
 static inline u32
 ufs_get_inode_gid(struct super_block *sb, struct ufs_inode *inode)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
 	case UFS_UID_EFT:
 		return fs32_to_cpu(sb, inode->ui_u3.ui_sun.ui_gid);
 	case UFS_UID_44BSD:
@@ -211,7 +211,7 @@
 static inline void
 ufs_set_inode_gid(struct super_block *sb, struct ufs_inode *inode, u32 value)
 {
-	switch (sb->u.ufs_sb.s_flags & UFS_UID_MASK) {
+	switch (UFS_SB(sb)->s_flags & UFS_UID_MASK) {
 	case UFS_UID_EFT:
 		inode->ui_u3.ui_sun.ui_gid = cpu_to_fs32(sb, value);
 		break;
@@ -480,7 +480,7 @@
 	struct ufs_sb_private_info * uspi;
 	unsigned fragsize, pos;
 	
-	uspi = sb->u.ufs_sb.s_uspi;
+	uspi = UFS_SB(sb)->s_uspi;
 	
 	fragsize = 0;
 	for (pos = 0; pos < uspi->s_fpb; pos++) {
diff -urN linux-2.5.7-bg1/include/linux/fs.h linux-2.5.7-bg2/include/linux/fs.h
--- linux-2.5.7-bg1/include/linux/fs.h	Wed Mar 27 20:14:39 2002
+++ linux-2.5.7-bg2/include/linux/fs.h	Wed Mar 27 20:27:58 2002
@@ -648,7 +648,6 @@
 #include <linux/hpfs_fs_sb.h>
 #include <linux/ntfs_fs_sb.h>
 #include <linux/sysv_fs_sb.h>
-#include <linux/ufs_fs_sb.h>
 #include <linux/romfs_fs_sb.h>
 #include <linux/adfs_fs_sb.h>
 #include <linux/bfs_fs_sb.h>
@@ -691,7 +690,6 @@
 		struct hpfs_sb_info	hpfs_sb;
 		struct ntfs_sb_info	ntfs_sb;
 		struct sysv_sb_info	sysv_sb;
-		struct ufs_sb_info	ufs_sb;
 		struct romfs_sb_info	romfs_sb;
 		struct adfs_sb_info	adfs_sb;
 		struct bfs_sb_info	bfs_sb;
diff -urN linux-2.5.7-bg1/include/linux/ufs_fs.h linux-2.5.7-bg2/include/linux/ufs_fs.h
--- linux-2.5.7-bg1/include/linux/ufs_fs.h	Thu Mar  7 21:18:19 2002
+++ linux-2.5.7-bg2/include/linux/ufs_fs.h	Wed Mar 27 20:28:51 2002
@@ -32,6 +32,9 @@
 #include <linux/time.h>
 #include <linux/stat.h>
 
+#include <linux/ufs_fs_i.h>
+#include <linux/ufs_fs_sb.h>
+
 #define UFS_BBLOCK 0
 #define UFS_BBSIZE 8192
 #define UFS_SBLOCK 8192
@@ -397,7 +400,7 @@
  * Convert cylinder group to base address of its global summary info.
  */
 #define fs_cs(indx) \
-	u.ufs_sb.s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
+	s_csp[(indx) >> uspi->s_csshift][(indx) & ~uspi->s_csmask]
 
 /*
  * Cylinder group block for a file system.
@@ -779,7 +782,10 @@
 /* truncate.c */
 extern void ufs_truncate (struct inode *);
 
-#include <linux/ufs_fs_i.h>
+static inline struct ufs_sb_info *UFS_SB(struct super_block *sb)
+{
+	return sb->u.generic_sbp;
+}
 
 static inline struct ufs_inode_info *UFS_I(struct inode *inode)
 {

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-03-28  1:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-03-28  1:37 [PATCH] struct super_block cleanup - reiserfs Brian Gerst
  -- strict thread matches above, loose matches on Subject: below --
2002-03-28  1:11 Brian Gerst

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox