Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
[pandora-kernel.git] / fs / minix / inode.c
index 790cc0d..c11a4b9 100644 (file)
@@ -19,7 +19,7 @@
 
 static void minix_read_inode(struct inode * inode);
 static int minix_write_inode(struct inode * inode, int wait);
-static int minix_statfs(struct super_block *sb, struct kstatfs *buf);
+static int minix_statfs(struct dentry *dentry, struct kstatfs *buf);
 static int minix_remount (struct super_block * sb, int * flags, char * data);
 
 static void minix_delete_inode(struct inode *inode)
@@ -80,7 +80,8 @@ static int init_inodecache(void)
 {
        minix_inode_cachep = kmem_cache_create("minix_inode_cache",
                                             sizeof(struct minix_inode_info),
-                                            0, SLAB_RECLAIM_ACCOUNT,
+                                            0, (SLAB_RECLAIM_ACCOUNT|
+                                               SLAB_MEM_SPREAD),
                                             init_once, NULL);
        if (minix_inode_cachep == NULL)
                return -ENOMEM;
@@ -89,8 +90,7 @@ static int init_inodecache(void)
 
 static void destroy_inodecache(void)
 {
-       if (kmem_cache_destroy(minix_inode_cachep))
-               printk(KERN_INFO "minix_inode_cache: not all structures were freed\n");
+       kmem_cache_destroy(minix_inode_cachep);
 }
 
 static struct super_operations minix_sops = {
@@ -126,11 +126,11 @@ static int minix_remount (struct super_block * sb, int * flags, char * data)
                mark_buffer_dirty(sbi->s_sbh);
 
                if (!(sbi->s_mount_state & MINIX_VALID_FS))
-                       printk ("MINIX-fs warning: remounting unchecked fs, "
-                               "running fsck is recommended.\n");
+                       printk("MINIX-fs warning: remounting unchecked fs, "
+                               "running fsck is recommended\n");
                else if ((sbi->s_mount_state & MINIX_ERROR_FS))
-                       printk ("MINIX-fs warning: remounting fs with errors, "
-                               "running fsck is recommended.\n");
+                       printk("MINIX-fs warning: remounting fs with errors, "
+                               "running fsck is recommended\n");
        }
        return 0;
 }
@@ -144,11 +144,10 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
        struct inode *root_inode;
        struct minix_sb_info *sbi;
 
-       sbi = kmalloc(sizeof(struct minix_sb_info), GFP_KERNEL);
+       sbi = kzalloc(sizeof(struct minix_sb_info), GFP_KERNEL);
        if (!sbi)
                return -ENOMEM;
        s->s_fs_info = sbi;
-       memset(sbi, 0, sizeof(struct minix_sb_info));
 
        /* N.B. These should be compile-time tests.
           Unfortunately that is impossible. */
@@ -203,11 +202,12 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
        /*
         * Allocate the buffer map to keep the superblock small.
         */
+       if (sbi->s_imap_blocks == 0 || sbi->s_zmap_blocks == 0)
+               goto out_illegal_sb;
        i = (sbi->s_imap_blocks + sbi->s_zmap_blocks) * sizeof(bh);
-       map = kmalloc(i, GFP_KERNEL);
+       map = kzalloc(i, GFP_KERNEL);
        if (!map)
                goto out_no_map;
-       memset(map, 0, i);
        sbi->s_imap = &map[0];
        sbi->s_zmap = &map[sbi->s_imap_blocks];
 
@@ -244,11 +244,11 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
                mark_buffer_dirty(bh);
        }
        if (!(sbi->s_mount_state & MINIX_VALID_FS))
-               printk ("MINIX-fs: mounting unchecked file system, "
-                       "running fsck is recommended.\n");
+               printk("MINIX-fs: mounting unchecked file system, "
+                       "running fsck is recommended\n");
        else if (sbi->s_mount_state & MINIX_ERROR_FS)
-               printk ("MINIX-fs: mounting file system with errors, "
-                       "running fsck is recommended.\n");
+               printk("MINIX-fs: mounting file system with errors, "
+                       "running fsck is recommended\n");
        return 0;
 
 out_iput:
@@ -262,7 +262,7 @@ out_no_root:
 
 out_no_bitmap:
        printk("MINIX-fs: bad superblock or unable to read bitmaps\n");
-    out_freemap:
+out_freemap:
        for (i = 0; i < sbi->s_imap_blocks; i++)
                brelse(sbi->s_imap[i]);
        for (i = 0; i < sbi->s_zmap_blocks; i++)
