From: Jens Axboe <axboe@suse.de>
To: Steven Scholz <steven.scholz@imc-berlin.de>
Cc: linux-ide@vger.kernel.org
Subject: Re: Crash in ide_do_request() on card removal
Date: Tue, 2 Aug 2005 13:33:29 +0200 [thread overview]
Message-ID: <20050802113328.GK22569@suse.de> (raw)
In-Reply-To: <42EF594C.7090902@imc-berlin.de>
On Tue, Aug 02 2005, Steven Scholz wrote:
> Jens Axboe wrote:
>
> >On Tue, Aug 02 2005, Steven Scholz wrote:
> >
> >>Jens Axboe wrote:
> >>
> >>
> >>>On Tue, Aug 02 2005, Steven Scholz wrote:
> >>>
> >>>
> >>>>Jens Axboe wrote:
> >>>>
> >>>>
> >>>>
> >>>>>That's not quite true, q is not invalid after this call. It will only
> >>>>>be
> >>>>>invalid when it is freed (which doesn't happen from here but rather
> >>>>>from
> >>>>>the blk_cleanup_queue() call when the reference count drops to 0).
> >>>>>
> >>>>>This is still not perfect, but a lot better. Does it work for you?
> >>>>>
> >>>>>--- linux-2.6.12/drivers/ide/ide-disk.c~ 2005-08-02
> >>>>>12:48:16.000000000 +0200
> >>>>>+++ linux-2.6.12/drivers/ide/ide-disk.c 2005-08-02
> >>>>>12:48:32.000000000 +0200
> >>>>>@@ -1054,6 +1054,7 @@
> >>>>> drive->driver_data = NULL;
> >>>>> drive->devfs_name[0] = '\0';
> >>>>> g->private_data = NULL;
> >>>>>+ g->disk = NULL;
> >>>>> put_disk(g);
> >>>>> kfree(idkp);
> >>>>>}
> >>>>
> >>>>No.
> >>>>drivers/ide/ide-disk.c: In function `ide_disk_release':
> >>>>drivers/ide/ide-disk.c:1057: error: structure has no member named `disk'
> >>>
> >>>
> >>>Eh, typo, should be g->queue of course :-)
> >>>
> >>>--- linux-2.6.12/drivers/ide/ide-disk.c~ 2005-08-02
> >>>12:48:16.000000000 +0200
> >>>+++ linux-2.6.12/drivers/ide/ide-disk.c 2005-08-02
> >>>13:12:54.000000000 +0200
> >>>@@ -1054,6 +1054,7 @@
> >>> drive->driver_data = NULL;
> >>> drive->devfs_name[0] = '\0';
> >>> g->private_data = NULL;
> >>>+ g->queue = NULL;
> >>> put_disk(g);
> >>> kfree(idkp);
> >>>}
> >>
> >>No. That does not work:
> >>
> >>~ # umount /mnt/pcmcia/
> >>generic_make_request(2859) q=c02d3040
> >>__generic_unplug_device(1447) calling q->request_fn() @ c00f97ec
> >>
> >>do_ide_request(1281) HWIF=c01dee8c (0), HWGROUP=c089cea0 (1038681856),
> >>drive=c01def1c (0, 0), queue=c02d3040 (00000000)
> >>do_ide_request(1287) HWIF is not present anymore!!!
> >>do_ide_request(1291) DRIVE is not present anymore. SKIPPING REQUEST!!!
> >>
> >>As you can see generic_make_request() still has the pointer to that queue!
> >>It gets it with
> >>
> >> q = bdev_get_queue(bio->bi_bdev);
> >>
> >>So the pointer is still stored soemwhere else...
> >
> >
> >Hmmm, perhaps just let ide end requests where the drive has been
> >removed might be better.
>
> I don't understand what you mean.
>
> If requests are issued (e.g calling umount) after the drive is gone, then I
> get either a kernel crash or umount hangs cause it waits in
> __wait_on_buffer() ...
No, those waiters will be woken up when ide does an end_request for
requests coming in for a device which no longer exists.
--
Jens Axboe
next prev parent reply other threads:[~2005-08-02 11:31 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-29 12:01 Crash in ide_do_request() on card removal Steven Scholz
2005-08-02 9:57 ` Steven Scholz
2005-08-02 10:48 ` Jens Axboe
2005-08-02 11:10 ` Steven Scholz
2005-08-02 11:13 ` Jens Axboe
2005-08-02 11:17 ` Steven Scholz
2005-08-02 11:28 ` Jens Axboe
2005-08-02 11:30 ` Steven Scholz
2005-08-02 11:33 ` Jens Axboe [this message]
2005-08-02 12:09 ` Steven Scholz
2005-08-02 12:26 ` Jens Axboe
2005-08-02 12:40 ` Steven Scholz
2005-08-02 12:54 ` Jens Axboe
2005-08-02 13:03 ` Steven Scholz
2005-08-02 13:06 ` Jens Axboe
2005-08-02 13:38 ` Steven Scholz
2005-08-02 13:45 ` Jens Axboe
2005-08-02 13:54 ` Steven Scholz
2005-08-02 14:11 ` Jens Axboe
2005-08-08 9:00 ` Steven Scholz
2005-08-02 13:28 ` Bartlomiej Zolnierkiewicz
2005-08-18 12:59 ` Steven Scholz
2006-01-31 14:28 ` Steven Scholz
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=20050802113328.GK22569@suse.de \
--to=axboe@suse.de \
--cc=linux-ide@vger.kernel.org \
--cc=steven.scholz@imc-berlin.de \
/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;
as well as URLs for NNTP newsgroup(s).