a73ed22cb7
Set properties dev.mnt.blk.<mount_point>=<device_block_class> for mount and umount operations by setting up an Epoll handler to catch EPOLLERR or EPOLLPRI signals when /proc/mounts is changed. Only update properties associated with block devices. For the mount point of /, use the designation of /root instead. Can use the properties in init rc expansion like: on property dev.mnt.blk.root=* write /sys/block/${dev.mnt.blk.root}/queue/read_ahead_kb ${boot_read_ahead_kb:-2048} on property dev.mnt.blk.data=* write /sys/block/${dev.mnt.blk.data}/queue/read_ahead_kb ${boot_read_ahead_kb:-2048} on late-fs setprop boot_read_ahead_kb 128 write /sys/block/${dev.mnt.blk.root}/queue/read_ahead_kb ${boot_read_ahead_kb} write /sys/block/${dev.mnt.blk.data}/queue/read_ahead_kb ${boot_read_ahead_kb} Test: boot and inspect getprop results. Bug: 124072565 Change-Id: I1b8aff44f922ba372cd926de2919c215c40ee874
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
/*
|
|
* Copyright (C) 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <memory>
|
|
#include <set>
|
|
#include <string>
|
|
|
|
#include "epoll.h"
|
|
|
|
namespace android {
|
|
namespace init {
|
|
|
|
struct MountHandlerEntry {
|
|
MountHandlerEntry(const std::string& blk_device, const std::string& mount_point,
|
|
const std::string& fs_type);
|
|
|
|
bool operator<(const MountHandlerEntry& r) const;
|
|
|
|
const std::string blk_device;
|
|
const std::string mount_point;
|
|
const std::string fs_type;
|
|
};
|
|
|
|
class MountHandler {
|
|
public:
|
|
explicit MountHandler(Epoll* epoll);
|
|
MountHandler(const MountHandler&) = delete;
|
|
MountHandler(MountHandler&&) = delete;
|
|
MountHandler& operator=(const MountHandler&) = delete;
|
|
MountHandler& operator=(MountHandler&&) = delete;
|
|
~MountHandler();
|
|
|
|
private:
|
|
void MountHandlerFunction();
|
|
|
|
Epoll* epoll_;
|
|
std::unique_ptr<FILE, decltype(&fclose)> fp_;
|
|
std::set<MountHandlerEntry> mounts_;
|
|
};
|
|
|
|
} // namespace init
|
|
} // namespace android
|