All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Arcangeli <andrea@suse.de>
To: Andrew Morton <akpm@digeo.com>
Cc: Jan Harkes <jaharkes@cs.cmu.edu>,
	daniel@osdl.org, linux-kernel@vger.kernel.org,
	shemminger@osdl.org, torvalds@transmeta.com
Subject: Re: [PATCH 2.5.64 2/2] i_size atomic access
Date: Mon, 10 Mar 2003 14:16:11 +0100	[thread overview]
Message-ID: <20030310131611.GA14627@dualathlon.random> (raw)
In-Reply-To: <20030307203340.5e025ef0.akpm@digeo.com>

On Fri, Mar 07, 2003 at 08:33:40PM -0800, Andrew Morton wrote:
> Jan Harkes <jaharkes@cs.cmu.edu> wrote:
> >
> > On Fri, Mar 07, 2003 at 05:26:31PM -0800, Daniel McNeil wrote:
> > > On Fri, 2003-03-07 at 16:30, Andrew Morton wrote:
> > > > Daniel McNeil <daniel@osdl.org> wrote:
> > > > > This adds i_seqcnt to inode structure and then uses i_size_read() and
> > > > > i_size_write() to provide atomic access to i_size.
> > > > 
> > > > Ho hum.  Everybody absolutely hates this, but I guess we should do it :(
> > 
> > I am really curious whether this patch is really all that useful, has
> > anyone ever noticed enough lock contention on inode semaphore caused by
> > accessing i_size? Whenever i_size changes it needs to be locked down
> > either way because mappings have to be extended or truncated.
> 
> The problem is not lock contention.  The problem is that the read() paths are
> performing nonatomic reads of a 64-bit value.  If a writer is updating i_size
> at the same time the reader can see grossly incorrect values.
> 
> It's such a remote problem that nobody really has the heart to do anything
> about it.  But it's there...

well really this is fixed in my tree and in some distribution kernels
for half an year, it's true only the major fs are been taken care of,
but definitely somebody had the heart to do something about it 8)

> > A quick grep shows that there are 619 references to ->i_size in the
> > various filesystem subdirs.
> 
> Most of these are not inode->i_size.  Yes, there are i_size references in
> filesystems, but not many.  And the infrastructure is there to mop those up.
> 
> If we choose to.  I'm still not sure I want to do this :(

There is no other way, some cpu can't even do it atomically (hence the
need of the sequence number approch).

Also note that the atomicity isn't needed everywhere, for example if you
read i_size in the write paths you don't need to use i_size_read, but
you can read with inode->i_size as usual, which is faster and in turn
recommended.

I described the locking rules here:

	http://groups.google.com/groups?q=i_size_read&hl=en&lr=&ie=UTF-8&selm=20020717225504.GA994%40dualathlon.random&rnum=2

	  The rules are: 1) i_size_write must be used for all i_size
	  updates (at least when there can be potential parallel readers
	  outside the i_sem), 2) i_size_read must be used for all lockless
	  reads when an i_size change can happen from under us.
	  
Andrea

  parent reply	other threads:[~2003-03-10 13:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-08  0:15 [PATCH 2.5.64 2/2] i_size atomic access Daniel McNeil
2003-03-08  0:30 ` Andrew Morton
2003-03-08  1:26   ` Daniel McNeil
     [not found]     ` <20030308042555.GA31650@delft.aura.cs.cmu.edu>
     [not found]       ` <20030307203340.5e025ef0.akpm@digeo.com>
2003-03-10 13:16         ` Andrea Arcangeli [this message]
2003-03-10 17:22           ` Daniel McNeil

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=20030310131611.GA14627@dualathlon.random \
    --to=andrea@suse.de \
    --cc=akpm@digeo.com \
    --cc=daniel@osdl.org \
    --cc=jaharkes@cs.cmu.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=shemminger@osdl.org \
    --cc=torvalds@transmeta.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.