15a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner/* 25a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * Copyright (C) 2014 The Android Open Source Project 35a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * 45a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * Licensed under the Apache License, Version 2.0 (the "License"); 55a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * you may not use this file except in compliance with the License. 65a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * You may obtain a copy of the License at 75a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * 85a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * http://www.apache.org/licenses/LICENSE-2.0 95a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * 105a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * Unless required by applicable law or agreed to in writing, software 115a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * distributed under the License is distributed on an "AS IS" BASIS, 125a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * See the License for the specific language governing permissions and 145a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner * limitations under the License. 155a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner */ 165a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 175a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner#include <errno.h> 185a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 195a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner#include "ext4_sb.h" 205a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 215a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turnerint ext4_parse_sb(struct ext4_super_block *sb, struct fs_info *info) 225a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner{ 235a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner uint64_t len_blocks; 245a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 255a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner if (sb->s_magic != EXT4_SUPER_MAGIC) 265a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner return -EINVAL; 275a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 285a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner if ((sb->s_state & EXT4_VALID_FS) != EXT4_VALID_FS) 295a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner return -EINVAL; 305a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 315a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->block_size = 1024 << sb->s_log_block_size; 325a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->blocks_per_group = sb->s_blocks_per_group; 335a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->inodes_per_group = sb->s_inodes_per_group; 345a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->inode_size = sb->s_inode_size; 355a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->inodes = sb->s_inodes_count; 365a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->feat_ro_compat = sb->s_feature_ro_compat; 375a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->feat_compat = sb->s_feature_compat; 385a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->feat_incompat = sb->s_feature_incompat; 395a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->bg_desc_reserve_blocks = sb->s_reserved_gdt_blocks; 405a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->label = sb->s_volume_name; 415a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 425a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner len_blocks = ((uint64_t)sb->s_blocks_count_hi << 32) + 435a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner sb->s_blocks_count_lo; 445a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner info->len = (uint64_t)info->block_size * len_blocks; 455a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner 465a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner return 0; 475a60dc51ef5c2b97db192244e79b12ad03ee885eDavid 'Digit' Turner} 48