From: Christian Brauner <brauner@kernel.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Oleg Nesterov" <oleg@redhat.com>,
	"Amir Goldstein" <amir73il@gmail.com>,
	"Aleksa Sarai" <cyphar@cyphar.com>,
	"Yu Watanabe" <watanabe.yu+github@gmail.com>,
	"Josef Bacik" <josef@toxicpanda.com>,
	"Jeff Layton" <jlayton@kernel.org>,
	"Jann Horn" <jannh@google.com>,
	"Luca Boccassi" <luca.boccassi@gmail.com>,
	"Alexander Mikhalitsyn" <alexander@mihalicyn.com>,
	linux-kernel@vger.kernel.org,
	"Alexander Viro" <viro@zeniv.linux.org.uk>,
	"Jan Kara" <jack@suse.cz>,
	"Lennart Poettering" <lennart@poettering.net>,
	"Mike Yuan" <me@yhndnzj.com>,
	"Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>,
	"Christian Brauner" <brauner@kernel.org>
Subject: [PATCH 17/22] selftests/coredump: add debug logging to test helpers
Date: Tue, 28 Oct 2025 09:46:02 +0100	[thread overview]
Message-ID: <20251028-work-coredump-signal-v1-17-ca449b7b7aa0@kernel.org> (raw)
In-Reply-To: <20251028-work-coredump-signal-v1-0-ca449b7b7aa0@kernel.org>
so we can easily figure out why something failed.
Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 .../selftests/coredump/coredump_test_helpers.c     | 55 +++++++++++++++++-----
 1 file changed, 44 insertions(+), 11 deletions(-)
diff --git a/tools/testing/selftests/coredump/coredump_test_helpers.c b/tools/testing/selftests/coredump/coredump_test_helpers.c
index 116c797090a1..65deb3cfbe1b 100644
--- a/tools/testing/selftests/coredump/coredump_test_helpers.c
+++ b/tools/testing/selftests/coredump/coredump_test_helpers.c
@@ -131,17 +131,26 @@ int get_peer_pidfd(int fd)
 	int ret = getsockopt(fd, SOL_SOCKET, SO_PEERPIDFD, &fd_peer_pidfd,
 			     &fd_peer_pidfd_len);
 	if (ret < 0) {
-		fprintf(stderr, "%m - Failed to retrieve peer pidfd for coredump socket connection\n");
+		fprintf(stderr, "get_peer_pidfd: getsockopt(SO_PEERPIDFD) failed: %m\n");
 		return -1;
 	}
+	fprintf(stderr, "get_peer_pidfd: successfully retrieved pidfd %d\n", fd_peer_pidfd);
 	return fd_peer_pidfd;
 }
 
 bool get_pidfd_info(int fd_peer_pidfd, struct pidfd_info *info)
 {
+	int ret;
 	memset(info, 0, sizeof(*info));
 	info->mask = PIDFD_INFO_EXIT | PIDFD_INFO_COREDUMP | PIDFD_INFO_COREDUMP_SIGNAL;
-	return ioctl(fd_peer_pidfd, PIDFD_GET_INFO, info) == 0;
+	ret = ioctl(fd_peer_pidfd, PIDFD_GET_INFO, info);
+	if (ret < 0) {
+		fprintf(stderr, "get_pidfd_info: ioctl(PIDFD_GET_INFO) failed: %m\n");
+		return false;
+	}
+	fprintf(stderr, "get_pidfd_info: mask=0x%llx, coredump_mask=0x%x, coredump_signal=%d\n",
+		(unsigned long long)info->mask, info->coredump_mask, info->coredump_signal);
+	return true;
 }
 
 /* Protocol helper functions */
@@ -198,14 +207,23 @@ bool read_coredump_req(int fd, struct coredump_req *req)
 
 	/* Peek the size of the coredump request. */
 	ret = recv(fd, req, field_size, MSG_PEEK | MSG_WAITALL);
-	if (ret != field_size)
+	if (ret != field_size) {
+		fprintf(stderr, "read_coredump_req: peek failed (got %zd, expected %zu): %m\n",
+			ret, field_size);
 		return false;
+	}
 	kernel_size = req->size;
 
-	if (kernel_size < COREDUMP_ACK_SIZE_VER0)
+	if (kernel_size < COREDUMP_ACK_SIZE_VER0) {
+		fprintf(stderr, "read_coredump_req: kernel_size %zu < min %d\n",
+			kernel_size, COREDUMP_ACK_SIZE_VER0);
 		return false;
-	if (kernel_size >= PAGE_SIZE)
+	}
+	if (kernel_size >= PAGE_SIZE) {
+		fprintf(stderr, "read_coredump_req: kernel_size %zu >= PAGE_SIZE %d\n",
+			kernel_size, PAGE_SIZE);
 		return false;
+	}
 
 	/* Use the minimum of user and kernel size to read the full request. */
 	user_size = sizeof(struct coredump_req);
