From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: Elias Oltmanns <eo@nebensachen.de>
Cc: linux-ide@vger.kernel.org
Subject: Re: [PATCH] IDE: Fix HDIO_DRIVE_RESET handling
Date: Thu, 19 Jun 2008 22:47:24 +0200 [thread overview]
Message-ID: <200806192247.25063.bzolnier@gmail.com> (raw)
In-Reply-To: <87k5gmz596.fsf@denkblock.local>
Hi,
On Thursday 19 June 2008, Elias Oltmanns wrote:
> Hi Bart,
>
> currently, the code path executing an HDIO_DRIVE_RESET ioctl is broken
> in various ways. Firstly, ide_abort() is called with the ide_lock held
> and may call ide_end_request() further down the line which will try to
> grab the same lock again. More importantly though, the whole concept of
> aborting an inflight request is flawed -- at least as far as ide_abort()
> is concerned.
>
> The patch below tries to address these issues by handling the
> HDIO_DRIVE_RESET ioctl in-band. I wonder whether this approach is
> acceptable and may be extended to other applications like a modified
This approach is exactly the way it should have been done. :)
> version of the disk shock protection patches. Also, I abstained from
> using op codes 0x0 to 0x1f since at least part of this range is used by
>
> ULDs like ide-floppy, ide-tape, etc. On the other hand, there really
> should be no conflict because those ULDs will always set ->rq_disk thus
> preventing ide_special_rq() from snatching away what should be passed on
> to ->do_request(). So, what's you're advice on this one? Finally,
The solution present in the patch is OK for now (+ it doesn't interfere
with some other work being done in ULDs by Borislav) but needs documenting.
> shouldn't op codes like REQ_DRIVE_RESET really be declared in a private
> header file in drivers/ide/?
I think that for such defines <linux/ide.h> is appropriate for now.
[ OTOH it sounds like a good idea in the longer term to move some
things from <linux/ide.h> to drivers/ide/ide.h ]
One more thing, ide-2.6 is for syncing with Linus _only_ (it seems I'm to
blame for the confusion), please rebase your work on top of pata-2.6 quilt
tree (some comments which should ease the transition below):
http://kernel.org/pub/linux/kernel/people/bart/pata-2.6/
[ This tree is pulled into linux-next so you may prefer to just use the
latest -next snapshost instead. ]
[...]
> @@ -891,7 +904,8 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
> pm->pm_step == ide_pm_state_completed)
> ide_complete_pm_request(drive, rq);
> return startstop;
> - }
> + } else if (!rq->rq_disk && blk_special_request(rq))
Please document with "TODO:" why we need this rq->rq_disk check here
(as ULDs should later be fixed to only check for specific rq->cmd[0]
values of blk_special_request() requests).
> + return ide_special_rq(drive, rq);
>
> drv = *(ide_driver_t **)rq->rq_disk->private_data;
> return drv->do_request(drive, rq, block);
> diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
> index c758dcb..4f9c796 100644
> --- a/drivers/ide/ide.c
> +++ b/drivers/ide/ide.c
> @@ -623,6 +623,19 @@ static int generic_ide_resume(struct device *dev)
> return err;
> }
>
> +static void generic_drive_reset(ide_drive_t *drive)
> +{
> + struct request *rq;
> +
> + rq = blk_get_request(drive->queue, 0, __GFP_WAIT);
> + /* Should we call ide_init_drive_cmd() here? */
blk_get_request() is sufficient (ide_init_drive_cmd() is gone now)
> + rq->cmd[0] = REQ_DRIVE_RESET;
> + rq->cmd_type = REQ_TYPE_SPECIAL;
> + rq->cmd_flags |= REQ_SOFTBARRIER;
> + ide_do_drive_cmd(drive, rq, ide_end);
ide_do_drive_cmd() now handles only ide_preempt + it seems that previously
the ioctl would wait till the reset is complete so probably this needs to
use blk_execute_rq() instead
[...]
Oh, and now that you've fixed HDIO_DRIVE_RESET you get the following bonus:
ide_abort(), __ide_abort() and ide_driver_t.abort all can be removed in the
incremental patch! ;)
Thanks,
Bart
next prev parent reply other threads:[~2008-06-19 20:46 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-18 23:35 [PATCH] IDE: Fix HDIO_DRIVE_RESET handling Elias Oltmanns
2008-06-18 23:41 ` Elias Oltmanns
2008-06-19 20:47 ` Bartlomiej Zolnierkiewicz [this message]
2008-06-22 23:23 ` Elias Oltmanns
2008-06-22 23:28 ` Elias Oltmanns
2008-06-23 7:47 ` Elias Oltmanns
2008-06-23 22:47 ` Bartlomiej Zolnierkiewicz
2008-06-23 9:16 ` Alan Cox
2008-06-24 7:02 ` Elias Oltmanns
2008-06-24 9:10 ` Alan Cox
2008-06-23 22:41 ` Bartlomiej Zolnierkiewicz
2008-06-24 7:12 ` Elias Oltmanns
2008-06-22 23:32 ` [PATCH 2/4] IDE: Remove unused code Elias Oltmanns
2008-06-22 23:35 ` [PATCH 3/4] Update documentation of HDIO_DRIVE_RESET ioctl Elias Oltmanns
2008-06-22 23:38 ` [PATCH 4/4] IDE: Report errors during drive reset back to user space Elias Oltmanns
2008-06-23 9:18 ` [PATCH] IDE: Fix HDIO_DRIVE_RESET handling Alan Cox
2008-06-23 22:41 ` Bartlomiej Zolnierkiewicz
2008-06-24 7:23 ` Elias Oltmanns
2008-06-24 11:06 ` Bartlomiej Zolnierkiewicz
2008-06-24 12:32 ` Alan Cox
2008-06-24 13:21 ` Bartlomiej Zolnierkiewicz
2008-06-24 13:35 ` Alan Cox
2008-06-24 14:19 ` Bartlomiej Zolnierkiewicz
2008-06-24 14:33 ` Bartlomiej Zolnierkiewicz
2008-06-25 11:23 ` Elias Oltmanns
2008-06-25 11:27 ` [PATCH 1/4 v2] " Elias Oltmanns
2008-06-25 11:28 ` [PATCH 2/4 v2] IDE: Remove unused code Elias Oltmanns
2008-06-25 11:29 ` [PATCH 3/4 v2] Update documentation of HDIO_DRIVE_RESET ioctl Elias Oltmanns
2008-06-25 11:30 ` [PATCH 4/4 v2] IDE: Report errors during drive reset back to user space Elias Oltmanns
2008-06-25 20:24 ` [PATCH] IDE: Fix HDIO_DRIVE_RESET handling Bartlomiej Zolnierkiewicz
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=200806192247.25063.bzolnier@gmail.com \
--to=bzolnier@gmail.com \
--cc=eo@nebensachen.de \
--cc=linux-ide@vger.kernel.org \
/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).