Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/ext2fs/ext2_vfsops.c
Show First 20 Lines • Show All 608 Lines • ▼ Show 20 Lines | ext2_compute_sb_data(struct vnode *devvp, struct ext2fs *es, | ||||
fs->e2fs_contigdirs = malloc(fs->e2fs_gcount * | fs->e2fs_contigdirs = malloc(fs->e2fs_gcount * | ||||
sizeof(*fs->e2fs_contigdirs), M_EXT2MNT, M_WAITOK | M_ZERO); | sizeof(*fs->e2fs_contigdirs), M_EXT2MNT, M_WAITOK | M_ZERO); | ||||
for (i = 0; i < fs->e2fs_gdbcount; i++) { | for (i = 0; i < fs->e2fs_gdbcount; i++) { | ||||
error = bread(devvp, | error = bread(devvp, | ||||
fsbtodb(fs, ext2_cg_location(fs, i)), | fsbtodb(fs, ext2_cg_location(fs, i)), | ||||
fs->e2fs_bsize, NOCRED, &bp); | fs->e2fs_bsize, NOCRED, &bp); | ||||
if (error) { | if (error) { | ||||
free(fs->e2fs_contigdirs, M_EXT2MNT); | /* | ||||
free(fs->e2fs_gd, M_EXT2MNT); | * fs->e2fs_gd and fs->e2fs_contigdirs | ||||
* will be freed later by the caller, | |||||
* because this function could be called from | |||||
* MNT_UPDATE path. | |||||
*/ | |||||
brelse(bp); | brelse(bp); | ||||
return (error); | return (error); | ||||
} | } | ||||
if (EXT2_HAS_INCOMPAT_FEATURE(fs, EXT2F_INCOMPAT_64BIT)) { | if (EXT2_HAS_INCOMPAT_FEATURE(fs, EXT2F_INCOMPAT_64BIT)) { | ||||
memcpy(&fs->e2fs_gd[ | memcpy(&fs->e2fs_gd[ | ||||
i * fs->e2fs_bsize / sizeof(struct ext2_gd)], | i * fs->e2fs_bsize / sizeof(struct ext2_gd)], | ||||
bp->b_data, fs->e2fs_bsize); | bp->b_data, fs->e2fs_bsize); | ||||
} else { | } else { | ||||
▲ Show 20 Lines • Show All 771 Lines • Show Last 20 Lines |