From: Lennart Poettering Date: Tue, 14 Jan 2025 15:51:49 +0000 (+0100) Subject: pid1: enable usrquota support on /dev/shm X-Git-Tag: v258-rc1~1560^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8f5131fb9e7979022521d685e69b6419f0884677;p=thirdparty%2Fsystemd.git pid1: enable usrquota support on /dev/shm --- diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c index 73be3b5dce7..db8c2b61d2a 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;