@@ -295,25 +313,35 @@ void process_coredump_worker(int fd_coredump, int fd_peer_pidfd, int fd_core_fil
 
 	/* Set socket to non-blocking mode for edge-triggered epoll */
 	flags = fcntl(fd_coredump, F_GETFL, 0);
-	if (flags < 0)
+	if (flags < 0) {
+		fprintf(stderr, "Worker: fcntl(F_GETFL) failed: %m\n");
 		goto out;
-	if (fcntl(fd_coredump, F_SETFL, flags | O_NONBLOCK) < 0)
+	}
+	if (fcntl(fd_coredump, F_SETFL, flags | O_NONBLOCK) < 0) {
+		fprintf(stderr, "Worker: fcntl(F_SETFL, O_NONBLOCK) failed: %m\n");
 		goto out;
+	}
 
 	epfd = epoll_create1(0);
-	if (epfd < 0)
+	if (epfd < 0) {
+		fprintf(stderr, "Worker: epoll_create1() failed: %m\n");
 		goto out;
+	}
 
 	ev.events = EPOLLIN | EPOLLRDHUP | EPOLLET;
 	ev.data.fd = fd_coredump;
-	if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd_coredump, &ev) < 0)
+	if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd_coredump, &ev) < 0) {
+		fprintf(stderr, "Worker: epoll_ctl(EPOLL_CTL_ADD) failed: %m\n");
 		goto out;
+	}
 
 	for (;;) {
 		struct epoll_event events[1];
 		int n = epoll_wait(epfd, events, 1, -1);
-		if (n < 0)
+		if (n < 0) {
+			fprintf(stderr, "Worker: epoll_wait() failed: %m\n");
 			break;
+		}
 
 		if (events[0].events & (EPOLLIN | EPOLLRDHUP)) {
 			for (;;) {
@@ -322,19 +350,24 @@ void process_coredump_worker(int fd_coredump, int fd_peer_pidfd, int fd_core_fil
 				if (bytes_read < 0) {
 					if (errno == EAGAIN || errno == EWOULDBLOCK)
 						break;
+					fprintf(stderr, "Worker: read() failed: %m\n");
 					goto out;
 				}
 				if (bytes_read == 0)
 					goto done;
 				ssize_t bytes_write = write(fd_core_file, buffer, bytes_read);
-				if (bytes_write != bytes_read)
+				if (bytes_write != bytes_read) {
+					fprintf(stderr, "Worker: write() failed (read=%zd, write=%zd): %m\n",
+						bytes_read, bytes_write);
 					goto out;
+				}
 			}
 		}
 	}
 
 done:
 	exit_code = EXIT_SUCCESS;
+	fprintf(stderr, "Worker: completed successfully\n");
 out:
 	if (epfd >= 0)
 		close(epfd);
-- 
2.47.3
next prev parent reply	other threads:[~2025-10-28  8:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-28  8:45 [PATCH 00/22] coredump: cleanups & pidfd extension Christian Brauner
2025-10-28  8:45 ` [PATCH 01/22] pidfs: use guard() for task_lock Christian Brauner
2025-10-28  8:45 ` [PATCH 02/22] pidfs: fix PIDFD_INFO_COREDUMP handling Christian Brauner
2025-10-28  8:45 ` [PATCH 03/22] pidfs: add missing PIDFD_INFO_SIZE_VER1 Christian Brauner
2025-10-28  8:45 ` [PATCH 04/22] pidfs: add missing BUILD_BUG_ON() assert on struct pidfd_info Christian Brauner
2025-10-28  8:45 ` [PATCH 05/22] pidfd: add a new supported_mask field Christian Brauner
2025-10-28  8:45 ` [PATCH 06/22] pidfs: prepare to drop exit_info pointer Christian Brauner
2025-10-28  8:45 ` [PATCH 07/22] pidfs: drop struct pidfs_exit_info Christian Brauner
2025-10-28  8:45 ` [PATCH 08/22] pidfs: expose coredump signal Christian Brauner
2025-10-28  8:45 ` [PATCH 09/22] selftests/pidfd: update pidfd header Christian Brauner
2025-10-28  8:45 ` [PATCH 10/22] selftests/pidfd: add first supported_mask test Christian Brauner
2025-10-28  8:45 ` [PATCH 11/22] selftests/pidfd: add second " Christian Brauner
2025-10-28  8:45 ` [PATCH 12/22] selftests/coredump: split out common helpers Christian Brauner
2025-10-28  8:45 ` [PATCH 13/22] selftests/coredump: split out coredump socket tests Christian Brauner
2025-10-28  8:45 ` [PATCH 14/22] selftests/coredump: fix userspace client detection Christian Brauner
2025-10-28  8:46 ` [PATCH 15/22] selftests/coredump: fix userspace coredump " Christian Brauner
2025-10-28  8:46 ` [PATCH 16/22] selftests/coredump: handle edge-triggered epoll correctly Christian Brauner
2025-10-28  8:46 ` Christian Brauner [this message]
2025-10-28  8:46 ` [PATCH 18/22] selftests/coredump: add debug logging to coredump socket tests Christian Brauner
2025-10-28  8:46 ` [PATCH 19/22] selftests/coredump: add debug logging to coredump socket protocol tests Christian Brauner
2025-10-28  8:46 ` [PATCH 20/22] selftests/coredump: ignore ENOSPC errors Christian Brauner
2025-10-28  8:46 ` [PATCH 21/22] selftests/coredump: add first PIDFD_INFO_COREDUMP_SIGNAL test Christian Brauner
2025-10-28  8:46 ` [PATCH 22/22] selftests/coredump: add second " Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox
  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):
  git send-email \
    --in-reply-to=20251028-work-coredump-signal-v1-17-ca449b7b7aa0@kernel.org \
    --to=brauner@kernel.org \
    --cc=alexander@mihalicyn.com \
    --cc=amir73il@gmail.com \
    --cc=cyphar@cyphar.com \
    --cc=jack@suse.cz \
    --cc=jannh@google.com \
    --cc=jlayton@kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=lennart@poettering.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca.boccassi@gmail.com \
    --cc=me@yhndnzj.com \
    --cc=oleg@redhat.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=watanabe.yu+github@gmail.com \
    --cc=zbyszek@in.waw.pl \
    /path/to/YOUR_REPLY
  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
  Be sure your reply has a Subject: header at the top and a blank line
  before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).