Merge pull request #31705 from YHNdnzj/quotacheck-followup

Some follow-ups for quotacheck
This commit is contained in:
Luca Boccassi
2024-03-10 19:58:01 +00:00
committed by GitHub
3 changed files with 23 additions and 15 deletions
+20 -13
View File
@@ -12,11 +12,15 @@
#include "proc-cmdline.h"
#include "process-util.h"
#include "signal-util.h"
#include "static-destruct.h"
#include "string-util.h"
static char *arg_path = NULL;
static bool arg_skip = false;
static bool arg_force = false;
STATIC_DESTRUCTOR_REGISTER(arg_path, freep);
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
if (streq(key, "quotacheck.mode")) {
@@ -31,12 +35,12 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
else if (streq(value, "skip"))
arg_skip = true;
else
log_warning("Invalid quotacheck.mode= parameter '%s'. Ignoring.", value);
log_warning("Invalid quotacheck.mode= value, ignoring: %s", value);
}
#if HAVE_SYSV_COMPAT
else if (streq(key, "forcequotacheck") && !value) {
log_warning("Please use 'quotacheck.mode=force' rather than 'forcequotacheck' on the kernel command line.");
log_warning("Please use 'quotacheck.mode=force' rather than 'forcequotacheck' on the kernel command line. Proceeding anyway.");
arg_force = true;
}
#endif
@@ -48,7 +52,7 @@ static void test_files(void) {
#if HAVE_SYSV_COMPAT
if (access("/forcequotacheck", F_OK) >= 0) {
log_error("Please pass 'quotacheck.mode=force' on the kernel command line rather than creating /forcequotacheck on the root file system.");
log_error("Please pass 'quotacheck.mode=force' on the kernel command line rather than creating /forcequotacheck on the root file system. Proceeding anyway.");
arg_force = true;
}
#endif
@@ -56,8 +60,6 @@ static void test_files(void) {
static int run(int argc, char *argv[]) {
int r;
_cleanup_free_ char *fspath = NULL;
bool quota_check_all = false;
log_setup();
@@ -77,26 +79,31 @@ static int run(int argc, char *argv[]) {
if (arg_skip)
return 0;
if (access("/run/systemd/quotacheck", F_OK) < 0)
/* This is created by systemd-fsck when fsck detected and corrected errors. In normal
* operations quotacheck is not needed. */
if (access("/run/systemd/quotacheck", F_OK) < 0) {
if (errno != ENOENT)
log_warning_errno(errno,
"Failed to check whether /run/systemd/quotacheck exists, ignoring: %m");
return 0;
}
}
if (argc == 2) {
fspath = strdup(argv[1]);
if (!fspath)
arg_path = strdup(argv[1]);
if (!arg_path)
return log_oom();
} else
quota_check_all = true;
}
r = safe_fork("(quotacheck)", FORK_RESET_SIGNALS|FORK_DEATHSIG_SIGTERM|FORK_RLIMIT_NOFILE_SAFE|FORK_WAIT|FORK_LOG, NULL);
if (r < 0)
return r;
if (r == 0) {
const char *cmdline[] = {
QUOTACHECK,
quota_check_all ? "-anug" : "-nug",
fspath,
arg_path ? "-nug" : "-anug", /* Check all file systems if path isn't specified */
arg_path,
NULL
};
+2 -2
View File
@@ -14,9 +14,9 @@ Documentation=man:quotaon(8)
ConditionPathExists={{QUOTAON}}
ConditionPathExists=!/etc/initrd-release
After=%i.mount
After=systemd-quotacheck@%i.service
DefaultDependencies=no
BindsTo=%i.mount
After=systemd-quotacheck@%i.service %i.mount
Before=shutdown.target
Conflicts=shutdown.target
+1
View File
@@ -15,6 +15,7 @@ ConditionPathExists={{QUOTACHECK}}
ConditionPathExists=!/etc/initrd-release
DefaultDependencies=no
BindsTo=%i.mount
After=%i.mount
Before=shutdown.target
Conflicts=shutdown.target