lkml.org 
[lkml]   [2017]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [RFC] EPOLL_KILLME: New flag to epoll_wait() that subscribes process to death row (new syscall)
From
Date
On 2017/11/01 14:32, Shawn Landden wrote:
> @@ -1029,6 +1030,22 @@ bool out_of_memory(struct oom_control *oc)
> return true;
> }
>
> + /*
> + * Check death row.
> + */
> + if (!list_empty(eventpoll_deathrow_list())) {
> + struct list_head *l = eventpoll_deathrow_list();

Unsafe traversal. List can become empty at this moment.

> + struct task_struct *ts = list_first_entry(l,
> + struct task_struct, se.deathrow);
> +
> + pr_debug("Killing pid %u from EPOLL_KILLME death row.",
> + ts->pid);
> +
> + /* We use SIGKILL so as to cleanly interrupt ep_poll() */
> + kill_pid(task_pid(ts), SIGKILL, 1);

send_sig() ?

> + return true;
> + }
> +
> /*
> * The OOM killer does not compensate for IO-less reclaim.
> * pagefault_out_of_memory lost its gfp context so we have to
>

And why is

static int oom_fd = open("/proc/self/oom_score_adj", O_WRONLY);

and then toggling between

write(fd, "1000", 4);

and

write(fd, "0", 1);

not sufficient? Adding prctl() that do this might be handy though.

\
 
 \ /
  Last update: 2017-11-01 23:11    [W:0.196 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site