Re: [RFC] EPOLL_KILLME: New flag to epoll_wait() that subscribes process to death row (new syscall)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 1, 2017 at 3:10 PM, Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> wrote:
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.
I want to do special process accounting. Also, in Android using this type of memory management is mandatory, and to do that other processes would have to make delivery of their messages (like a wake-up for user input) contingent on setting this. oom_score 1000 could gain all this special handling however.


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]
  Powered by Linux