From: Pierre Ossman <pierre@ossman.eu>
To: Stefan Bader <stefan.bader@canonical.com>, Jens Axboe <axboe@kernel.dk>
Cc: linux-kernel@vger.kernel.org, Andy Whitcroft <apw@canonical.com>
Subject: Re: [PATCH] mmc: prevent dangling block device from accessing stale queues
Date: Thu, 4 Jun 2009 20:29:00 +0200 [thread overview]
Message-ID: <20090604202900.57f31d6a@mjolnir.ossman.eu> (raw)
In-Reply-To: <4A280BD4.9080908@canonical.com>
[-- Attachment #1: Type: text/plain, Size: 2196 bytes --]
On Thu, 04 Jun 2009 20:00:52 +0200
Stefan Bader <stefan.bader@canonical.com> wrote:
> Kernel: 2.6.30-rc7 based
> Worked in 2.6.28 (probably only because things went at a different speed)
>
> Testcase: Use ext3/ext4 on a SD card partitioned with one primary DOS partition
> and leave it mounted while suspend/resume.
>
> Result: After resume the partition table of the SD card has been erased.
>
> The detailed description can be found at:
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/383668
>
> In essence the mmc block device frees the generic request queue before the last
> user of the gendisk has stopped using it leaving an invalid queue pointer which
> get unfortunately re-used before more requests come in for the old device.
>
> The bugfix will cause more I/O error messages and might not be the ultimate way
> things should work, but it prevents data from getting lost.
>
You seem to have dug a bit further than I've had time for. Do you have
anything substantial to back this up:
> + /*
> + * Calling blk_cleanup_queue() would be too soon here. As long as
> + * the gendisk has a reference to it and is not released we should
> + * keep the queue. It has been shutdown and will not accept any new
> + * requests, so that should be safe.
> + */
?
It would seem that gendisk is making some bad assumptions and needs to
be changed if that is the case.
This part from the launchpad report also seems incredibly broken:
> What makes the whole thing a disaster is the fact that the block device queue objects are taken from a slub cache. Which means on resume, the newly created block device will get the same queue object as the old one, initializes it and
> after the tasks have been resumed, ext3 feels obliged to write out the invalidated superblocks (still not sure why it goes for sector 0) which will happily migrate to the new block device and cause confusion.
Jens, comments?
Rgds
--
-- Pierre Ossman
WARNING: This correspondence is being monitored by the
Swedish government. Make sure your server uses encryption
for SMTP traffic and consider using PGP for end-to-end
encryption.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
next prev parent reply other threads:[~2009-06-04 18:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-04 18:00 Stefan Bader
2009-06-04 18:29 ` Pierre Ossman [this message]
2009-06-04 19:00 ` Stefan Bader
2009-06-04 19:15 ` Matt Fleming
2009-06-04 19:22 ` Pierre Ossman
2009-06-04 19:23 ` Stefan Bader
2009-06-04 19:21 ` Pierre Ossman
2009-06-04 19:37 ` Stefan Bader
2009-06-10 21:02 ` Pavel Machek
2009-06-23 15:01 ` Stefan Bader
2009-07-01 11:09 ` Pierre Ossman
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=20090604202900.57f31d6a@mjolnir.ossman.eu \
--to=pierre@ossman.eu \
--cc=apw@canonical.com \
--cc=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=stefan.bader@canonical.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®