On Mon, 29 Feb 2016, Michal Hocko wrote:
>From: Michal Hocko <[email protected]>
>
>shmat and shmdt rely on mmap_sem for write. If the waiting task
>gets killed by the oom killer it would block oom_reaper from
>asynchronous address space reclaim and reduce the chances of timely
>OOM resolving. Wait for the lock in the killable mode and return with
>EINTR if the task got killed while waiting.
>
>Cc: Davidlohr Bueso <[email protected]>
>Cc: Hugh Dickins <[email protected]>
>Signed-off-by: Michal Hocko <[email protected]>
I have no objection to this perse, just one comment below.
Acked-by: Davidlohr Bueso <[email protected]>
>---
> ipc/shm.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
>diff --git a/ipc/shm.c b/ipc/shm.c
>index 331fc1b0b3c7..b8cfa05940d2 100644
>--- a/ipc/shm.c
>+++ b/ipc/shm.c
>@@ -1200,7 +1200,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,
> if (err)
> goto out_fput;
>
>- down_write(¤t->mm->mmap_sem);
>+ if (down_write_killable(¤t->mm->mmap_sem)) {
>+ err = -EINVAL;
>+ goto out_fput;
>+ }
This should be EINTR, no?
Thanks,
Davidlohr
>+
> if (addr && !(shmflg & SHM_REMAP)) {
> err = -EINVAL;
> if (addr + size < addr)
>@@ -1271,7 +1275,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)
> if (addr & ~PAGE_MASK)
> return retval;
>
>- down_write(&mm->mmap_sem);
>+ if (down_write_killable(&mm->mmap_sem))
>+ return -EINTR;
>
> /*
> * This function tries to be smart and unmap shm segments that
>--
>2.7.0
>
On Tue 08-03-16 11:15:50, Davidlohr Bueso wrote:
> On Mon, 29 Feb 2016, Michal Hocko wrote:
>
> >From: Michal Hocko <[email protected]>
> >
> >shmat and shmdt rely on mmap_sem for write. If the waiting task
> >gets killed by the oom killer it would block oom_reaper from
> >asynchronous address space reclaim and reduce the chances of timely
> >OOM resolving. Wait for the lock in the killable mode and return with
> >EINTR if the task got killed while waiting.
> >
> >Cc: Davidlohr Bueso <[email protected]>
> >Cc: Hugh Dickins <[email protected]>
> >Signed-off-by: Michal Hocko <[email protected]>
>
> I have no objection to this perse, just one comment below.
>
> Acked-by: Davidlohr Bueso <[email protected]>
Thanks!
[...]
> >- down_write(¤t->mm->mmap_sem);
> >+ if (down_write_killable(¤t->mm->mmap_sem)) {
> >+ err = -EINVAL;
> >+ goto out_fput;
> >+ }
>
> This should be EINTR, no?
Of course. Thanks for catching that.
--
Michal Hocko
SUSE Labs