1
0
mirror of https://github.com/systemd/systemd synced 2025-11-14 22:34:46 +01:00

Compare commits

..

No commits in common. "d8e38d4aaac23cb27cc7e0f410449c3a6034db4f" and "c3e80f8f2bbd2b79350684f52638cedec00eb8ad" have entirely different histories.

3 changed files with 13 additions and 24 deletions

View File

@ -423,8 +423,6 @@ static int session_load_leader(Session *s, uint64_t pidfdid) {
return 0; return 0;
r = pidref_set_pid(&pidref, s->deserialized_pid); r = pidref_set_pid(&pidref, s->deserialized_pid);
if (r == -ESRCH)
return log_warning_errno(r, "Leader of session '%s' is gone while deserializing.", s->id);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to deserialize leader PID for session '%s': %m", s->id); return log_error_errno(r, "Failed to deserialize leader PID for session '%s': %m", s->id);
if (pidref.fd < 0) if (pidref.fd < 0)
@ -439,8 +437,8 @@ static int session_load_leader(Session *s, uint64_t pidfdid) {
pidref.pid); pidref.pid);
if (pidref.fd_id != pidfdid) if (pidref.fd_id != pidfdid)
return log_warning_errno(SYNTHETIC_ERRNO(ESRCH), return log_error_errno(SYNTHETIC_ERRNO(ESRCH),
"Deserialized pidfd id for process " PID_FMT " (%" PRIu64 ") doesn't match the current one (%" PRIu64 "). PID recycled while deserializing?", "Deserialized pidfd id for process " PID_FMT " (%" PRIu64 ") doesn't match with the current one (%" PRIu64 "), refusing.",
pidref.pid, pidfdid, pidref.fd_id); pidref.pid, pidfdid, pidref.fd_id);
} }

View File

@ -441,13 +441,13 @@ static int deliver_session_device_fd(Session *s, const char *fdname, int fd, dev
return 0; return 0;
} }
static int deliver_session_leader_fd_consume(Session *s, const char *fdname, int fd_consume) { static int deliver_session_leader_fd_consume(Session *s, const char *fdname, int fd) {
_cleanup_close_ int fd = ASSERT_FD(fd_consume);
_cleanup_(pidref_done) PidRef leader_fdstore = PIDREF_NULL; _cleanup_(pidref_done) PidRef leader_fdstore = PIDREF_NULL;
int r; int r;
assert(s); assert(s);
assert(fdname); assert(fdname);
assert(fd >= 0);
/* Already deserialized via pidfd id? */ /* Already deserialized via pidfd id? */
if (pidref_is_set(&s->leader)) { if (pidref_is_set(&s->leader)) {
@ -473,13 +473,12 @@ static int deliver_session_leader_fd_consume(Session *s, const char *fdname, int
r = pidref_set_pidfd_take(&leader_fdstore, fd); r = pidref_set_pidfd_take(&leader_fdstore, fd);
if (r < 0) { if (r < 0) {
log_warning_errno(r, if (r == -ESRCH)
r == -ESRCH ? "Leader of session '%s' is gone while deserializing." log_debug_errno(r, "Leader of session '%s' is gone while deserializing.", s->id);
: "Failed to create reference to leader of session '%s': %m", else
s->id); log_warning_errno(r, "Failed to create reference to leader of session '%s': %m", s->id);
goto fail_close; goto fail_close;
} }
TAKE_FD(fd);
if (leader_fdstore.pid != s->deserialized_pid) if (leader_fdstore.pid != s->deserialized_pid)
log_warning("Leader from pidfd (" PID_FMT ") doesn't match with LEADER=" PID_FMT " for session '%s', proceeding anyway.", log_warning("Leader from pidfd (" PID_FMT ") doesn't match with LEADER=" PID_FMT " for session '%s', proceeding anyway.",
@ -492,7 +491,7 @@ static int deliver_session_leader_fd_consume(Session *s, const char *fdname, int
return 0; return 0;
fail_close: fail_close:
close_and_notify_warn(TAKE_FD(fd), fdname); close_and_notify_warn(fd, fdname);
return r; return r;
} }
@ -566,7 +565,7 @@ static int manager_enumerate_sessions(Manager *m) {
session_add_to_gc_queue(s); session_add_to_gc_queue(s);
k = session_load(s); k = session_load(s);
if (k < 0 && k != -ESRCH) if (k < 0)
RET_GATHER(r, log_warning_errno(k, "Failed to deserialize session '%s', ignoring: %m", s->id)); RET_GATHER(r, log_warning_errno(k, "Failed to deserialize session '%s', ignoring: %m", s->id));
} }

View File

@ -259,16 +259,8 @@ static int reread_partition_table_full(sd_device *dev, int fd, RereadPartitionTa
if (lock_fd < 0) if (lock_fd < 0)
return log_device_debug_errno(dev, lock_fd, "Failed top open lock fd for block device '%s': %m", p); return log_device_debug_errno(dev, lock_fd, "Failed top open lock fd for block device '%s': %m", p);
if (flock(lock_fd, LOCK_EX|LOCK_NB) < 0) { if (flock(lock_fd, LOCK_EX|LOCK_NB) < 0)
r = log_device_debug_errno(dev, errno, "Failed to take BSD lock on block device '%s': %m", p); return log_device_debug_errno(dev, errno, "Failed to take BSD lock on block device '%s': %m", p);
if (r == -EBUSY && FLAGS_SET(flags, REREADPT_FORCE_UEVENT)) {
log_device_debug(dev, "Giving up rereading partition table of '%s'. Triggering change events for the device and its partitions.", p);
(void) trigger_partitions(dev, /* blkrrpart_success= */ false);
}
return r;
}
} }
r = blockdev_partscan_enabled(dev); r = blockdev_partscan_enabled(dev);