libdm: dm-user target creation takes an additional argument
Rather than using some implicit naming scheme, we've decided to just let userspace pick whatever control device naming scheme it wants. This requires an additional argument to be passed to the kernel. Test: cow_snapuserd_test Bug: 168259959 Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> Change-Id: Ibf7f378b67abb6ca7457a9fdc9b8739e3d31bee3 Signed-off-by: Akilesh Kailash <akailash@google.com>
This commit is contained in:
parent
219b3487f8
commit
eef49c9e3c
|
@ -284,6 +284,7 @@ std::string DmTargetUser::GetParameterString() const {
|
|||
std::vector<std::string> argv;
|
||||
argv.push_back(std::to_string(start()));
|
||||
argv.push_back(std::to_string(size()));
|
||||
argv.push_back(control_device());
|
||||
return android::base::Join(argv, " ");
|
||||
}
|
||||
|
||||
|
|
|
@ -311,10 +311,15 @@ class DmTargetDefaultKey final : public DmTarget {
|
|||
|
||||
class DmTargetUser final : public DmTarget {
|
||||
public:
|
||||
DmTargetUser(uint64_t start, uint64_t length) : DmTarget(start, length) {}
|
||||
DmTargetUser(uint64_t start, uint64_t length, std::string control_device)
|
||||
: DmTarget(start, length), control_device_(control_device) {}
|
||||
|
||||
std::string name() const override { return "user"; }
|
||||
std::string control_device() const { return control_device_; }
|
||||
std::string GetParameterString() const override;
|
||||
|
||||
private:
|
||||
std::string control_device_;
|
||||
};
|
||||
|
||||
} // namespace dm
|
||||
|
|
|
@ -177,7 +177,12 @@ class TargetParser final {
|
|||
return std::make_unique<DmTargetSnapshot>(start_sector, num_sectors, base_device,
|
||||
cow_device, mode, chunk_size);
|
||||
} else if (target_type == "user") {
|
||||
return std::make_unique<DmTargetUser>(start_sector, num_sectors);
|
||||
if (!HasArgs(1)) {
|
||||
std::cerr << "Expected \"user\" <control_device_name>" << std::endl;
|
||||
return nullptr;
|
||||
}
|
||||
std::string control_device = NextArg();
|
||||
return std::make_unique<DmTargetUser>(start_sector, num_sectors, control_device);
|
||||
} else {
|
||||
std::cerr << "Unrecognized target type: " << target_type << std::endl;
|
||||
return nullptr;
|
||||
|
|
Loading…
Reference in New Issue