chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mount: fix up wording in the comment
[elogind.git]
/
src
/
core
/
swap.c
diff --git
a/src/core/swap.c
b/src/core/swap.c
index 1ef672f7e9e7a3ce565b57ce9597bd7ff60d3ff3..6b1bdb5c1e49d283e43f8903becbb32c23d5e984 100644
(file)
--- a/
src/core/swap.c
+++ b/
src/core/swap.c
@@
-20,24
+20,17
@@
***/
#include <errno.h>
***/
#include <errno.h>
-#include <limits.h>
#include <unistd.h>
#include <unistd.h>
-#include <fcntl.h>
#include <sys/epoll.h>
#include <sys/stat.h>
#include <sys/epoll.h>
#include <sys/stat.h>
-#include <sys/swap.h>
#include <libudev.h>
#include "unit.h"
#include "swap.h"
#include <libudev.h>
#include "unit.h"
#include "swap.h"
-#include "load-fragment.h"
-#include "load-dropin.h"
#include "unit-name.h"
#include "dbus-swap.h"
#include "special.h"
#include "unit-name.h"
#include "dbus-swap.h"
#include "special.h"
-#include "bus-common-errors.h"
#include "exit-status.h"
#include "exit-status.h"
-#include "def.h"
#include "path-util.h"
#include "virt.h"
#include "udev-util.h"
#include "path-util.h"
#include "virt.h"
#include "udev-util.h"
@@
-338,7
+331,7
@@
static int swap_load(Unit *u) {
return swap_verify(s);
}
return swap_verify(s);
}
-static int swap_
add_one
(
+static int swap_
setup_unit
(
Manager *m,
const char *what,
const char *what_proc_swaps,
Manager *m,
const char *what,
const char *what_proc_swaps,
@@
-363,8
+356,10
@@
static int swap_add_one(
if (u &&
SWAP(u)->from_proc_swaps &&
if (u &&
SWAP(u)->from_proc_swaps &&
- !path_equal(SWAP(u)->parameters_proc_swaps.what, what_proc_swaps))
+ !path_equal(SWAP(u)->parameters_proc_swaps.what, what_proc_swaps)) {
+ log_error("Swap %s appeared twice with different device paths %s and %s", e, SWAP(u)->parameters_proc_swaps.what, what_proc_swaps);
return -EEXIST;
return -EEXIST;
+ }
if (!u) {
delete = true;
if (!u) {
delete = true;
@@
-379,7
+374,7
@@
static int swap_add_one(
SWAP(u)->what = strdup(what);
if (!SWAP(u)->what) {
SWAP(u)->what = strdup(what);
if (!SWAP(u)->what) {
- r =
log_oom()
;
+ r =
-ENOMEM
;
goto fail;
}
goto fail;
}
@@
-407,7
+402,6
@@
static int swap_add_one(
p->priority = priority;
unit_add_to_dbus_queue(u);
p->priority = priority;
unit_add_to_dbus_queue(u);
-
return 0;
fail:
return 0;
fail:
@@
-419,7
+413,7
@@
fail:
return r;
}
return r;
}
-static int swap_process_new
_swap
(Manager *m, const char *device, int prio, bool set_flags) {
+static int swap_process_new(Manager *m, const char *device, int prio, bool set_flags) {
_cleanup_udev_device_unref_ struct udev_device *d = NULL;
struct udev_list_entry *item = NULL, *first = NULL;
const char *dn;
_cleanup_udev_device_unref_ struct udev_device *d = NULL;
struct udev_list_entry *item = NULL, *first = NULL;
const char *dn;
@@
-428,7
+422,7
@@
static int swap_process_new_swap(Manager *m, const char *device, int prio, bool
assert(m);
assert(m);
- r = swap_
add_one
(m, device, device, prio, set_flags);
+ r = swap_
setup_unit
(m, device, device, prio, set_flags);
if (r < 0)
return r;
if (r < 0)
return r;
@@
-444,7
+438,7
@@
static int swap_process_new_swap(Manager *m, const char *device, int prio, bool
/* Add the main device node */
dn = udev_device_get_devnode(d);
if (dn && !streq(dn, device))
/* Add the main device node */
dn = udev_device_get_devnode(d);
if (dn && !streq(dn, device))
- swap_
add_one
(m, dn, device, prio, set_flags);
+ swap_
setup_unit
(m, dn, device, prio, set_flags);
/* Add additional units for all symlinks */
first = udev_device_get_devlinks_list_entry(d);
/* Add additional units for all symlinks */
first = udev_device_get_devlinks_list_entry(d);
@@
-465,7
+459,7
@@
static int swap_process_new_swap(Manager *m, const char *device, int prio, bool
st.st_rdev != udev_device_get_devnum(d))
continue;
st.st_rdev != udev_device_get_devnum(d))
continue;
- swap_
add_one
(m, p, device, prio, set_flags);
+ swap_
setup_unit
(m, p, device, prio, set_flags);
}
return r;
}
return r;
@@
-512,7
+506,7
@@
static void swap_set_state(Swap *s, SwapState state) {
job_add_to_run_queue(UNIT(other)->job);
}
job_add_to_run_queue(UNIT(other)->job);
}
-static int swap_coldplug(Unit *u) {
+static int swap_coldplug(Unit *u
, Hashmap *deferred_work
) {
Swap *s = SWAP(u);
SwapState new_state = SWAP_DEAD;
int r;
Swap *s = SWAP(u);
SwapState new_state = SWAP_DEAD;
int r;
@@
-610,7
+604,11
@@
static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
assert(c);
assert(_pid);
assert(c);
assert(_pid);
- unit_realize_cgroup(UNIT(s));
+ (void) unit_realize_cgroup(UNIT(s));
+ if (s->reset_cpu_usage) {
+ (void) unit_reset_cpu_usage(UNIT(s));
+ s->reset_cpu_usage = false;
+ }
r = unit_setup_exec_runtime(UNIT(s));
if (r < 0)
r = unit_setup_exec_runtime(UNIT(s));
if (r < 0)
@@
-726,8
+724,12
@@
static void swap_enter_activating(Swap *s) {
NULL, &discard, NULL);
priority = s->parameters_fragment.priority;
NULL, &discard, NULL);
priority = s->parameters_fragment.priority;
- if (priority < 0)
- fstab_find_pri(s->parameters_fragment.options, &priority);
+ if (priority < 0) {
+ r = fstab_find_pri(s->parameters_fragment.options, &priority);
+ if (r < 0)
+ log_notice_errno(r, "Failed to parse swap priority \"%s\", ignoring: %m",
+ s->parameters_fragment.options);
+ }
}
r = exec_command_set(s->control_command, "/sbin/swapon", NULL);
}
r = exec_command_set(s->control_command, "/sbin/swapon", NULL);
@@
-749,7
+751,7
@@
static void swap_enter_activating(Swap *s) {
if (streq(discard, "all"))
discard_arg = "--discard";
else
if (streq(discard, "all"))
discard_arg = "--discard";
else
- discard_arg = str
append
a("--discard=", discard);
+ discard_arg = str
join
a("--discard=", discard);
r = exec_command_append(s->control_command, discard_arg, NULL);
if (r < 0)
r = exec_command_append(s->control_command, discard_arg, NULL);
if (r < 0)
@@
-836,8
+838,10
@@
static int swap_start(Unit *u) {
return -EAGAIN;
s->result = SWAP_SUCCESS;
return -EAGAIN;
s->result = SWAP_SUCCESS;
+ s->reset_cpu_usage = true;
+
swap_enter_activating(s);
swap_enter_activating(s);
- return
0
;
+ return
1
;
}
static int swap_stop(Unit *u) {
}
static int swap_stop(Unit *u) {
@@
-860,7
+864,7
@@
static int swap_stop(Unit *u) {
return -EPERM;
swap_enter_deactivating(s);
return -EPERM;
swap_enter_deactivating(s);
- return
0
;
+ return
1
;
}
static int swap_serialize(Unit *u, FILE *f, FDSet *fds) {
}
static int swap_serialize(Unit *u, FILE *f, FDSet *fds) {
@@
-1091,15
+1095,17
@@
static int swap_load_proc_swaps(Manager *m, bool set_flags) {
if (k == EOF)
break;
if (k == EOF)
break;
- log_warning("Failed to parse /proc/swaps:%u", i);
+ log_warning("Failed to parse /proc/swaps:%u
.
", i);
continue;
}
d = cunescape(dev);
if (!d)
continue;
}
d = cunescape(dev);
if (!d)
- return -ENOMEM;
+ return log_oom();
+
+ device_found_node(m, d, true, DEVICE_FOUND_SWAP, set_flags);
- k = swap_process_new
_swap
(m, d, prio, set_flags);
+ k = swap_process_new(m, d, prio, set_flags);
if (k < 0)
r = k;
}
if (k < 0)
r = k;
}
@@
-1151,6
+1157,9
@@
static int swap_dispatch_io(sd_event_source *source, int fd, uint32_t revents, v
break;
}
break;
}
+ if (swap->what)
+ device_found_node(m, swap->what, false, DEVICE_FOUND_SWAP, true);
+
} else if (swap->just_activated) {
/* New swap entry */
} else if (swap->just_activated) {
/* New swap entry */
@@
-1298,7
+1307,7
@@
fail:
return r;
}
return r;
}
-int swap_process_
new_device
(Manager *m, struct udev_device *dev) {
+int swap_process_
device_new
(Manager *m, struct udev_device *dev) {
struct udev_list_entry *item = NULL, *first = NULL;
_cleanup_free_ char *e = NULL;
const char *dn;
struct udev_list_entry *item = NULL, *first = NULL;
_cleanup_free_ char *e = NULL;
const char *dn;
@@
-1341,7
+1350,7
@@
int swap_process_new_device(Manager *m, struct udev_device *dev) {
return r;
}
return r;
}
-int swap_process_
removed_devic
e(Manager *m, struct udev_device *dev) {
+int swap_process_
device_remov
e(Manager *m, struct udev_device *dev) {
const char *dn;
int r = 0;
Swap *s;
const char *dn;
int r = 0;
Swap *s;