From: Andrew Morton <akpm@digeo.com>
To: William Lee Irwin III <wli@holomorphy.com>
Cc: green@namesys.com, linux-kernel@vger.kernel.org, hch@lst.de,
jack@suse.cz, mason@suse.com, shemminger@osdl.org
Subject: Re: ext2 FS corruption with 2.5.59.
Date: Sat, 25 Jan 2003 19:46:48 -0800 [thread overview]
Message-ID: <20030125194648.6c417699.akpm@digeo.com> (raw)
In-Reply-To: <20030126032815.GA780@holomorphy.com>
William Lee Irwin III <wli@holomorphy.com> wrote:
>
> On Sat, Jan 25, 2003 at 07:04:10PM -0800, Andrew Morton wrote:
> +static inline unsigned fr_write_begin(frlock_t *rw)
> +{
> + unsigned ret = rw->pre_sequence++;
> + wmb();
> + return ret;
> +}
> +
> +static inline unsigned fr_write_end(frlock_t *rw)
> +{
> + unsgned ret;
> + wmb();
> + ret = ++(rw->post_sequence);
> + wmb();
> + return ret;
> +}
>
> Ticket locks need atomic fetch and increment. These don't look right.
Well look at the reader side:
loff_t i_size_read(struct inode *inode)
{
unsigned seq;
loff_t ret;
do {
seq = fr_write_begin(&inode->i_frlock);
ret = inode->i_size;
} while (seq != fr_write_end(&inode->i_frlock);
return ret;
}
One change which is needed here is to disable preemption in fr_write_begin();
otherwise an frlock could be in the pre!=post state for hundreds of
milliseconds while the writer gets preempted. Other CPUs would just spin for
the duration.
The same would happen if the writer takes an interrupt while pre!=post, but
that's the same for all spinlocks...
next prev parent reply other threads:[~2003-01-26 3:37 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-23 12:38 Oleg Drokin
2003-01-23 14:09 ` Hugh Dickins
2003-01-23 14:26 ` Oleg Drokin
2003-01-23 14:39 ` Oleg Drokin
2003-01-24 10:32 ` Andrew Morton
2003-01-24 12:39 ` Oleg Drokin
2003-01-25 6:53 ` Andrew Morton
2003-01-25 12:36 ` Oleg Drokin
2003-01-25 23:13 ` Andrew Morton
2003-01-26 9:25 ` Oleg Drokin
2003-01-26 3:04 ` Andrew Morton
2003-01-26 3:28 ` William Lee Irwin III
2003-01-26 3:46 ` Andrew Morton [this message]
2003-01-26 4:14 ` William Lee Irwin III
2003-01-26 5:10 ` Andrew Morton
2003-01-27 22:59 ` Stephen Hemminger
2003-01-27 23:59 ` William Lee Irwin III
2003-01-26 11:11 ` Anton Blanchard
2003-01-26 11:23 ` Andrew Morton
2003-01-28 13:50 ` Christoph Hellwig
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=20030125194648.6c417699.akpm@digeo.com \
--to=akpm@digeo.com \
--cc=green@namesys.com \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=mason@suse.com \
--cc=shemminger@osdl.org \
--cc=wli@holomorphy.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®