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

Commit 262f1e80 authored by Bart Van Assche's avatar Bart Van Assche Committed by Bart Van Assche
Browse files

Create the /dev/sys/block/by-name/zoned_device symbolic link



This link will be used to change the sysfs attributes of the zoned block
device from an .rc file.

Bug: 335708738
Change-Id: I99f74c121e7d9da404c0564860c03ac1efe6c6d8
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
parent 7bbb008d
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -435,6 +435,7 @@ std::vector<std::string> DeviceHandler::GetBlockDeviceSymlinks(const Uevent& uev
    if (ReadFileToString("/sys/class/block/" + uevent.device_name + "/queue/zoned", &model) &&
        !StartsWith(model, "none")) {
        links.emplace_back("/dev/block/by-name/zoned_device");
        links.emplace_back("/dev/sys/block/by-name/zoned_device");
    }

    auto last_slash = uevent.path.rfind('/');
@@ -483,11 +484,21 @@ void DeviceHandler::HandleDevice(const std::string& action, const std::string& d
    // event.
    if (action == "add" || (action == "change" && StartsWith(devpath, "/dev/block/dm-"))) {
        for (const auto& link : links) {
            std::string target;
            if (StartsWith(link, "/dev/block/")) {
                target = devpath;
            } else if (StartsWith(link, "/dev/sys/block/")) {
                target = "/sys/class/block/" + Basename(devpath);
            } else {
                LOG(ERROR) << "Unrecognized link type: " << link;
                continue;
            }

            if (!mkdir_recursive(Dirname(link), 0755)) {
                PLOG(ERROR) << "Failed to create directory " << Dirname(link);
            }

            if (symlink(devpath.c_str(), link.c_str())) {
            if (symlink(target.c_str(), link.c_str())) {
                if (errno != EEXIST) {
                    PLOG(ERROR) << "Failed to symlink " << devpath << " to " << link;
                } else if (std::string link_path;