All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Cc: axboe@suse.de, jgarzik@pobox.com, James.Bottomley@steeleye.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH linux-2.6-block:post-2.6.15 08/10] blk: update IDE to use new blk_ordered
Date: Sat, 19 Nov 2005 00:07:33 +0900	[thread overview]
Message-ID: <437DEE35.9060901@gmail.com> (raw)
In-Reply-To: <58cb370e0511171211p60e7c248mda477015cf1bd7c5@mail.gmail.com>

Hello, Bartlomiej.

Bartlomiej Zolnierkiewicz wrote:
> On 11/17/05, Tejun Heo <htejun@gmail.com> wrote:
> 
> I fail to see how the partial completions (good + bad sectors)
> are done in your new scheme, please explain.
> 

It doesn't.  I've noted this way back when I posted this patchset the 
second time.

http://marc.theaimsgroup.com/?l=linux-kernel&m=111795127124020&w=2

Rationales

* The actual barrier IO request is issued as a part of ordered sequence. 
  When any part of this sequence fails (any of leading flush, barrier IO 
or post flush), the whole sequence should be considered to have failed.

e.g. if leading flush fails, there's no point in reporting partial or 
full success of barrier IO.  Ditto for tailing flush.  We can special 
case when only part of barrier IO fails and report partial barrier 
success, but 1. benefits are doubtful  2. even if it's implemented, it 
wouldn't work (see next rationale)

* Barrier requests are not mergeable.  ie. Each barrier bio is turned 
into one barrier request and partially completing the request doesn't 
result in any successfully completed bio.

* SCSI doesn't handle partial completion of barrier IOs.

> 
>>-
>>-static int idedisk_prepare_flush(request_queue_t *q, struct request *rq)
>>-{
>>-       ide_drive_t *drive = q->queuedata;
>>-
>>-       if (!drive->wcache)
>>-               return 0;
> 
> 
> What does happen if somebody disables drive->wcache later?
> 

Thanks for pointing out.  I've moved ordered configuration into 
write_cache such that ordered is reconfigured when write_cache changes.

There can be in-flight barrier requests which are inconsistent with the 
newly updated setting, but 1. it's not too unfair to assume that user is 
responsible for that synchronization 2. the original implementation had 
the same issue 3. the consequence is not catastrophic.

> 
>>        memset(rq->cmd, 0, sizeof(rq->cmd));
>>
>>@@ -735,9 +694,8 @@ static int idedisk_prepare_flush(request
>>                rq->cmd[0] = WIN_FLUSH_CACHE;
>>
>>
>>-       rq->flags |= REQ_DRIVE_TASK | REQ_SOFTBARRIER;
>>+       rq->flags |= REQ_DRIVE_TASK;
>>        rq->buffer = rq->cmd;
>>-       return 1;
>> }
>>
>> static int idedisk_issue_flush(request_queue_t *q, struct gendisk *disk,
>>@@ -1012,11 +970,12 @@ static void idedisk_setup (ide_drive_t *
>>        printk(KERN_INFO "%s: cache flushes %ssupported\n",
>>                drive->name, barrier ? "" : "not ");
>>        if (barrier) {
>>-               blk_queue_ordered(drive->queue, QUEUE_ORDERED_FLUSH);
>>-               drive->queue->prepare_flush_fn = idedisk_prepare_flush;
>>-               drive->queue->end_flush_fn = idedisk_end_flush;
>>+               blk_queue_ordered(drive->queue, QUEUE_ORDERED_DRAIN_FLUSH,
>>+                                 idedisk_prepare_flush, GFP_KERNEL);
>>                blk_queue_issue_flush_fn(drive->queue, idedisk_issue_flush);
>>-       }
>>+       } else if (!drive->wcache)
>>+               blk_queue_ordered(drive->queue, QUEUE_ORDERED_DRAIN,
>>+                                 NULL, GFP_KERNEL);
> 
> 
> What does happen if somebody enables drive->wcache later?
> 

ditto.

> 
>> }
>>
>> static void ide_cacheflush_p(ide_drive_t *drive)
>>@@ -1034,6 +993,8 @@ static int ide_disk_remove(struct device
>>        struct ide_disk_obj *idkp = drive->driver_data;
>>        struct gendisk *g = idkp->disk;
>>
>>+       blk_queue_ordered(drive->queue, QUEUE_ORDERED_NONE, NULL, 0);
>>+
> 
> 
> Shouldn't this be done in ide_disk_release()?

Hmmm... The thing is that, AFAIK, requests are not supposed to be issued 
after ->remove is called (->remove is called only on module unload 
unless hardware is hot-unplugged and HL driver cannot be unloaded while 
it's still opened).  I think that's why both sd and ide-disk issue the 
last cache flush in ->remove callbacks but not in ->release.

I think the most natural place to put ordered deconfiguration is right 
above the last cache flush.  Hmmm... If above is not true, I think we 
should move both ordered deconfig and the last cache flushes to 
->release callbacks.  What do you think?

Thanks.

-- 
tejun

  reply	other threads:[~2005-11-18 15:07 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-17 15:36 [PATCH linux-2.6-block:post-2.6.15 00/10] blk: reimplementation of I/O barrier Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 01/10] blk: add @uptodate to end_that_request_last() and @error to rq_end_io_fn() Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 02/10] blk: separate out bio init part from __make_request Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 03/10] blk: reimplement handling of barrier request Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 04/10] blk: update SCSI to use new blk_ordered Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 05/10] blk: add FUA support to SCSI disk Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 06/10] blk: update libata to use new blk_ordered Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 07/10] blk: add FUA support to libata Tejun Heo
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 08/10] blk: update IDE to use new blk_ordered Tejun Heo
2005-11-17 20:11   ` Bartlomiej Zolnierkiewicz
2005-11-18 15:07     ` Tejun Heo [this message]
2005-11-18 15:59       ` Bartlomiej Zolnierkiewicz
2005-11-22  2:44         ` Tejun Heo
2005-11-22  8:36           ` Bartlomiej Zolnierkiewicz
2005-11-22  8:39             ` Bartlomiej Zolnierkiewicz
2005-11-23  7:23             ` Tejun Heo
2005-11-23  8:40               ` Bartlomiej Zolnierkiewicz
2005-11-23  8:46                 ` Jens Axboe
2005-11-23  9:00                   ` Tejun
2005-11-23  9:05                     ` Bartlomiej Zolnierkiewicz
2005-11-17 15:36 ` [PATCH linux-2.6-block:post-2.6.15 09/10] blk: add FUA support to IDE Tejun Heo
2005-11-17 20:39   ` Bartlomiej Zolnierkiewicz
2005-11-18 15:25     ` Tejun Heo
2005-11-18 16:17       ` Bartlomiej Zolnierkiewicz
2005-11-18 17:02         ` Alan Cox
2005-11-18 16:38           ` Bartlomiej Zolnierkiewicz
2005-11-18 17:41             ` Alan Cox
2005-11-24 11:58         ` Tejun Heo
2005-11-24 12:21           ` Tejun Heo
2005-11-24 14:21             ` Bartlomiej Zolnierkiewicz
2005-11-17 15:37 ` [PATCH linux-2.6-block:post-2.6.15 10/10] blk: I/O barrier documentation Tejun Heo
2005-11-17 16:20 ` [PATCH linux-2.6-block:post-2.6.15 00/10] blk: reimplementation of I/O barrier Jeff Garzik

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=437DEE35.9060901@gmail.com \
    --to=htejun@gmail.com \
    --cc=James.Bottomley@steeleye.com \
    --cc=axboe@suse.de \
    --cc=bzolnier@gmail.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.