@@ -272,34 +272,39 @@ out_no_bitmap:
 
 out_no_map:
        if (!silent)
-               printk ("MINIX-fs: can't allocate map\n");
+               printk("MINIX-fs: can't allocate map\n");
+       goto out_release;
+
+out_illegal_sb:
+       if (!silent)
+               printk("MINIX-fs: bad superblock\n");
        goto out_release;
 
 out_no_fs:
        if (!silent)
-               printk("VFS: Can't find a Minix or Minix V2 filesystem on device "
-                      "%s.\n", s->s_id);
-    out_release:
+               printk("VFS: Can't find a Minix or Minix V2 filesystem "
+                       "on device %s\n", s->s_id);
+out_release:
        brelse(bh);
        goto out;
 
 out_bad_hblock:
-       printk("MINIX-fs: blocksize too small for device.\n");
+       printk("MINIX-fs: blocksize too small for device\n");
        goto out;
 
 out_bad_sb:
        printk("MINIX-fs: unable to read superblock\n");
- out:
+out:
        s->s_fs_info = NULL;
        kfree(sbi);
        return -EINVAL;
 }
 
-static int minix_statfs(struct super_block *sb, struct kstatfs *buf)
+static int minix_statfs(struct dentry *dentry, struct kstatfs *buf)
 {
-       struct minix_sb_info *sbi = minix_sb(sb);
-       buf->f_type = sb->s_magic;
-       buf->f_bsize = sb->s_blocksize;
+       struct minix_sb_info *sbi = minix_sb(dentry->d_sb);
+       buf->f_type = dentry->d_sb->s_magic;
+       buf->f_bsize = dentry->d_sb->s_blocksize;
        buf->f_blocks = (sbi->s_nzones - sbi->s_firstdatazone) << sbi->s_log_zone_size;
        buf->f_bfree = minix_count_free_blocks(sbi);
        buf->f_bavail = buf->f_bfree;
@@ -334,7 +339,7 @@ static sector_t minix_bmap(struct address_space *mapping, sector_t block)
 {
        return generic_block_bmap(mapping,block,minix_get_block);
 }
-static struct address_space_operations minix_aops = {
+static const struct address_space_operations minix_aops = {
        .readpage = minix_readpage,
        .writepage = minix_writepage,
        .sync_page = block_sync_page,
@@ -391,7 +396,7 @@ static void V1_minix_read_inode(struct inode * inode)
        inode->i_mtime.tv_nsec = 0;
        inode->i_atime.tv_nsec = 0;
        inode->i_ctime.tv_nsec = 0;
-       inode->i_blocks = inode->i_blksize = 0;
+       inode->i_blocks = 0;
        for (i = 0; i < 9; i++)
                minix_inode->u.i1_data[i] = raw_inode->i_zone[i];
        minix_set_inode(inode, old_decode_dev(raw_inode->i_zone[0]));
@@ -424,7 +429,7 @@ static void V2_minix_read_inode(struct inode * inode)
        inode->i_mtime.tv_nsec = 0;
        inode->i_atime.tv_nsec = 0;
        inode->i_ctime.tv_nsec = 0;
-       inode->i_blocks = inode->i_blksize = 0;
+       inode->i_blocks = 0;
        for (i = 0; i < 10; i++)
                minix_inode->u.i2_data[i] = raw_inode->i_zone[i];
        minix_set_inode(inode, old_decode_dev(raw_inode->i_zone[0]));
@@ -523,7 +528,7 @@ int minix_sync_inode(struct inode * inode)
                sync_dirty_buffer(bh);
                if (buffer_req(bh) && !buffer_uptodate(bh))
                {
-                       printk ("IO error syncing minix inode [%s:%08lx]\n",
+                       printk("IO error syncing minix inode [%s:%08lx]\n",
                                inode->i_sb->s_id, inode->i_ino);
                        err = -1;
                }
@@ -558,10 +563,11 @@ void minix_truncate(struct inode * inode)
                V2_minix_truncate(inode);
 }
 
-static struct super_block *minix_get_sb(struct file_system_type *fs_type,
-       int flags, const char *dev_name, void *data)
+static int minix_get_sb(struct file_system_type *fs_type,
+       int flags, const char *dev_name, void *data, struct vfsmount *mnt)
 {
-       return get_sb_bdev(fs_type, flags, dev_name, data, minix_fill_super);
+       return get_sb_bdev(fs_type, flags, dev_name, data, minix_fill_super,
+                          mnt);
 }
 
 static struct file_system_type minix_fs_type = {