chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: fix cgroups-agent match for kdbus
[elogind.git]
/
src
/
core
/
mount.c
diff --git
a/src/core/mount.c
b/src/core/mount.c
index 6bd6914509f8b290c82a10799739a8741988cf6b..1251c94608d6a678fc1f04a33a53a00a4f75363a 100644
(file)
--- a/
src/core/mount.c
+++ b/
src/core/mount.c
@@
-21,7
+21,6
@@
#include <errno.h>
#include <stdio.h>
#include <errno.h>
#include <stdio.h>
-#include <mntent.h>
#include <sys/epoll.h>
#include <signal.h>
#include <libmount.h>
#include <sys/epoll.h>
#include <signal.h>
#include <libmount.h>
@@
-30,8
+29,6
@@
#include "manager.h"
#include "unit.h"
#include "mount.h"
#include "manager.h"
#include "unit.h"
#include "mount.h"
-#include "load-fragment.h"
-#include "load-dropin.h"
#include "log.h"
#include "sd-messages.h"
#include "strv.h"
#include "log.h"
#include "sd-messages.h"
#include "strv.h"
@@
-41,9
+38,7
@@
#include "unit-name.h"
#include "dbus-mount.h"
#include "special.h"
#include "unit-name.h"
#include "dbus-mount.h"
#include "special.h"
-#include "bus-common-errors.h"
#include "exit-status.h"
#include "exit-status.h"
-#include "def.h"
#include "fstab-util.h"
#define RETRY_UMOUNT_MAX 32
#include "fstab-util.h"
#define RETRY_UMOUNT_MAX 32
@@
-300,7
+295,7
@@
static int mount_add_device_links(Mount *m) {
assert(m);
assert(m);
- p = get_mount_parameters
_fragment
(m);
+ p = get_mount_parameters(m);
if (!p)
return 0;
if (!p)
return 0;
@@
-617,7
+612,7
@@
static void mount_set_state(Mount *m, MountState state) {
m->reload_result = MOUNT_SUCCESS;
}
m->reload_result = MOUNT_SUCCESS;
}
-static int mount_coldplug(Unit *u) {
+static int mount_coldplug(Unit *u
, Hashmap *deferred_work
) {
Mount *m = MOUNT(u);
MountState new_state = MOUNT_DEAD;
int r;
Mount *m = MOUNT(u);
MountState new_state = MOUNT_DEAD;
int r;
@@
-711,7
+706,11
@@
static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
assert(c);
assert(_pid);
assert(c);
assert(_pid);
- unit_realize_cgroup(UNIT(m));
+ (void) unit_realize_cgroup(UNIT(m));
+ if (m->reset_cpu_usage) {
+ (void) unit_reset_cpu_usage(UNIT(m));
+ m->reset_cpu_usage = false;
+ }
r = unit_setup_exec_runtime(UNIT(m));
if (r < 0)
r = unit_setup_exec_runtime(UNIT(m));
if (r < 0)
@@
-976,7
+975,7
@@
static void mount_enter_remounting(Mount *m) {
const char *o;
if (m->parameters_fragment.options)
const char *o;
if (m->parameters_fragment.options)
- o = str
append
a("remount,", m->parameters_fragment.options);
+ o = str
join
a("remount,", m->parameters_fragment.options);
else
o = "remount";
else
o = "remount";
@@
-1035,6
+1034,7
@@
static int mount_start(Unit *u) {
m->result = MOUNT_SUCCESS;
m->reload_result = MOUNT_SUCCESS;
m->result = MOUNT_SUCCESS;
m->reload_result = MOUNT_SUCCESS;
+ m->reset_cpu_usage = true;
mount_enter_mounting(m);
return 1;
mount_enter_mounting(m);
return 1;
@@
-1391,7
+1391,7
@@
static int mount_dispatch_timer(sd_event_source *source, usec_t usec, void *user
return 0;
}
return 0;
}
-static int mount_
add_one
(
+static int mount_
setup_unit
(
Manager *m,
const char *what,
const char *where,
Manager *m,
const char *what,
const char *where,
@@
-1434,7
+1434,7
@@
static int mount_add_one(
u = unit_new(m, sizeof(Mount));
if (!u)
u = unit_new(m, sizeof(Mount));
if (!u)
- return
-ENOMEM
;
+ return
log_oom()
;
r = unit_add_name(u, e);
if (r < 0)
r = unit_add_name(u, e);
if (r < 0)
@@
-1547,6
+1547,8
@@
static int mount_add_one(
return 0;
fail:
return 0;
fail:
+ log_warning_errno(r, "Failed to set up mount unit: %m");
+
if (delete && u)
unit_free(u);
if (delete && u)
unit_free(u);
@@
-1554,33
+1556,36
@@
fail:
}
static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
}
static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
- _cleanup_(mnt_free_tablep) struct libmnt_table *tb = NULL;
- _cleanup_(mnt_free_iterp) struct libmnt_iter *itr = NULL;
- struct libmnt_fs *fs;
+ _cleanup_(mnt_free_tablep) struct libmnt_table *t = NULL;
+ _cleanup_(mnt_free_iterp) struct libmnt_iter *i = NULL;
int r = 0;
assert(m);
int r = 0;
assert(m);
- tb = mnt_new_table();
- itr = mnt_new_iter(MNT_ITER_FORWARD);
- if (!tb || !itr)
+ t = mnt_new_table();
+ if (!t)
+ return log_oom();
+
+ i = mnt_new_iter(MNT_ITER_FORWARD);
+ if (!i)
return log_oom();
return log_oom();
- r = mnt_table_parse_mtab(t
b
, NULL);
+ r = mnt_table_parse_mtab(t, NULL);
if (r < 0)
if (r < 0)
- return
r
;
+ return
log_error_errno(r, "Failed to parse /proc/self/mountinfo: %m")
;
r = 0;
for (;;) {
const char *device, *path, *options, *fstype;
_cleanup_free_ const char *d = NULL, *p = NULL;
r = 0;
for (;;) {
const char *device, *path, *options, *fstype;
_cleanup_free_ const char *d = NULL, *p = NULL;
+ struct libmnt_fs *fs;
int k;
int k;
- k = mnt_table_next_fs(t
b, itr
, &fs);
+ k = mnt_table_next_fs(t
, i
, &fs);
if (k == 1)
break;
if (k == 1)
break;
-
else
if (k < 0)
- return log_error_errno(k, "Failed to get next entry from /
etc/fstab
: %m");
+ if (k < 0)
+ return log_error_errno(k, "Failed to get next entry from /
proc/self/mountinfo
: %m");
device = mnt_fs_get_source(fs);
path = mnt_fs_get_target(fs);
device = mnt_fs_get_source(fs);
path = mnt_fs_get_target(fs);
@@
-1588,11
+1593,16
@@
static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
fstype = mnt_fs_get_fstype(fs);
d = cunescape(device);
fstype = mnt_fs_get_fstype(fs);
d = cunescape(device);
+ if (!d)
+ return log_oom();
+
p = cunescape(path);
p = cunescape(path);
- if (!
d || !
p)
+ if (!p)
return log_oom();
return log_oom();
- k = mount_add_one(m, d, p, options, fstype, set_flags);
+ (void) device_found_node(m, d, true, DEVICE_FOUND_MOUNT, set_flags);
+
+ k = mount_setup_unit(m, d, p, options, fstype, set_flags);
if (r == 0 && k < 0)
r = k;
}
if (r == 0 && k < 0)
r = k;
}
@@
-1736,8
+1746,6
@@
static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
r = mount_load_proc_self_mountinfo(m, true);
if (r < 0) {
r = mount_load_proc_self_mountinfo(m, true);
if (r < 0) {
- log_error_errno(r, "Failed to reread /proc/self/mountinfo: %m");
-
/* Reset flags, just in case, for later calls */
LIST_FOREACH(units_by_type, u, m->units_by_type[UNIT_MOUNT]) {
Mount *mount = MOUNT(u);
/* Reset flags, just in case, for later calls */
LIST_FOREACH(units_by_type, u, m->units_by_type[UNIT_MOUNT]) {
Mount *mount = MOUNT(u);
@@
-1770,6
+1778,10
@@
static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
break;
}
break;
}
+ if (mount->parameters_proc_self_mountinfo.what)
+ (void) device_found_node(m, mount->parameters_proc_self_mountinfo.what, false, DEVICE_FOUND_MOUNT, true);
+
+
} else if (mount->just_mounted || mount->just_changed) {
/* New or changed mount entry */
} else if (mount->just_mounted || mount->just_changed) {
/* New or changed mount entry */