All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Robert Love <rlove@google.com>
Cc: Raul Xiong <raulxiong@gmail.com>,
	Neil Zhang <glacier1980@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Shankar Brahadeeswaran <shankoo77@gmail.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Bjorn Bringert <bringert@google.com>,
	devel <devel@driverdev.osuosl.org>,
	Hugh Dickins <hughd@google.com>,
	Anjana V Kumar <anjanavk12@gmail.com>,
	linux-next <linux-next@vger.kernel.org>
Subject: Re: [PATCH -next] ashmem: Fix ashmem_shrink deadlock.
Date: Thu, 16 May 2013 10:19:07 -0700	[thread overview]
Message-ID: <20130516101907.d102dd91.akpm@linux-foundation.org> (raw)
In-Reply-To: <CAG6tG3xLydqQTOHaXMpdCo8m+WkydAqgLvi5HW8_djoO-hcf9g@mail.gmail.com>

On Thu, 16 May 2013 13:08:17 -0400 Robert Love <rlove@google.com> wrote:

> On Thu, May 16, 2013 at 12:45 PM, Andrew Morton
> <akpm@linux-foundation.org> wrote:
> > A better approach would be to add a new __GFP_NOSHRINKERS, but it's all
> > variations on a theme.
> 
> I don't like this proposal, either. Many of the existing GFP flags
> already exist to prevent recurse into that flag's respective shrinker.
> 
> This problem seems a rare proper use of mutex_trylock.

Not really.  The need for a trylock is often an indication that a
subsystem has a locking misdesign.  That is indeed the case here.

> > The mutex_trylock(ashmem_mutex) will actually have the best
> > performance, because it skips the least amount of memory reclaim
> > opportunities.
> 
> Right.
> 
> > But it still sucks!  The real problem is that there exists a lock
> > called "ashmem_mutex", taken by both the high-level mmap() and by the
> > low-level shrinker.  And taken by everything else too!  The ashmem
> > locking is pretty crude...
> 
> The locking is "crude" because I optimized for space, not time, and
> there was (and is) no indication we were suffering lock contention due
> to the global lock. I haven't thought through the implications of
> pushing locking into the ashmem_area and ashmem_range objects, but it
> does look like we'd end up often grabbing all of the locks ...
> 
> > What is the mutex_lock() in ashmem_mmap() actually protecting?  I don't
> > see much, apart from perhaps some incidental races around the contents
> > of the file's ashmem_area, and those could/should be protected by a
> > per-object lock, not a global one?
> 
> ... but not, as you note, in ashmem_mmap. The main race there is
> around the allocation of asma->file. That could definitely be a lock
> local to ashmem_area. I'm OK if anyone wants to take that on but it
> seems a lot of work for a driver with an unclear future.

Well, it's not exactly a ton of work, but adding a per-ashmem_area lock
to protect ->file would rather be putting lipstick on a pig.  I suppose
we can put the trylock in there and run away, but it wouldn't hurt to
drop in a big fat comment somewhere explaining that the driver should be
migrated to a per-object locking scheme.

  reply	other threads:[~2013-05-16 17:19 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-01 13:56 [PATCH -next] ashmem: Fix ashmem_shrink deadlock Robert Love
2013-05-01 15:54 ` David Rientjes
2013-05-02 18:22   ` David Rientjes
2013-05-02 20:39     ` Greg Kroah-Hartman
2013-05-07 20:52 ` Andrew Morton
2013-05-13 21:42 ` Greg Kroah-Hartman
2013-05-14  3:29   ` Neil Zhang
2013-05-14  3:37     ` Raul Xiong
2013-05-16  8:15       ` Raul Xiong
2013-05-16 13:44         ` Robert Love
2013-05-16 16:45           ` Andrew Morton
2013-05-16 17:08             ` Robert Love
2013-05-16 17:19               ` Andrew Morton [this message]
2013-05-16 17:28                 ` Robert Love
2013-09-17  5:05                   ` Raul Xiong

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=20130516101907.d102dd91.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=anjanavk12@gmail.com \
    --cc=bringert@google.com \
    --cc=dan.carpenter@oracle.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=glacier1980@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=raulxiong@gmail.com \
    --cc=rlove@google.com \
    --cc=shankoo77@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.