Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/ext2fs/ext2_vfsops.c
Show First 20 Lines • Show All 870 Lines • ▼ Show 20 Lines | if (((SBSIZE % cp->provider->sectorsize) != 0) || | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
bo = &devvp->v_bufobj; | bo = &devvp->v_bufobj; | ||||
bo->bo_private = cp; | bo->bo_private = cp; | ||||
bo->bo_ops = g_vfs_bufops; | bo->bo_ops = g_vfs_bufops; | ||||
if (devvp->v_rdev->si_iosize_max != 0) | if (devvp->v_rdev->si_iosize_max != 0) | ||||
mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max; | mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max; | ||||
if (mp->mnt_iosize_max > MAXPHYS) | if (mp->mnt_iosize_max > maxphys) | ||||
mp->mnt_iosize_max = MAXPHYS; | mp->mnt_iosize_max = maxphys; | ||||
bp = NULL; | bp = NULL; | ||||
ump = NULL; | ump = NULL; | ||||
if ((error = bread(devvp, SBLOCK, SBSIZE, NOCRED, &bp)) != 0) | if ((error = bread(devvp, SBLOCK, SBSIZE, NOCRED, &bp)) != 0) | ||||
goto out; | goto out; | ||||
es = (struct ext2fs *)bp->b_data; | es = (struct ext2fs *)bp->b_data; | ||||
if (ext2_check_sb_compat(es, dev, ronly) != 0) { | if (ext2_check_sb_compat(es, dev, ronly) != 0) { | ||||
error = EINVAL; /* XXX needs translation */ | error = EINVAL; /* XXX needs translation */ | ||||
Show All 28 Lines | if ((error = ext2_compute_sb_data(devvp, ump->um_e2fs->e2fs, ump->um_e2fs))) | ||||
goto out; | goto out; | ||||
/* | /* | ||||
* Calculate the maximum contiguous blocks and size of cluster summary | * Calculate the maximum contiguous blocks and size of cluster summary | ||||
* array. In FFS this is done by newfs; however, the superblock | * array. In FFS this is done by newfs; however, the superblock | ||||
* in ext2fs doesn't have these variables, so we can calculate | * in ext2fs doesn't have these variables, so we can calculate | ||||
* them here. | * them here. | ||||
*/ | */ | ||||
e2fs_maxcontig = MAX(1, MAXPHYS / ump->um_e2fs->e2fs_bsize); | e2fs_maxcontig = MAX(1, maxphys / ump->um_e2fs->e2fs_bsize); | ||||
ump->um_e2fs->e2fs_contigsumsize = MIN(e2fs_maxcontig, EXT2_MAXCONTIG); | ump->um_e2fs->e2fs_contigsumsize = MIN(e2fs_maxcontig, EXT2_MAXCONTIG); | ||||
if (ump->um_e2fs->e2fs_contigsumsize > 0) { | if (ump->um_e2fs->e2fs_contigsumsize > 0) { | ||||
size = ump->um_e2fs->e2fs_gcount * sizeof(int32_t); | size = ump->um_e2fs->e2fs_gcount * sizeof(int32_t); | ||||
ump->um_e2fs->e2fs_maxcluster = malloc(size, M_EXT2MNT, M_WAITOK); | ump->um_e2fs->e2fs_maxcluster = malloc(size, M_EXT2MNT, M_WAITOK); | ||||
size = ump->um_e2fs->e2fs_gcount * sizeof(struct csum); | size = ump->um_e2fs->e2fs_gcount * sizeof(struct csum); | ||||
ump->um_e2fs->e2fs_clustersum = malloc(size, M_EXT2MNT, M_WAITOK); | ump->um_e2fs->e2fs_clustersum = malloc(size, M_EXT2MNT, M_WAITOK); | ||||
lp = ump->um_e2fs->e2fs_maxcluster; | lp = ump->um_e2fs->e2fs_maxcluster; | ||||
sump = ump->um_e2fs->e2fs_clustersum; | sump = ump->um_e2fs->e2fs_clustersum; | ||||
▲ Show 20 Lines • Show All 510 Lines • Show Last 20 Lines |