errcode_t ext2fs_mmp_init(ext2_filsys fs) { struct ext2_super_block *sb = fs->super; blk64_t mmp_block; errcode_t retval; if (sb->s_mmp_update_interval == 0) sb->s_mmp_update_interval = EXT4_MMP_UPDATE_INTERVAL; /* This is probably excessively large, but who knows? */ else if (sb->s_mmp_update_interval > EXT4_MMP_MAX_UPDATE_INTERVAL) return EXT2_ET_INVALID_ARGUMENT; if (fs->mmp_buf == NULL) { retval = ext2fs_get_mem(fs->blocksize, &fs->mmp_buf); if (retval) goto out; } retval = ext2fs_alloc_block2(fs, 0, fs->mmp_buf, &mmp_block); if (retval) goto out; sb->s_mmp_block = mmp_block; retval = ext2fs_mmp_reset(fs); if (retval) goto out; out: return retval; }
errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal, char *block_buf, blk_t *ret) { errcode_t retval; blk64_t val; retval = ext2fs_alloc_block2(fs, goal, block_buf, &val); if (!retval) *ret = (blk_t) val; return retval; }