/* init. the fs meta data, return the block size shift bits. */
static int btrfs_fs_init(struct fs_info *_fs)
{
+ struct disk *disk = fs->fs_dev->disk;
+
btrfs_init_crc32c();
+ fs->sector_shift = disk->sector_shift;
+ fs->sector_size = 1 << fs->sector_shift;
+ fs->block_shift = BTRFS_BLOCK_SHIFT;
+ fs->block_size = 1 << fs->block_shift;
+
fs = _fs;
btrfs_read_super_block();
if (strncmp((char *)(&sb.magic), BTRFS_MAGIC, sizeof(sb.magic)))
btrfs_get_fs_tree();
btrfs_set_cwd();
cache_ready = 1;
- return BTRFS_BLOCK_SHIFT;/* to determine cache size */
+
+ /* Initialize the block cache */
+ cache_init(fs->fs_dev, fs->block_size);
+
+ return fs->block_size;
}
const struct fs_ops btrfs_fs_ops = {
struct disk *disk = fs->fs_dev->disk;
struct ext2_sb_info *sbi;
struct ext2_super_block sb;
+ struct cache *cs;
/* read the super block */
disk->rdwr_sectors(disk, &sb, 2, 2, 0);
sbi->s_first_data_block = sb.s_first_data_block;
sbi->s_inode_size = sb.s_inode_size;
+ /* Initialize the cache, and force block zero to all zero */
+ cache_init(fs->fs_dev, fs->block_shift);
+ cs = _get_cache_block(fs->fs_dev, 0);
+ memset(cs->data, 0, fs->block_size);
+ cache_lock_block(cs);
+
return fs->block_shift;
}
}
sbi->clusters = clusters;
- /* for SYSLINUX, the cache is based on sector size */
- return fs->sector_shift;
+ /* Initialize the cache */
+ cache_init(fs->fs_dev, fs->block_shift);
+
+ return fs->block_shift;
}
const struct fs_ops vfat_fs_ops = {
fs->sector_size = 1 << fs->sector_shift;
fs->block_size = 1 << fs->block_shift;
+ /* Initialize the cache */
+ cache_init(fs->fs_dev, fs->block_shift);
+
return fs->block_shift;
}