mirror of
https://github.com/systemd/systemd.git
synced 2025-03-14 04:58:28 +03:00
remount-fs: split-out remount_by_fstab()
No functional change, just refactoring and preparation for later commits.
This commit is contained in:
parent
b564224b37
commit
1be6f21320
@ -69,13 +69,45 @@ static int do_remount(const char *path, bool force_rw, Hashmap **pids) {
|
||||
return track_pid(pids, path, pid);
|
||||
}
|
||||
|
||||
static int run(int argc, char *argv[]) {
|
||||
static int remount_by_fstab(Hashmap **ret_pids) {
|
||||
_cleanup_hashmap_free_free_ Hashmap *pids = NULL;
|
||||
_cleanup_endmntent_ FILE *f = NULL;
|
||||
bool has_root = false;
|
||||
struct mntent* me;
|
||||
int r;
|
||||
|
||||
assert(ret_pids);
|
||||
|
||||
f = setmntent(fstab_path(), "re");
|
||||
if (!f) {
|
||||
if (errno != ENOENT)
|
||||
return log_error_errno(errno, "Failed to open %s: %m", fstab_path());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
while ((me = getmntent(f))) {
|
||||
/* Remount the root fs, /usr, and all API VFSs */
|
||||
if (!mount_point_is_api(me->mnt_dir) &&
|
||||
!PATH_IN_SET(me->mnt_dir, "/", "/usr"))
|
||||
continue;
|
||||
|
||||
if (path_equal(me->mnt_dir, "/"))
|
||||
has_root = true;
|
||||
|
||||
r = do_remount(me->mnt_dir, false, &pids);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
*ret_pids = TAKE_PTR(pids);
|
||||
return has_root;
|
||||
}
|
||||
|
||||
static int run(int argc, char *argv[]) {
|
||||
_cleanup_hashmap_free_free_ Hashmap *pids = NULL;
|
||||
int r;
|
||||
|
||||
log_setup();
|
||||
|
||||
if (argc > 1)
|
||||
@ -84,26 +116,10 @@ static int run(int argc, char *argv[]) {
|
||||
|
||||
umask(0022);
|
||||
|
||||
f = setmntent(fstab_path(), "re");
|
||||
if (!f) {
|
||||
if (errno != ENOENT)
|
||||
return log_error_errno(errno, "Failed to open %s: %m", fstab_path());
|
||||
} else
|
||||
while ((me = getmntent(f))) {
|
||||
/* Remount the root fs, /usr, and all API VFSs */
|
||||
if (!mount_point_is_api(me->mnt_dir) &&
|
||||
!PATH_IN_SET(me->mnt_dir, "/", "/usr"))
|
||||
continue;
|
||||
|
||||
if (path_equal(me->mnt_dir, "/"))
|
||||
has_root = true;
|
||||
|
||||
r = do_remount(me->mnt_dir, false, &pids);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (!has_root) {
|
||||
r = remount_by_fstab(&pids);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0) {
|
||||
/* The $SYSTEMD_REMOUNT_ROOT_RW environment variable is set by systemd-gpt-auto-generator to tell us
|
||||
* whether to remount things. We honour it only if there's no explicit line in /etc/fstab configured
|
||||
* which takes precedence. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user