Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eef49c9e authored by Palmer Dabbelt's avatar Palmer Dabbelt Committed by Akilesh Kailash
Browse files

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: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
Change-Id: Ibf7f378b67abb6ca7457a9fdc9b8739e3d31bee3
Signed-off-by: default avatarAkilesh Kailash <akailash@google.com>
parent 219b3487
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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, " ");
}

+6 −1
Original line number Diff line number Diff line
@@ -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
+6 −1
Original line number Diff line number Diff line
@@ -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;