struct super_block cleanup - smbfs
PATCH 1/1 struct super_block cleanup - smbfs
Seperates smb_sb_info from struct super_block.
Signature · 1 line
Brian Gerst
fs/smbfs/inode.c +17 -3
@@ -400,7 +400,7 @@static int smb_show_options (struct seq_file *s,struct vfsmount *m) { -struct smb_mount_data_kernel *mnt = m->mnt_sb->u.smbfs_sb.mnt; +struct smb_mount_data_kernel *mnt =SMB_SB (m->mnt_sb)->mnt;int i;for (i =0 ; opts[i].name !=NULL ; i++)
@@ -435,7 +435,7 @@static void smb_put_super (struct super_block *sb) { -struct smb_sb_info *server = &(sb->u.smbfs_sb); +struct smb_sb_info *server =SMB_SB (sb);if (server->sock_file) {smb_dont_catch_keepalive (server);
@@ -457,11 +457,13 @@unload_nls (server->local_nls); server->local_nls =NULL ; } + sb->u.generic_sbp =NULL ; +smb_kfree (server); }int smb_fill_super (struct super_block *sb,void *raw_data,int silent) { -struct smb_sb_info *server = &sb->u.smbfs_sb; +struct smb_sb_info *server;struct smb_mount_data_kernel *mnt;struct smb_mount_data *oldmnt;struct inode *root_inode;
@@ -482,6 +484,13 @@ sb->s_magic =SMB_SUPER_MAGIC ; sb->s_op = &smb_sops; + server =smb_kmalloc (sizeof (struct smb_sb_info ),GFP_KERNEL ); +if (!server) + goto out_no_server; + sb->u.generic_sbp = server; +memset (server,0 ,sizeof (struct smb_sb_info )); + + server->super_block = sb; server->mnt =NULL ; server->sock_file =NULL ;init_MUTEX (&server->sem);
@@ -578,6 +587,8 @@ out_no_mem:if (!server->mnt)printk (KERN_ERR "smb_fill_super: allocation failure\n" ); + sb->u.generic_sbp =NULL ; +smb_kfree (server); goto out_fail; out_wrong_data:printk (KERN_ERR "smbfs: mount_data version %d is not supported\n" , ver);
@@ -586,6 +597,9 @@printk (KERN_ERR "smb_fill_super: missing data argument\n" ); out_fail:return -EINVAL ; +out_no_server: +printk (KERN_ERR "smb_fill_super: cannot allocate struct smb_sb_info\n" ); +return -ENOMEM ; } static int
fs/smbfs/proc.c +1 -1
@@ -2884,7 +2884,7 @@int smb_proc_dskattr (struct super_block *sb,struct statfs *attr) { -struct smb_sb_info *server = &(sb->u.smbfs_sb); +struct smb_sb_info *server =SMB_SB (sb);int result;char *p;long unit;
include/linux/fs.h +0 -2
@@ -660,7 +660,6 @@#include <linux/ufs_fs_sb.h> #include <linux/efs_fs_sb.h> #include <linux/romfs_fs_sb.h> -#include <linux/smb_fs_sb.h> #include <linux/hfs_fs_sb.h> #include <linux/adfs_fs_sb.h> #include <linux/qnx4_fs_sb.h>
@@ -717,7 +716,6 @@struct efs_sb_info efs_sb;struct shmem_sb_info shmem_sb;struct romfs_sb_info romfs_sb; -struct smb_sb_info smbfs_sb;struct hfs_sb_info hfs_sb;struct adfs_sb_info adfs_sb;struct qnx4_sb_info qnx4_sb;
include/linux/smb_fs.h +6 -0
@@ -11,6 +11,7 @@#include <linux/smb.h> #include <linux/smb_fs_i.h> +#include <linux/smb_fs_sb.h> /* * ioctl commands
@@ -29,6 +30,11 @@#include <linux/smb_mount.h> #include <asm/unaligned.h> +static inline struct smb_sb_info *SMB_SB (struct super_block *sb) +{ +return sb->u.generic_sbp; +} +static inline struct smb_inode_info *SMB_I (struct inode *inode) { return list_entry(inode, struct smb_inode_info, vfs_inode);
include/linux/smb_fs_sb.h +4 -4
@@ -15,10 +15,9 @@#include <linux/smb.h> /* structure access macros */ -#define server_from_inode (inode) (&(inode)->i_sb->u.smbfs_sb) -#define server_from_dentry (dentry) (&(dentry)->d_sb->u.smbfs_sb) -#define SB_of (server) ((struct super_block *) ((char *)(server) - \ - (unsigned long)(&((struct super_block *)0)->u.smbfs_sb))) +#define server_from_inode (inode) SMB_SB((inode)->i_sb) +#define server_from_dentry (dentry) SMB_SB((dentry)->d_sb) +#define SB_of (server) ((server)->super_block)struct smb_sb_info {enum smb_conn_state state;
@@ -55,6 +54,7 @@char *name_buf;struct smb_ops *ops; +struct super_block *super_block; };