All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: sekharan@us.ibm.com
Cc: linux-kernel@vger.kernel.org, lse-tech@lists.sourceforge.net,
	paulmck@us.ibm.com, kaos@sgi.com, greg@kroah.com,
	Douglas_Warzecha@dell.com, Abhay_Salunke@dell.com,
	achim_leubner@adaptec.com, dmp@davidmpye.dyndns.org
Subject: Re: [PATCH 0/7]: Fix for unsafe notifier chain
Date: Sat, 26 Nov 2005 20:07:41 -0800	[thread overview]
Message-ID: <20051126200741.421a342a.akpm@osdl.org> (raw)
In-Reply-To: <1132789071.9460.16.camel@linuxchandra>

Chandra Seetharaman <sekharan@us.ibm.com> wrote:
>
> Andrew,
> 
> I posted this set of patch to lkml last Friday as an RFC. Can you
> consider these for -mm inclusion.

This all looks exotically complex.

> ...
> 
> Here are the details:
> In 2.6.14, notifier chains are unsafe. notifier_call_chain() walks through
> the list of a call chain without any protection.
> 
> Alan Stern <stern@rowland.harvard.edu> brought the issue and suggested a fix
> in lkml on Oct 24 2005:
> 	http://marc.theaimsgroup.com/?l=linux-kernel&m=113018709002036&w=2
> 
> There was a lot of discussion on that thread regarding the issue, and
> following were the conclusions about the requirements of the notifier
> call mechanism:
> 
> 	- The chain list has to be protected in all the places where the
> 	  list is accessed.
> 	- We need a new notifier_head data structure to encompass the head 
> 	  of the notifier chain and a semaphore that protects the list.
> 	- There should be two types of call chains: one that is called in 
> 	  a process context and another that is called in atomic/interrupt
> 	  context.
> 	- No lock should be acquired in notifier_call_chain() for an
> 	  atomic-type chain.
> 	- notifier_chain_register() and notifier_chain_unregister() should
> 	  be called only from process context.
> 	- notifier_chain_unregister() should _not_ be called from a
> 	  callout routine.
> 
> I posted an RFC that meets the above listed requirements last Friday:
> 	- http://marc.theaimsgroup.com/?l=linux-kernel&m=113175279131346&w=2
> 	
> Paul McKenney provided some suggestions w.r.t RCU usage. This patchset fixes
> the issues he raised.  Keith Owens posted some changes to the diechain for
> various architectures; his changes are included here.

- You don't state _why_ a callback cannot call
  notifier_chain_unregister().  I assume that's because of the use of
  write_lock() locking?

  We could do this with a new callback function return code and do it in
  the core, or just change the code so it is permitted.

- You don't explain why RCU has been introduced into this subsystem. 
  Seems overkillish, or was it done as a way to solve the correctness
  problems?

- Generally, please don't put so much stuff into the [patch 0/N] email. 
  We never put empty patches into git so some sucker has to move all the
  [0/N] content into [1/N].  Better that it's you than me.

- Overall take on the patches: the problem here is that notifier chains
  try to provide their own locking.  Each time we design a container which
  does that, we screw it up and we regret it.

  Please consider removing all locking from the notifer chains and moving
  it into the callers.

  A migration path would be:

  - Introduce a new notifier API which is wholly unlocked

  - Migrate all callers over to that

  - Remove the current implementation

  Note that with this scheme, callbacks which wish to call the unregister
  function can do that, as long as they are not using read_lock() or
  down_read() during the chain traversal.

  reply	other threads:[~2005-11-27  4:08 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-23 23:37 [PATCH 0/7]: Fix for unsafe notifier chain Chandra Seetharaman
2005-11-27  4:07 ` Andrew Morton [this message]
2005-11-27 13:47   ` [Lse-tech] " Andi Kleen
2005-11-27 15:59     ` Keith Owens
2005-11-27 17:27       ` Andi Kleen
2005-11-27 17:39         ` Keith Owens
2005-11-27 19:56           ` Andrew Morton
2005-11-27 22:03             ` Greg KH
2005-11-28  2:43               ` Paul E. McKenney
2005-11-28  4:57                 ` Andrew Morton
2005-11-28  4:59                   ` Andi Kleen
2005-11-28  5:05                     ` Paul E. McKenney
2005-11-28  5:15                       ` Andi Kleen
2005-11-28  8:31                     ` Keith Owens
2005-11-28 12:07                       ` Andi Kleen
2005-11-28 19:55                         ` Paul E. McKenney
2005-12-04 16:19                       ` Alan Cox
2005-12-06 23:38                         ` Keith Owens
2005-12-07  2:43                           ` Keith Owens
2005-11-28  1:19             ` Keith Owens
2005-11-28 18:58   ` Chandra Seetharaman

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=20051126200741.421a342a.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=Abhay_Salunke@dell.com \
    --cc=Douglas_Warzecha@dell.com \
    --cc=achim_leubner@adaptec.com \
    --cc=dmp@davidmpye.dyndns.org \
    --cc=greg@kroah.com \
    --cc=kaos@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lse-tech@lists.sourceforge.net \
    --cc=paulmck@us.ibm.com \
    --cc=sekharan@us.ibm.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.