diff options
author | Mark Salyzyn <salyzyn@google.com> | 2019-03-13 10:18:24 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2019-03-15 11:54:38 -0700 |
commit | a73ed22cb7d2fec0b330401b764fa8c9b934d0da (patch) | |
tree | 6e32ba0b5e995fb7ef238e73a737de8347c9b43d /init/mount_handler.h | |
parent | 0e5b74deff69312063e9f71d3b62f1f806b29526 (diff) | |
download | system_core-a73ed22cb7d2fec0b330401b764fa8c9b934d0da.tar.gz system_core-a73ed22cb7d2fec0b330401b764fa8c9b934d0da.tar.bz2 system_core-a73ed22cb7d2fec0b330401b764fa8c9b934d0da.zip |
init: add MountHandler property handler
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
Diffstat (limited to 'init/mount_handler.h')
-rw-r--r-- | init/mount_handler.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/init/mount_handler.h b/init/mount_handler.h new file mode 100644 index 000000000..e524a74ae --- /dev/null +++ b/init/mount_handler.h @@ -0,0 +1,59 @@ +/* + * 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 |