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