linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / fat / inode.c
index bb3bee0..e7f4aa7 100644 (file)
@@ -101,11 +101,11 @@ static int __fat_get_blocks(struct inode *inode, sector_t iblock,
 }
 
 static int fat_get_blocks(struct inode *inode, sector_t iblock,
+                         unsigned long max_blocks,
                          struct buffer_head *bh_result, int create)
 {
        struct super_block *sb = inode->i_sb;
        int err;
-       unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
 
        err = __fat_get_blocks(inode, iblock, &max_blocks, bh_result, create);
        if (err)
@@ -196,7 +196,7 @@ static sector_t _fat_bmap(struct address_space *mapping, sector_t block)
        return generic_block_bmap(mapping, block, fat_get_block);
 }
 
-static const struct address_space_operations fat_aops = {
+static struct address_space_operations fat_aops = {
        .readpage       = fat_readpage,
        .readpages      = fat_readpages,
        .writepage      = fat_writepage,
@@ -375,6 +375,8 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
                        inode->i_flags |= S_IMMUTABLE;
        }
        MSDOS_I(inode)->i_attrs = de->attr & ATTR_UNUSED;
+       /* this is as close to the truth as we can get ... */
+       inode->i_blksize = sbi->cluster_size;
        inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1))
                           & ~((loff_t)sbi->cluster_size - 1)) >> 9;
        inode->i_mtime.tv_sec =
@@ -516,8 +518,7 @@ static int __init fat_init_inodecache(void)
 {
        fat_inode_cachep = kmem_cache_create("fat_inode_cache",
                                             sizeof(struct msdos_inode_info),
-                                            0, (SLAB_RECLAIM_ACCOUNT|
-                                               SLAB_MEM_SPREAD),
+                                            0, SLAB_RECLAIM_ACCOUNT,
                                             init_once, NULL);
        if (fat_inode_cachep == NULL)
                return -ENOMEM;
@@ -537,18 +538,18 @@ static int fat_remount(struct super_block *sb, int *flags, char *data)
        return 0;
 }
 
-static int fat_statfs(struct dentry *dentry, struct kstatfs *buf)
+static int fat_statfs(struct super_block *sb, struct kstatfs *buf)
 {
-       struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb);
+       struct msdos_sb_info *sbi = MSDOS_SB(sb);
 
        /* If the count of free cluster is still unknown, counts it here. */
        if (sbi->free_clusters == -1) {
-               int err = fat_count_free_clusters(dentry->d_sb);
+               int err = fat_count_free_clusters(sb);
                if (err)
                        return err;
        }
 
-       buf->f_type = dentry->d_sb->s_magic;
+       buf->f_type = sb->s_magic;
        buf->f_bsize = sbi->cluster_size;
        buf->f_blocks = sbi->max_cluster - FAT_START_ENT;
        buf->f_bfree = sbi->free_clusters;
@@ -951,8 +952,7 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug,
                opts->shortname = 0;
        opts->name_check = 'n';
        opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK =  0;
-       opts->utf8 = 1;
-       opts->unicode_xlate = 0;
+       opts->utf8 = opts->unicode_xlate = 0;
        opts->numtail = 1;
        opts->nocase = 0;
        *debug = 0;
@@ -1101,7 +1101,7 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug,
                        return -EINVAL;
                }
        }
-       /* UTF-8 doesn't provide FAT semantics */
+       /* UTF8 doesn't provide FAT semantics */
        if (!strcmp(opts->iocharset, "utf8")) {
                printk(KERN_ERR "FAT: utf8 is not a recommended IO charset"
                       " for FAT filesystems, filesystem will be case sensitive!\n");
@@ -1136,6 +1136,7 @@ static int fat_read_root(struct inode *inode)
                MSDOS_I(inode)->i_start = 0;
                inode->i_size = sbi->dir_entries * sizeof(struct msdos_dir_entry);
        }
+       inode->i_blksize = sbi->cluster_size;
        inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1))
                           & ~((loff_t)sbi->cluster_size - 1)) >> 9;
        MSDOS_I(inode)->i_logstart = 0;
@@ -1433,6 +1434,9 @@ out_fail:
 
 EXPORT_SYMBOL_GPL(fat_fill_super);
 
+int __init fat_cache_init(void);
+void fat_cache_destroy(void);
+
 static int __init init_fat_fs(void)
 {
        int err;