From: Lennart Poettering Date: Sat, 31 May 2025 05:58:30 +0000 (+0200) Subject: mount-util: avoid unnecessary mount_setattr() call in make_fsmount() X-Git-Tag: v258-rc1~432 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=249752d1ecd0f8e160d6e8633f71771b51db5a84;p=thirdparty%2Fsystemd.git mount-util: avoid unnecessary mount_setattr() call in make_fsmount() If .attr_set is zero (and .att_clr, .propagation too), then there's no point in calling mount_setattr(). Fixes: #37062 Note that this optimization is not precisely load-bearing anymore, since 3cc23a2c2345eb188551565349c89ec1fa8f650f got merged which removes the only caller of make_fsmount() that might trigger it. But it's worth fixing generic code anyway, in case it gets used like this later again. --- diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c index 9a1cc31fac6..8679db70573 100644 --- a/src/shared/mount-util.c +++ b/src/shared/mount-util.c @@ -1854,11 +1854,11 @@ int make_fsmount( if (mnt_fd < 0) return log_full_errno(error_log_level, errno, "Failed to create mount fd for \"%s\" (\"%s\"): %m", what, type); - if (mount_setattr(mnt_fd, "", AT_EMPTY_PATH|AT_RECURSIVE, - &(struct mount_attr) { - .attr_set = ms_flags_to_mount_attr(f) | (userns_fd >= 0 ? MOUNT_ATTR_IDMAP : 0), - .userns_fd = userns_fd, - }, MOUNT_ATTR_SIZE_VER0) < 0) + struct mount_attr ma = { + .attr_set = ms_flags_to_mount_attr(f) | (userns_fd >= 0 ? MOUNT_ATTR_IDMAP : 0), + .userns_fd = userns_fd, + }; + if (ma.attr_set != 0 && mount_setattr(mnt_fd, "", AT_EMPTY_PATH|AT_RECURSIVE, &ma, MOUNT_ATTR_SIZE_VER0) < 0) return log_full_errno(error_log_level, errno, "Failed to set mount flags for \"%s\" (\"%s\"): %m",