2011-12-16 00:04:31 +05:30
|
|
|
// Copyright (C) 2011 Red Hat, Inc. All rights reserved.
|
2011-12-06 19:23:05 +05:30
|
|
|
//
|
2011-12-06 19:13:56 +05:30
|
|
|
// This file is part of the thin-provisioning-tools source.
|
|
|
|
//
|
|
|
|
// thin-provisioning-tools is free software: you can redistribute it
|
|
|
|
// and/or modify it under the terms of the GNU General Public License
|
|
|
|
// as published by the Free Software Foundation, either version 3 of
|
|
|
|
// the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// thin-provisioning-tools 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 thin-provisioning-tools. If not, see
|
|
|
|
// <http://www.gnu.org/licenses/>.
|
|
|
|
|
2011-10-28 16:43:03 +05:30
|
|
|
#ifndef METADATA_DUMPER_H
|
|
|
|
#define METADATA_DUMPER_H
|
|
|
|
|
2019-10-25 15:02:56 +05:30
|
|
|
#include "thin-provisioning/emitter.h"
|
|
|
|
#include "thin-provisioning/metadata.h"
|
|
|
|
#include "thin-provisioning/override_emitter.h"
|
2011-10-28 16:43:03 +05:30
|
|
|
|
2016-03-22 20:11:02 +05:30
|
|
|
#include <boost/optional.hpp>
|
|
|
|
#include <set>
|
|
|
|
|
2011-10-28 16:43:03 +05:30
|
|
|
//----------------------------------------------------------------
|
|
|
|
|
|
|
|
namespace thin_provisioning {
|
2016-03-22 20:11:02 +05:30
|
|
|
class dump_options {
|
|
|
|
public:
|
|
|
|
dump_options()
|
2019-04-17 16:47:13 +05:30
|
|
|
: skip_mappings_(false) {
|
2016-03-22 20:11:02 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
bool selected_dev(uint64_t dev_id) const {
|
|
|
|
return !dev_filter_ || dev_filter_->count(dev_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
void select_dev(uint64_t dev_id) {
|
|
|
|
if (!dev_filter_)
|
|
|
|
dev_filter_ = dev_set();
|
|
|
|
|
|
|
|
dev_filter_->insert(dev_id);
|
|
|
|
}
|
|
|
|
|
2016-03-22 20:31:37 +05:30
|
|
|
bool skip_mappings_;
|
2019-10-28 17:22:21 +05:30
|
|
|
override_options overrides_;
|
2016-03-22 20:11:02 +05:30
|
|
|
|
|
|
|
using dev_set = std::set<uint64_t>;
|
|
|
|
using maybe_dev_set = boost::optional<dev_set>;
|
2019-04-17 16:47:13 +05:30
|
|
|
|
2016-03-22 20:11:02 +05:30
|
|
|
maybe_dev_set dev_filter_;
|
|
|
|
};
|
|
|
|
|
2012-03-02 15:30:31 +05:30
|
|
|
// Set the @repair flag if your metadata is corrupt, and you'd like
|
|
|
|
// the dumper to do it's best to recover info. If not set, any
|
|
|
|
// corruption encountered will cause an exception to be thrown.
|
2016-03-22 20:11:02 +05:30
|
|
|
void metadata_dump(metadata::ptr md, emitter::ptr e, dump_options const &opts);
|
2019-04-17 16:47:13 +05:30
|
|
|
|
2019-10-28 17:22:21 +05:30
|
|
|
// We have to provide a different interface for repairing, since
|
|
|
|
// the superblock itself may be corrupt, so we wont be able
|
|
|
|
// to create the metadata object.
|
|
|
|
void metadata_repair(block_manager<>::ptr bm, emitter::ptr e, override_options const &opts);
|
2019-04-17 16:47:13 +05:30
|
|
|
|
|
|
|
// Only used by ll_restore, so we leave the repair arg
|
2016-02-27 12:50:31 +05:30
|
|
|
void metadata_dump_subtree(metadata::ptr md, emitter::ptr e, bool repair, uint64_t subtree_root);
|
2011-10-28 16:43:03 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------
|
|
|
|
|
|
|
|
#endif
|