btrfs-progs: copy btrfsck.h to check/common.h

We want just one header for the check API (similar to what mkfs does)
but as btrfsck.h is exported header (libbtrfs), it needs some
deprecation beriod before it's moved through there are probably no users
of that header file in particular.

Copy the header to check, all modifications and cleanups won't affect
the public header.

Signed-off-by: David Sterba <dsterba@suse.com>
master
David Sterba 2019-08-26 19:54:25 +02:00
parent 8e68287d88
commit 1b42e71053
4 changed files with 206 additions and 3 deletions

203
check/common.h 100644
View File

@ -0,0 +1,203 @@
/*
* Copyright (C) 2013 FUJITSU LIMITED. All rights reserved.
* Written by Miao Xie <miaox@cn.fujitsu.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*/
#ifndef __BTRFS_CHECK_COMMON_H__
#define __BTRFS_CHECK_COMMON_H__
#if BTRFS_FLAT_INCLUDES
#include "kerncompat.h"
#include "ctree.h"
#include "extent-cache.h"
#include "kernel-lib/list.h"
#else
#include <btrfs/kerncompat.h>
#include <btrfs/ctree.h>
#include <btrfs/extent-cache.h>
#include <btrfs/list.h>
#endif /* BTRFS_FLAT_INCLUDES */
struct block_group_record {
struct cache_extent cache;
/* Used to identify the orphan block groups */
struct list_head list;
u64 generation;
u64 objectid;
u8 type;
u64 offset;
u64 flags;
};
struct block_group_tree {
struct cache_tree tree;
struct list_head block_groups;
};
struct device_record {
struct rb_node node;
u64 devid;
u64 generation;
u64 objectid;
u8 type;
u64 offset;
u64 total_byte;
u64 byte_used;
u64 real_used;
};
struct stripe {
u64 devid;
u64 offset;
u8 dev_uuid[BTRFS_UUID_SIZE];
};
struct chunk_record {
struct cache_extent cache;
struct list_head list;
struct list_head dextents;
struct block_group_record *bg_rec;
u64 generation;
u64 objectid;
u8 type;
u64 offset;
u64 owner;
u64 length;
u64 type_flags;
u64 stripe_len;
u16 num_stripes;
u16 sub_stripes;
u32 io_align;
u32 io_width;
u32 sector_size;
struct stripe stripes[0];
};
struct device_extent_record {
struct cache_extent cache;
/*
* Used to identify the orphan device extents (the device extents
* don't belong to a chunk or a device)
*/
struct list_head chunk_list;
struct list_head device_list;
u64 generation;
u64 objectid;
u8 type;
u64 offset;
u64 chunk_objectid;
u64 chunk_offset;
u64 length;
};
struct device_extent_tree {
struct cache_tree tree;
/*
* The idea is:
* When checking the chunk information, we move the device extents
* that has its chunk to the chunk's device extents list. After the
* check, if there are still some device extents in no_chunk_orphans,
* it means there are some device extents which don't belong to any
* chunk.
*
* The usage of no_device_orphans is the same as the first one, but it
* is for the device information check.
*/
struct list_head no_chunk_orphans;
struct list_head no_device_orphans;
};
static inline unsigned long btrfs_chunk_record_size(int num_stripes)
{
return sizeof(struct chunk_record) +
sizeof(struct stripe) * num_stripes;
}
void free_chunk_cache_tree(struct cache_tree *chunk_cache);
/*
* Function to check validation for num_stripes, or it can call
* float point error for 0 division
* return < 0 for invalid combination
* return 0 for valid combination
*/
static inline int check_num_stripes(u64 type, int num_stripes)
{
if (num_stripes == 0)
return -1;
if (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes <= 1)
return -1;
if (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes <= 2)
return -1;
return 0;
}
u64 calc_stripe_length(u64 type, u64 length, int num_stripes);
/* For block group tree */
static inline void block_group_tree_init(struct block_group_tree *tree)
{
cache_tree_init(&tree->tree);
INIT_LIST_HEAD(&tree->block_groups);
}
int insert_block_group_record(struct block_group_tree *tree,
struct block_group_record *bg_rec);
void free_block_group_tree(struct block_group_tree *tree);
/* For device extent tree */
static inline void device_extent_tree_init(struct device_extent_tree *tree)
{
cache_tree_init(&tree->tree);
INIT_LIST_HEAD(&tree->no_chunk_orphans);
INIT_LIST_HEAD(&tree->no_device_orphans);
}
int insert_device_extent_record(struct device_extent_tree *tree,
struct device_extent_record *de_rec);
void free_device_extent_tree(struct device_extent_tree *tree);
/* Create various in-memory record by on-disk data */
struct chunk_record *btrfs_new_chunk_record(struct extent_buffer *leaf,
struct btrfs_key *key,
int slot);
struct block_group_record *
btrfs_new_block_group_record(struct extent_buffer *leaf, struct btrfs_key *key,
int slot);
struct device_extent_record *
btrfs_new_device_extent_record(struct extent_buffer *leaf,
struct btrfs_key *key, int slot);
int check_chunks(struct cache_tree *chunk_cache,
struct block_group_tree *block_group_cache,
struct device_extent_tree *dev_extent_cache,
struct list_head *good, struct list_head *bad,
struct list_head *rebuild, int silent);
#endif

View File

@ -37,12 +37,12 @@
#include "cmds/commands.h"
#include "free-space-cache.h"
#include "free-space-tree.h"
#include "btrfsck.h"
#include "common/rbtree-utils.h"
#include "backref.h"
#include "kernel-shared/ulist.h"
#include "hash.h"
#include "common/help.h"
#include "check/common.h"
#include "check/mode-common.h"
#include "check/mode-original.h"
#include "check/mode-lowmem.h"

View File

@ -38,7 +38,7 @@
#include "transaction.h"
#include "kernel-lib/crc32c.h"
#include "common/utils.h"
#include "btrfsck.h"
#include "check/common.h"
#include "cmds/commands.h"
#include "cmds/rescue.h"

View File

@ -28,7 +28,7 @@
#include "extent_io.h"
#include "ioctl.h"
#include "btrfs-list.h"
#include "btrfsck.h"
#include "check/btrfsck.h"
#include "extent-cache.h"
#include "send.h"
#include "send-stream.h"