Merge pull request #31705 from YHNdnzj/quotacheck-followup
Some follow-ups for quotacheck
This commit is contained in:
+20
-13
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ ConditionPathExists={{QUOTACHECK}}
|
||||
ConditionPathExists=!/etc/initrd-release
|
||||
|
||||
DefaultDependencies=no
|
||||
BindsTo=%i.mount
|
||||
After=%i.mount
|
||||
Before=shutdown.target
|
||||
Conflicts=shutdown.target
|
||||
|
||||
Reference in New Issue
Block a user