Resolves: RHEL-155454, RHEL-155805, RHEL-155396, RHEL-158303, RHEL-158354, RHEL-143728, RHEL-168098, RHEL-143028
76 lines
3.2 KiB
Diff
76 lines
3.2 KiB
Diff
From 75f712d4fb8d5b05f28eda98e9ae44512ba6d7f8 Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Tue, 14 Jan 2025 16:51:49 +0100
|
|
Subject: [PATCH] pid1: enable usrquota support on /dev/shm
|
|
|
|
(cherry picked from commit 8f5131fb9e7979022521d685e69b6419f0884677)
|
|
|
|
Related: RHEL-143028
|
|
---
|
|
src/shared/mount-setup.c | 33 +++++++++++++++++++++++++--------
|
|
1 file changed, 25 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c
|
|
index 73be3b5dce..db8c2b61d2 100644
|
|
--- a/src/shared/mount-setup.c
|
|
+++ b/src/shared/mount-setup.c
|
|
@@ -34,11 +34,12 @@
|
|
#include "virt.h"
|
|
|
|
typedef enum MountMode {
|
|
- MNT_NONE = 0,
|
|
- MNT_FATAL = 1 << 0,
|
|
- MNT_IN_CONTAINER = 1 << 1,
|
|
- MNT_CHECK_WRITABLE = 1 << 2,
|
|
- MNT_FOLLOW_SYMLINK = 1 << 3,
|
|
+ MNT_NONE = 0,
|
|
+ MNT_FATAL = 1 << 0,
|
|
+ MNT_IN_CONTAINER = 1 << 1,
|
|
+ MNT_CHECK_WRITABLE = 1 << 2,
|
|
+ MNT_FOLLOW_SYMLINK = 1 << 3,
|
|
+ MNT_USRQUOTA_GRACEFUL = 1 << 4,
|
|
} MountMode;
|
|
|
|
typedef struct MountPoint {
|
|
@@ -92,7 +93,7 @@ static const MountPoint mount_table[] = {
|
|
mac_smack_use, MNT_FATAL },
|
|
#endif
|
|
{ "tmpfs", "/dev/shm", "tmpfs", "mode=01777", MS_NOSUID|MS_NODEV|MS_STRICTATIME,
|
|
- NULL, MNT_FATAL|MNT_IN_CONTAINER },
|
|
+ NULL, MNT_FATAL|MNT_IN_CONTAINER|MNT_USRQUOTA_GRACEFUL },
|
|
{ "devpts", "/dev/pts", "devpts", "mode=" STRINGIFY(TTY_MODE) ",gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC,
|
|
NULL, MNT_IN_CONTAINER },
|
|
#if ENABLE_SMACK
|
|
@@ -189,13 +190,29 @@ static int mount_one(const MountPoint *p, bool relabel) {
|
|
else
|
|
(void) mkdir_p(p->where, 0755);
|
|
|
|
+ _cleanup_free_ char *extend_options = NULL;
|
|
+ const char *o = p->options;
|
|
+ if (FLAGS_SET(p->mode, MNT_USRQUOTA_GRACEFUL)) {
|
|
+ r = mount_option_supported(p->type, "usrquota", /* value= */ NULL);
|
|
+ if (r < 0)
|
|
+ log_warning_errno(r, "Unable to determine whether %s supports 'usrquota' mount option, assuming not: %m", p->type);
|
|
+ else if (r == 0)
|
|
+ log_info("Not enabling 'usrquota' on '%s' as kernel lacks support for it.", p->where);
|
|
+ else {
|
|
+ if (!strextend_with_separator(&extend_options, ",", p->options ?: POINTER_MAX, "usrquota"))
|
|
+ return log_oom();
|
|
+
|
|
+ o = extend_options;
|
|
+ }
|
|
+ }
|
|
+
|
|
log_debug("Mounting %s to %s of type %s with options %s.",
|
|
p->what,
|
|
p->where,
|
|
p->type,
|
|
- strna(p->options));
|
|
+ strna(o));
|
|
|
|
- r = mount_verbose_full(priority, p->what, p->where, p->type, p->flags, p->options, FLAGS_SET(p->mode, MNT_FOLLOW_SYMLINK));
|
|
+ r = mount_verbose_full(priority, p->what, p->where, p->type, p->flags, o, FLAGS_SET(p->mode, MNT_FOLLOW_SYMLINK));
|
|
if (r < 0)
|
|
return FLAGS_SET(p->mode, MNT_FATAL) ? r : 0;
|
|
|