From: Yu Watanabe Date: Tue, 8 Aug 2023 16:57:16 +0000 (+0900) Subject: remount-fs: split-out remount_by_fstab() X-Git-Tag: v255-rc1~780^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1be6f21320de1992abf45d893bc23dc187b112df;p=thirdparty%2Fsystemd.git remount-fs: split-out remount_by_fstab() No functional change, just refactoring and preparation for later commits. --- diff --git a/src/remount-fs/remount-fs.c b/src/remount-fs/remount-fs.c index 4515592387b..25e661105b0 100644 --- a/src/remount-fs/remount-fs.c +++ b/src/remount-fs/remount-fs.c @@ -69,41 +69,57 @@ 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; - log_setup(); - - if (argc > 1) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "This program takes no arguments."); - - umask(0022); + 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()); - } 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; + return 0; + } - r = do_remount(me->mnt_dir, false, &pids); - if (r < 0) - return r; - } + 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 (!has_root) { + 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) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "This program takes no arguments."); + + umask(0022); + + 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. */