From: Andrea Arcangeli <andrea@suse.de>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Kernel Mailing List <linux-kernel@vger.kernel.org>,
Alexander Viro <viro@math.psu.edu>
Subject: Re: linux-2.4.10-pre5
Date: Sun, 9 Sep 2001 05:30:15 +0200 [thread overview]
Message-ID: <20010909053015.L11329@athlon.random> (raw)
In-Reply-To: <20010909042229.K11329@athlon.random> <Pine.LNX.4.33.0109081924390.971-100000@penguin.transmeta.com>
In-Reply-To: <Pine.LNX.4.33.0109081924390.971-100000@penguin.transmeta.com>; from torvalds@transmeta.com on Sat, Sep 08, 2001 at 07:31:57PM -0700
On Sat, Sep 08, 2001 at 07:31:57PM -0700, Linus Torvalds wrote:
>
> On Sun, 9 Sep 2001, Andrea Arcangeli wrote:
> >
> > last blkdev close()
>
> I repeat: why last? What if there's a read-only user that has the thing
> open for some reason, like gathering statistics every once in a while with
> ioctl's or whatever?
>
> That "last" is a bug.
The only case where we must synchronize is for tune2fs fsck etc...
there's no ioctl gathering issue running under those. The ioctl
gathering will be started after fsck returned, then it doesn't matter if
the ioctl stays there forever.
Infact it would be particularly bad to synchronize at every close for
the real users of the blkdev, that really want to simply work on a file
as much transparently and fast as possible.
However in theory we could do the fsync + synchronize at every ->release but I
doubt we really need that. At least it wasn't a "bug" but it is a
very intentional behaviour.
> > - write pagecache to disk
> > - drop pagecache
> > - now all new data is on disk
> > - all the above and the below is done atomically with the
> > bdev semaphore (no new openers or anything can play
> > with the pagecache under us, only thing that could
> > play under us on the disk is the fs if mounted rw)
> >
> > - here _if_ we have an fs under us, it still has obsolete
> > data in pinned buffer cache we need to fix it
>
> Agreed. But you should NOT make that a special case.
>
> I'm saying that you can, and should, just _unconditionally_ call
>
> invalidate_device()
>
> which in turn will walk the buffer cache for that device, and try to throw
> it away.
>
> With the simple (again unconditional) addition of: If it cannot throw it
> away because it is pinned through bh->b_count, it knows somebody is using
> the buffer cache (obviously), so regardless of _what_ kind of user it is,
> be it a direct-io one or a magic kernel module or whatever, it does
>
> lock_buffer(bh);
> if (!buffer_dirty(bh))
> submit_bh(bh, READ);
> else {
> /* we just have to assume that the aliasing is ok */
> unlock_buffer(bh);
> }
>
> UNCONDITIONALLY.
This will corrupt the fs at the first hdparm -t on a rw mounted disk
_unless_ the fs always lock_buffer(superblock_bh) before modifying any
metadata _and_ marks the buffer dirty before the unlock_super, which is
not the case. We could possibly rely solely on the lock_super around the
update_buffers() but that would be too weak too since the fs is allowed
not to use the lock_super around all its metadata updates, while it is
well defined where we set/reset MSRDONLY, that always happens with the
super lock acquired and so I only rely on the MSRDONLY plus super lock
acquired which is certainly (and I think the only) safe approch
completly backwards compatible.
> Without caring about things like "is there a filesystem mounted". No
> silly rules. The _only_ rule becomes: "try to make the buffer cache as
> up-to-date as possible".
>
> See? I'm saying that your approach tries to make decisions that it just
> should not make. It shouldn't care or know about things like "a filesystem
I wish I didn't need to make those decisions, infact if you pick the first
patches and you'll see they were not making those decisions and the
early patches were less safe than the latest ones (though the window for
the race was small).
I wish the cache coherency logic would be simpler but just doing
something unconditionally it's going to break things in one way or
another as far I can tell.
Andrea
next prev parent reply other threads:[~2001-09-09 3:29 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-09-08 4:18 linux-2.4.10-pre5 Linus Torvalds
2001-09-08 6:32 ` linux-2.4.10-pre5: drivers/net/wan compile fixes Eyal Lebedinsky
2001-09-08 6:36 ` 2.4.9-ac10 (not 2.4.10-pre5!) wan fixes Eyal Lebedinsky
2001-09-08 8:32 ` 2.4.10-pre5 compile error George Bonser
2001-09-08 17:19 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-08 17:30 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-08 17:57 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-08 18:01 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 1:09 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 1:20 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 1:38 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 1:53 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 2:22 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 2:31 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 3:30 ` Andrea Arcangeli [this message]
2001-09-09 3:58 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 4:16 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 4:28 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 12:09 ` linux-2.4.10-pre5 Rik van Riel
2001-09-09 14:53 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 18:17 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 20:18 ` linux-2.4.10-pre5 H. Peter Anvin
2001-09-10 0:39 ` linux-2.4.10-pre5 Simon Kirby
2001-09-10 8:30 ` linux-2.4.10-pre5 Kai Henningsen
2001-09-11 5:29 ` linux-2.4.10-pre5 Peter Samuelson
2001-09-11 11:29 ` linux-2.4.10-pre5 Kai Henningsen
2001-09-10 21:22 ` linux-2.4.10-pre5 Stephen C. Tweedie
2001-09-09 14:47 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 16:24 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 17:29 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-09 23:56 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-09 4:29 ` linux-2.4.10-pre5 Andreas Dilger
2001-09-09 4:54 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 6:17 ` linux-2.4.10-pre5 Andreas Dilger
2001-09-09 17:31 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 19:19 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-09 23:24 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-09 23:54 ` linux-2.4.10-pre5 Alan Cox
2001-09-10 0:04 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 0:23 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-10 0:23 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 0:38 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-10 1:04 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-10 1:45 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 1:55 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-10 2:02 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 2:06 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-10 2:15 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 2:22 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 2:20 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 2:40 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 3:02 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 3:36 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 19:06 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 2:03 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-10 2:41 ` linux-2.4.10-pre5 Chris Mason
2001-09-10 21:18 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 21:23 ` linux-2.4.10-pre5 Alex Bligh - linux-kernel
2001-09-10 21:54 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 22:39 ` linux-2.4.10-pre5 Alex Bligh - linux-kernel
2001-09-10 23:13 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 23:25 ` linux-2.4.10-pre5 Alex Bligh - linux-kernel
2001-09-10 22:15 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-10 22:26 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-10 22:39 ` linux-2.4.10-pre5 Rik van Riel
2001-09-10 23:14 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-10 23:16 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 0:53 ` linux-2.4.10-pre5 Rik van Riel
2001-09-11 6:39 ` linux-2.4.10-pre5 Hua Zhong
2001-09-11 15:12 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 15:44 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 15:48 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 16:05 ` linux-2.4.10-pre5 Alex Bligh - linux-kernel
2001-09-11 16:07 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 16:07 ` linux-2.4.10-pre5 Alex Bligh - linux-kernel
2001-09-11 16:13 ` linux-2.4.10-pre5 Martin Dalecki
2001-09-11 17:17 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 10:02 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 20:07 ` linux-2.4.10-pre5 Rik van Riel
2001-09-10 23:20 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 0:20 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 1:16 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 2:27 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 7:45 ` linux-2.4.10-pre5 Helge Hafting
2001-09-11 10:27 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-11 15:39 ` linux-2.4.10-pre5 Linus Torvalds
2001-09-11 16:52 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-09 19:51 ` linux-2.4.10-pre5 Daniel Phillips
2001-09-09 9:05 ` linux-2.4.10-pre5 Christoph Hellwig
2001-09-09 13:14 ` linux-2.4.10-pre5 Anton Altaparmakov
2001-09-09 14:31 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-08 21:15 ` linux-2.4.10-pre5 Andreas Dilger
2001-09-09 0:59 ` linux-2.4.10-pre5 Andrea Arcangeli
2001-09-08 22:01 ` linux-2.4.10-pre5 Thiago Vinhas de Moraes
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=20010909053015.L11329@athlon.random \
--to=andrea@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
--cc=viro@math.psu.edu \
/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