From 0ee7df54de502d1306eb0a33da58dc540fae3e18 Mon Sep 17 00:00:00 2001 From: Mike Rapoport Date: Sun, 8 Oct 2017 09:26:53 +0300 Subject: [PATCH] lazy-pages: treat ENOMEM returned by UFFDIO_UNREGISTER as task exit The UFFDIO_UNREGISTER returns ENOMEM only when it is unable to get mm_struct. We can assume in such case that the task is exited. Signed-off-by: Mike Rapoport Signed-off-by: Andrei Vagin --- criu/uffd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/criu/uffd.c b/criu/uffd.c index 7e858903f..740f5e371 100644 --- a/criu/uffd.c +++ b/criu/uffd.c @@ -914,6 +914,15 @@ static int handle_remove(struct lazy_pages_info *lpi, struct uffd_msg *msg) */ if (msg->event == UFFD_EVENT_REMOVE && ioctl(lpi->lpfd.fd, UFFDIO_UNREGISTER, &unreg)) { + /* + * The kernel returns -ENOMEM when unregister is + * called after the process has gone + */ + if (errno == ENOMEM) { + handle_exit(lpi); + return 0; + } + pr_perror("Failed to unregister (%llx - %llx)", unreg.start, unreg.start + unreg.len); return -1;