public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* please DON'T run 2.5.27 with IDE!
@ 2002-07-22 19:37 Bartlomiej Zolnierkiewicz
  2002-07-22 20:39 ` Andries Brouwer
                   ` (2 more replies)
  0 siblings, 3 replies; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-22 19:37 UTC (permalink / raw)
  To: Kernel Mailing List; +Cc: martin


IDE 99 which is included in 2.5.27 introduced really nasty bug.
Possible lockups and data corruption. Please do not.

Regards
--
Bartlomiej


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
@ 2002-07-22 19:43 Petr Vandrovec
  2002-07-22 19:46 ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Petr Vandrovec @ 2002-07-22 19:43 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, linux-kernel

On 22 Jul 02 at 21:37, Bartlomiej Zolnierkiewicz wrote:

> IDE 99 which is included in 2.5.27 introduced really nasty bug.
> Possible lockups and data corruption. Please do not.

Too late... what should I expect?
                                                Petr Vandrovec
                                                
                                                

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-22 19:43 Petr Vandrovec
@ 2002-07-22 19:46 ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-22 19:46 UTC (permalink / raw)
  To: Petr Vandrovec; +Cc: martin, linux-kernel


On Mon, 22 Jul 2002, Petr Vandrovec wrote:

> On 22 Jul 02 at 21:37, Bartlomiej Zolnierkiewicz wrote:
>
> > IDE 99 which is included in 2.5.27 introduced really nasty bug.
> > Possible lockups and data corruption. Please do not.
>
> Too late... what should I expect?

Ask Martin ;-).
BTW> I have a luck: compiled kernel + modules, lilo, was thinking about
     reboot and I remebered myself to go through IDE 99.

Regards
--
Bartlomiej

>                                                Petr Vandrovec
>


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-22 19:37 please DON'T run 2.5.27 with IDE! Bartlomiej Zolnierkiewicz
@ 2002-07-22 20:39 ` Andries Brouwer
  2002-07-22 23:25   ` Thunder from the hill
  2002-07-23  0:39 ` A Guy Called Tyketto
  2002-07-23  8:03 ` Morten Helgesen
  2 siblings, 1 reply; 35+ messages in thread
From: Andries Brouwer @ 2002-07-22 20:39 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: Kernel Mailing List, martin

On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:

> IDE 99 which is included in 2.5.27 introduced really nasty bug.
> Possible lockups and data corruption. Please do not.

On the other hand, thanks to Jens, I have been running 2.5.27 with 2.4 IDE
now for two days without any IDE-related trouble.

Andries


[usb still has some problems - hotplug is difficult;
another funny is that for me netscape 4.79 with flash works
under 2.4.17 and doesn't work under 2.5.25 or 2.5.27; have
not yet tried to trace it down; does this sound like
something well-known?]

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-22 20:39 ` Andries Brouwer
@ 2002-07-22 23:25   ` Thunder from the hill
  0 siblings, 0 replies; 35+ messages in thread
From: Thunder from the hill @ 2002-07-22 23:25 UTC (permalink / raw)
  To: Andries Brouwer; +Cc: Bartlomiej Zolnierkiewicz, Kernel Mailing List, martin

Hi,

On Mon, 22 Jul 2002, Andries Brouwer wrote:
> another funny is that for me netscape 4.79 with flash works
> under 2.4.17 and doesn't work under 2.5.25 or 2.5.27; have
> not yet tried to trace it down; does this sound like
> something well-known?

I use to get SIGBUS w/Netscape 4 all over the place. The well-working 
versions are 3 Gold (almost no crashes, but ugly), 4.79 works sometimes, 
and 6 works just fine, except the usual crap since they inherited an older 
version of Mozilla...

I'm not sure if the Netscape 4 crashes are supposed to be kernel bugs...

							Regards,
							Thunder
-- 
(Use http://www.ebb.org/ungeek if you can't decode)
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GCS/E/G/S/AT d- s++:-- a? C++$ ULAVHI++++$ P++$ L++++(+++++)$ E W-$
N--- o?  K? w-- O- M V$ PS+ PE- Y- PGP+ t+ 5+ X+ R- !tv b++ DI? !D G
e++++ h* r--- y- 
------END GEEK CODE BLOCK------


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-22 19:37 please DON'T run 2.5.27 with IDE! Bartlomiej Zolnierkiewicz
  2002-07-22 20:39 ` Andries Brouwer
@ 2002-07-23  0:39 ` A Guy Called Tyketto
  2002-07-23  0:58   ` Thunder from the hill
  2002-07-23  8:03 ` Morten Helgesen
  2 siblings, 1 reply; 35+ messages in thread
From: A Guy Called Tyketto @ 2002-07-23  0:39 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: linux-kernel

On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:
> 
> IDE 99 which is included in 2.5.27 introduced really nasty bug.
> Possible lockups and data corruption. Please do not.
> 
> Regards
> --
> Bartlomiej

        Okay.. I have to ask the question.. Which version of IDE does 2.5.27 
have? you're saying IDE 99. According to the changelog Linus threw out with 
2.5.27:

Martin Dalecki <dalecki@evision-ventures.com>:
  o 2.5.26 IDE 99
  o IDE 100

        With this, I'm assuming 2.5.27 has IDE 100 in it, patched up from IDE 
99. Correct me if I'm wrong.

                                                        BL.
-- 
Brad Littlejohn                         | Email:        tyketto@wizard.com
Unix Systems Administrator,             |           tyketto@ozemail.com.au
Web + NewsMaster, BOFH.. Smeghead! :)   |   http://www.wizard.com/~tyketto
  PGP: 1024D/E319F0BF 6980 AAD6 7329 E9E6 D569  F620 C819 199A E319 F0BF


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23  0:39 ` A Guy Called Tyketto
@ 2002-07-23  0:58   ` Thunder from the hill
  2002-07-23  1:10     ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Thunder from the hill @ 2002-07-23  0:58 UTC (permalink / raw)
  To: A Guy Called Tyketto; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel

Hi,

On Mon, 22 Jul 2002, A Guy Called Tyketto wrote:
> With this, I'm assuming 2.5.27 has IDE 100 in it, patched up from IDE
> 99. Correct me if I'm wrong.

Introducing a bug in 99 doesn't mean it has to be fixed in 100. However, 
it might be. Martin, could you please tell us more about it?

BTW, where did we end up? We don't even know the current IDE state...

							Regards,
							Thunder
-- 
(Use http://www.ebb.org/ungeek if you can't decode)
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GCS/E/G/S/AT d- s++:-- a? C++$ ULAVHI++++$ P++$ L++++(+++++)$ E W-$
N--- o?  K? w-- O- M V$ PS+ PE- Y- PGP+ t+ 5+ X+ R- !tv b++ DI? !D G
e++++ h* r--- y- 
------END GEEK CODE BLOCK------


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23  0:58   ` Thunder from the hill
@ 2002-07-23  1:10     ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-23  1:10 UTC (permalink / raw)
  To: Thunder from the hill; +Cc: A Guy Called Tyketto, linux-kernel


On Mon, 22 Jul 2002, Thunder from the hill wrote:

> Hi,
>
> On Mon, 22 Jul 2002, A Guy Called Tyketto wrote:
> > With this, I'm assuming 2.5.27 has IDE 100 in it, patched up from IDE
> > 99. Correct me if I'm wrong.

Hi,

You are wrong. ;-)
IDE patches are incremetnal, IDE 100 is incremental to IDE 99.
Both are in 2.5.27.

 > Introducing a bug in 99 doesn't mean it has to be fixed in 100. However,
> it might be. Martin, could you please tell us more about it?

It IS NOT. IDE 100 is a trivia patch indendation + initializers etc.

>
> BTW, where did we end up? We don't even know the current IDE state...
>
> 							Regards,
> 							Thunder
> --
> (Use http://www.ebb.org/ungeek if you can't decode)
> ------BEGIN GEEK CODE BLOCK------
> Version: 3.12
> GCS/E/G/S/AT d- s++:-- a? C++$ ULAVHI++++$ P++$ L++++(+++++)$ E W-$
> N--- o?  K? w-- O- M V$ PS+ PE- Y- PGP+ t+ 5+ X+ R- !tv b++ DI? !D G
> e++++ h* r--- y-
> ------END GEEK CODE BLOCK------


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-22 19:37 please DON'T run 2.5.27 with IDE! Bartlomiej Zolnierkiewicz
  2002-07-22 20:39 ` Andries Brouwer
  2002-07-23  0:39 ` A Guy Called Tyketto
@ 2002-07-23  8:03 ` Morten Helgesen
  2002-07-23 12:47   ` Bartlomiej Zolnierkiewicz
  2 siblings, 1 reply; 35+ messages in thread
From: Morten Helgesen @ 2002-07-23  8:03 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: linux-kernel

On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:
> 
> IDE 99 which is included in 2.5.27 introduced really nasty bug.
> Possible lockups and data corruption. Please do not.

Could you please elaborate a bit ? 

> 
> Regards
> --
> Bartlomiej

-- 

"Livet er ikke for nybegynnere" - sitat fra en klok person.

mvh
Morten Helgesen 
UNIX System Administrator & C Developer 
Nextframe AS
admin@nextframe.net / 93445641
http://www.nextframe.net

^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23  8:03 ` Morten Helgesen
@ 2002-07-23 12:47   ` Bartlomiej Zolnierkiewicz
  2002-07-23 13:00     ` Marcin Dalecki
  0 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-23 12:47 UTC (permalink / raw)
  To: Morten Helgesen; +Cc: linux-kernel


On Tue, 23 Jul 2002, Morten Helgesen wrote:

> On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:
> >
> > IDE 99 which is included in 2.5.27 introduced really nasty bug.
> > Possible lockups and data corruption. Please do not.
>
> Could you please elaborate a bit ?

Bug is a result of Martin being careless and not sending patches for
public review. It is easy to fix, but I won't, please excuse me.
Also I wont go in technical details, lets see how quick it will be fixed.

Regards
--
Bartlomiej

> >
> > Regards
> > --
> > Bartlomiej
>
> --
>
> "Livet er ikke for nybegynnere" - sitat fra en klok person.
>
> mvh
> Morten Helgesen
> UNIX System Administrator & C Developer
> Nextframe AS
> admin@nextframe.net / 93445641
> http://www.nextframe.net
>


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 12:47   ` Bartlomiej Zolnierkiewicz
@ 2002-07-23 13:00     ` Marcin Dalecki
  2002-07-23 13:42       ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-23 13:00 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: Morten Helgesen, linux-kernel

Bartlomiej Zolnierkiewicz wrote:
> On Tue, 23 Jul 2002, Morten Helgesen wrote:
> 
> 
>>On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:
>>
>>>IDE 99 which is included in 2.5.27 introduced really nasty bug.
>>>Possible lockups and data corruption. Please do not.
>>
>>Could you please elaborate a bit ?
> 
> 
> Bug is a result of Martin being careless and not sending patches for
> public review. It is easy to fix, but I won't, please excuse me.
> Also I wont go in technical details, lets see how quick it will be fixed.

The problem is of a somehow general nature.
Many of the block devices *need* a mechanism to run commands
asynchronously. The most preffered way to do this is
of course to go by the already present request queue.
However the generic queue handling layer
doesn't give us any mechanism to actually stuff
request from the driver and it doesn't behave well in boundary
conditions where the queues are nearly full.

So every single subsystem is (or at least should be) repeating something
along the lines of the following...

tatic void __scsi_insert_special(request_queue_t *q, struct request *rq,
				  void *data, int at_head)
{
	unsigned long flags;

	ASSERT_LOCK(q->queue_lock, 0);

	/*
	 * tell I/O scheduler that this isn't a regular read/write (ie
	 * must not attempt merges on this) and that it acts as a soft
	 * barrier
	 */
	rq->flags &= REQ_QUEUED;
	rq->flags |= REQ_SPECIAL | REQ_BARRIER;

	rq->special = data;

	spin_lock_irqsave(q->queue_lock, flags);
	/* If command is tagged, release the tag */
	if(blk_rq_tagged(rq))
		blk_queue_end_tag(q, rq);
	_elv_add_request(q, rq, !at_head, 0);
	q->request_fn(q);
	spin_unlock_irqrestore(q->queue_lock, flags);
}


int scsi_insert_special_req(Scsi_Request * SRpnt, int at_head)
{
	request_queue_t *q = &SRpnt->sr_device->request_queue;

	__scsi_insert_special(q, SRpnt->sr_request, SRpnt, at_head);
	return 0;
}

Well actually the proper patch will be modelled after what
is done in SCSI. Or maybe even unifying both.
At least it is immediately "obvious" that __scsi_insert_request()
has a signature which doesn't have anything to do with the SCSI
subsystem.
Becouse it is clear from the above as well
that for example at least setting the rq->flags should
be common among every kind of subsystem and it shouldn't
be done inside the subsystems implementation of this
method, since the flags are of a generic nature and there
are changes in this area from time to time.


For now the following *should* do for IDE:

===== drivers/ide/ide-taskfile.c 1.61 vs edited =====
--- 1.61/drivers/ide/ide-taskfile.c	Fri Jul 19 10:18:50 2002
+++ edited/drivers/ide/ide-taskfile.c	Tue Jul 23 12:12:55 2002
@@ -194,22 +194,16 @@
  	request_queue_t *q = &drive->queue;
  	struct list_head *queue_head = &q->queue_head;
  	DECLARE_COMPLETION(wait);
+	struct request req;

  #ifdef CONFIG_BLK_DEV_PDC4030
  	if (ch->chipset == ide_pdc4030 && buf)
  		return -ENOSYS;  /* special drive cmds not supported */
  #endif

-	rq = __blk_get_request(&drive->queue, READ);
-	if (!rq)
-		rq = __blk_get_request(&drive->queue, WRITE);
-
-	/*
-	 * FIXME: Make sure there is a free slot on the list!
-	 */
-
-	BUG_ON(!rq);
-
+	memset(&req, 0, sizeof(req));
+	rq = &req;
+	
  	rq->flags = REQ_SPECIAL;
  	rq->buffer = buf;
  	rq->special = ar;


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 13:00     ` Marcin Dalecki
@ 2002-07-23 13:42       ` Bartlomiej Zolnierkiewicz
  2002-07-23 13:58         ` Marcin Dalecki
  0 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-23 13:42 UTC (permalink / raw)
  To: martin; +Cc: Morten Helgesen, linux-kernel


On Tue, 23 Jul 2002, Marcin Dalecki wrote:

> Bartlomiej Zolnierkiewicz wrote:
> > On Tue, 23 Jul 2002, Morten Helgesen wrote:
> >
> >
> >>On Mon, Jul 22, 2002 at 09:37:13PM +0200, Bartlomiej Zolnierkiewicz wrote:
> >>
> >>>IDE 99 which is included in 2.5.27 introduced really nasty bug.
> >>>Possible lockups and data corruption. Please do not.
> >>
> >>Could you please elaborate a bit ?
> >
> >
> > Bug is a result of Martin being careless and not sending patches for
> > public review. It is easy to fix, but I won't, please excuse me.
> > Also I wont go in technical details, lets see how quick it will be fixed.
>
> The problem is of a somehow general nature.
> Many of the block devices *need* a mechanism to run commands
> asynchronously. The most preffered way to do this is

Problem is of getting completion status of this commands
asynchronously, they are all run synchronously through request queue.

> of course to go by the already present request queue.
> However the generic queue handling layer
> doesn't give us any mechanism to actually stuff
> request from the driver and it doesn't behave well in boundary
> conditions where the queues are nearly full.
>
> So every single subsystem is (or at least should be) repeating something
> along the lines of the following...
>
> tatic void __scsi_insert_special(request_queue_t *q, struct request *rq,
> 				  void *data, int at_head)
> {
> 	unsigned long flags;
>
> 	ASSERT_LOCK(q->queue_lock, 0);
>
> 	/*
> 	 * tell I/O scheduler that this isn't a regular read/write (ie
> 	 * must not attempt merges on this) and that it acts as a soft
> 	 * barrier
> 	 */
> 	rq->flags &= REQ_QUEUED;
> 	rq->flags |= REQ_SPECIAL | REQ_BARRIER;
>
> 	rq->special = data;
>
> 	spin_lock_irqsave(q->queue_lock, flags);
> 	/* If command is tagged, release the tag */
> 	if(blk_rq_tagged(rq))
> 		blk_queue_end_tag(q, rq);
> 	_elv_add_request(q, rq, !at_head, 0);
> 	q->request_fn(q);
> 	spin_unlock_irqrestore(q->queue_lock, flags);
> }
>
>
> int scsi_insert_special_req(Scsi_Request * SRpnt, int at_head)
> {
> 	request_queue_t *q = &SRpnt->sr_device->request_queue;
>
> 	__scsi_insert_special(q, SRpnt->sr_request, SRpnt, at_head);
> 	return 0;
> }
>
> Well actually the proper patch will be modelled after what
> is done in SCSI. Or maybe even unifying both.
> At least it is immediately "obvious" that __scsi_insert_request()
> has a signature which doesn't have anything to do with the SCSI
> subsystem.
> Becouse it is clear from the above as well
> that for example at least setting the rq->flags should
> be common among every kind of subsystem and it shouldn't
> be done inside the subsystems implementation of this
> method, since the flags are of a generic nature and there
> are changes in this area from time to time.
>
>
> For now the following *should* do for IDE:

Martin why aren't you telling people all facts?
It was the default behaviour before your change in IDE 99.
This patch in practice reverts IDE 99 change.

You have INTRODUCED a bug and now you try to
pretend that it wasn't your fault and it was somehow broken before.
Before 2.5.27 code had the same functionality as scsi version.
And yes it will be useful to move it to block layer.

Regards
--
Bartlomiej

> ===== drivers/ide/ide-taskfile.c 1.61 vs edited =====
> --- 1.61/drivers/ide/ide-taskfile.c	Fri Jul 19 10:18:50 2002
> +++ edited/drivers/ide/ide-taskfile.c	Tue Jul 23 12:12:55 2002
> @@ -194,22 +194,16 @@
>   	request_queue_t *q = &drive->queue;
>   	struct list_head *queue_head = &q->queue_head;
>   	DECLARE_COMPLETION(wait);
> +	struct request req;
>
>   #ifdef CONFIG_BLK_DEV_PDC4030
>   	if (ch->chipset == ide_pdc4030 && buf)
>   		return -ENOSYS;  /* special drive cmds not supported */
>   #endif
>
> -	rq = __blk_get_request(&drive->queue, READ);
> -	if (!rq)
> -		rq = __blk_get_request(&drive->queue, WRITE);
> -
> -	/*
> -	 * FIXME: Make sure there is a free slot on the list!
> -	 */
> -
> -	BUG_ON(!rq);
> -
> +	memset(&req, 0, sizeof(req));
> +	rq = &req;
> +
>   	rq->flags = REQ_SPECIAL;
>   	rq->buffer = buf;
>   	rq->special = ar;
>


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 13:42       ` Bartlomiej Zolnierkiewicz
@ 2002-07-23 13:58         ` Marcin Dalecki
  2002-07-23 19:52           ` Jan Harkes
  2002-07-23 20:24           ` Bartlomiej Zolnierkiewicz
  0 siblings, 2 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-23 13:58 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, Morten Helgesen, linux-kernel

Bartlomiej Zolnierkiewicz wrote:

> Martin why aren't you telling people all facts?
> It was the default behaviour before your change in IDE 99.
> This patch in practice reverts IDE 99 change.
> 
> You have INTRODUCED a bug and now you try to
> pretend that it wasn't your fault and it was somehow broken before.

Never said that. Sure it was my fault I looked in the wrong direction
I looked at the ide-tcq code, becouse I still dont like the
idea that we pass a pointer for a struct on the local stack down.
(It's preventing the futile hope to make this thingee somehow 
asynchronous form ever taking place.)

I should have looked at SCSI in first place instead indeed.

> Before 2.5.27 code had the same functionality as scsi version.

That's actually not true... At least the setting of the
request rq->flags is significantly different here and there.
However I think but I'm not sure that the fact aht we have rq->special 
!= NULL here has the hidded side effect that we indeed accomplish the
same semantics.

> And yes it will be useful to move it to block layer.

Done. Just needs testing. I have at least an ZIP parport drive, which
allows me to do some basic checks.


BTW.> Having a fill up request queue trashing data transfers
is indicating that there may be are bugs in the generic block layer too. 
If it gets pushed to boundary conditions it's apparently not very 
robust... BTW.> I never ever will understand why
request_fn returns void instead of an status value.
It could save many places where evry single driver
has to call end_request explicitely.



> Regards
> --
> Bartlomiej
> 
> 
>>===== drivers/ide/ide-taskfile.c 1.61 vs edited =====
>>--- 1.61/drivers/ide/ide-taskfile.c	Fri Jul 19 10:18:50 2002
>>+++ edited/drivers/ide/ide-taskfile.c	Tue Jul 23 12:12:55 2002
>>@@ -194,22 +194,16 @@
>>  	request_queue_t *q = &drive->queue;
>>  	struct list_head *queue_head = &q->queue_head;
>>  	DECLARE_COMPLETION(wait);
>>+	struct request req;
>>
>>  #ifdef CONFIG_BLK_DEV_PDC4030
>>  	if (ch->chipset == ide_pdc4030 && buf)
>>  		return -ENOSYS;  /* special drive cmds not supported */
>>  #endif
>>
>>-	rq = __blk_get_request(&drive->queue, READ);
>>-	if (!rq)
>>-		rq = __blk_get_request(&drive->queue, WRITE);
>>-
>>-	/*
>>-	 * FIXME: Make sure there is a free slot on the list!
>>-	 */
>>-
>>-	BUG_ON(!rq);
>>-
>>+	memset(&req, 0, sizeof(req));
>>+	rq = &req;
>>+
>>  	rq->flags = REQ_SPECIAL;
>>  	rq->buffer = buf;
>>  	rq->special = ar;
>>
> 
> 
> 




^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 13:58         ` Marcin Dalecki
@ 2002-07-23 19:52           ` Jan Harkes
  2002-07-23 20:08             ` Andre Hedrick
  2002-07-24 10:24             ` Marcin Dalecki
  2002-07-23 20:24           ` Bartlomiej Zolnierkiewicz
  1 sibling, 2 replies; 35+ messages in thread
From: Jan Harkes @ 2002-07-23 19:52 UTC (permalink / raw)
  To: linux-kernel

On Tue, Jul 23, 2002 at 03:58:58PM +0200, Marcin Dalecki wrote:
> That's actually not true... At least the setting of the
> request rq->flags is significantly different here and there.
> However I think but I'm not sure that the fact aht we have rq->special 
> != NULL here has the hidded side effect that we indeed accomplish the
> same semantics.
> 
> >And yes it will be useful to move it to block layer.
> 
> Done. Just needs testing. I have at least an ZIP parport drive, which
> allows me to do some basic checks.

Ehh, you are testing all those IDE changes with a ZIP drive connected to
the parallel port? Don't you have any real IDE devices?? I'm sure we can
all chip in and buy you a drive if you need one.

Jan


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 19:52           ` Jan Harkes
@ 2002-07-23 20:08             ` Andre Hedrick
  2002-07-24 10:24             ` Marcin Dalecki
  1 sibling, 0 replies; 35+ messages in thread
From: Andre Hedrick @ 2002-07-23 20:08 UTC (permalink / raw)
  To: Jan Harkes; +Cc: linux-kernel

On Tue, 23 Jul 2002, Jan Harkes wrote:

> On Tue, Jul 23, 2002 at 03:58:58PM +0200, Marcin Dalecki wrote:
> > That's actually not true... At least the setting of the
> > request rq->flags is significantly different here and there.
> > However I think but I'm not sure that the fact aht we have rq->special 
> > != NULL here has the hidded side effect that we indeed accomplish the
> > same semantics.
> > 
> > >And yes it will be useful to move it to block layer.
> > 
> > Done. Just needs testing. I have at least an ZIP parport drive, which
> > allows me to do some basic checks.
> 
> Ehh, you are testing all those IDE changes with a ZIP drive connected to
> the parallel port? Don't you have any real IDE devices?? I'm sure we can
> all chip in and buy you a drive if you need one.

Would be faster to get a real maintainer, but nobody cares about actually
finishing 2.5 or they would find one that could actually make it work
proper.

Andre Hedrick
LAD Storage Consulting Group

-------------------------------------------------------
2.4, has crappy code, an arse-hole maintainer, and a working safe driver.
2.5, erm "Two of Three, ain't BAD"


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 13:58         ` Marcin Dalecki
  2002-07-23 19:52           ` Jan Harkes
@ 2002-07-23 20:24           ` Bartlomiej Zolnierkiewicz
  2002-07-24 10:30             ` Marcin Dalecki
  1 sibling, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-23 20:24 UTC (permalink / raw)
  To: martin; +Cc: Morten Helgesen, linux-kernel


 Tue, 23 Jul 2002, Marcin Dalecki wrote:

> Bartlomiej Zolnierkiewicz wrote:
>
> > Martin why aren't you telling people all facts?
> > It was the default behaviour before your change in IDE 99.
> > This patch in practice reverts IDE 99 change.
> >
> > You have INTRODUCED a bug and now you try to
> > pretend that it wasn't your fault and it was somehow broken before.
>
> Never said that. Sure it was my fault I looked in the wrong direction
> I looked at the ide-tcq code, becouse I still dont like the
> idea that we pass a pointer for a struct on the local stack down.
> (It's preventing the futile hope to make this thingee somehow
> asynchronous form ever taking place.)
>
> I should have looked at SCSI in first place instead indeed.
>
> > Before 2.5.27 code had the same functionality as scsi version.
>
> That's actually not true... At least the setting of the
> request rq->flags is significantly different here and there.

You are right here...
Actually IDE request should have REQ_BARRIER bit also set for safety
and coherency.
Without barrier requests added after special command can be merged
with requests added before special command.

> However I think but I'm not sure that the fact aht we have rq->special
> != NULL here has the hidded side effect that we indeed accomplish the
> same semantics.

No.

> > And yes it will be useful to move it to block layer.
>
> Done. Just needs testing. I have at least an ZIP parport drive, which
> allows me to do some basic checks.

Test everything on your production machine + main hdd.
Will make you care more about code correctness ;-).

>
> BTW.> Having a fill up request queue trashing data transfers
> is indicating that there may be are bugs in the generic block layer too.
> If it gets pushed to boundary conditions it's apparently not very

No it wasn't "pushed to boundary conditions", you screwed it, sorry.

> robust... BTW.> I never ever will understand why
> request_fn returns void instead of an status value.

So look at ide.c for example.

Regards
--
Bartlomiej

> It could save many places where evry single driver
> has to call end_request explicitely.
>
>
>
> > Regards
> > --
> > Bartlomiej
> >
> >
> >>===== drivers/ide/ide-taskfile.c 1.61 vs edited =====
> >>--- 1.61/drivers/ide/ide-taskfile.c	Fri Jul 19 10:18:50 2002
> >>+++ edited/drivers/ide/ide-taskfile.c	Tue Jul 23 12:12:55 2002
> >>@@ -194,22 +194,16 @@
> >>  	request_queue_t *q = &drive->queue;
> >>  	struct list_head *queue_head = &q->queue_head;
> >>  	DECLARE_COMPLETION(wait);
> >>+	struct request req;
> >>
> >>  #ifdef CONFIG_BLK_DEV_PDC4030
> >>  	if (ch->chipset == ide_pdc4030 && buf)
> >>  		return -ENOSYS;  /* special drive cmds not supported */
> >>  #endif
> >>
> >>-	rq = __blk_get_request(&drive->queue, READ);
> >>-	if (!rq)
> >>-		rq = __blk_get_request(&drive->queue, WRITE);
> >>-
> >>-	/*
> >>-	 * FIXME: Make sure there is a free slot on the list!
> >>-	 */
> >>-
> >>-	BUG_ON(!rq);
> >>-
> >>+	memset(&req, 0, sizeof(req));
> >>+	rq = &req;
> >>+
> >>  	rq->flags = REQ_SPECIAL;
> >>  	rq->buffer = buf;
> >>  	rq->special = ar;
> >>
> >
> >
> >
>
>
>



^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 19:52           ` Jan Harkes
  2002-07-23 20:08             ` Andre Hedrick
@ 2002-07-24 10:24             ` Marcin Dalecki
  1 sibling, 0 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 10:24 UTC (permalink / raw)
  To: Jan Harkes; +Cc: linux-kernel

Jan Harkes wrote:
> On Tue, Jul 23, 2002 at 03:58:58PM +0200, Marcin Dalecki wrote:
> 
>>That's actually not true... At least the setting of the
>>request rq->flags is significantly different here and there.
>>However I think but I'm not sure that the fact aht we have rq->special 
>>!= NULL here has the hidded side effect that we indeed accomplish the
>>same semantics.
>>
>>
>>>And yes it will be useful to move it to block layer.
>>
>>Done. Just needs testing. I have at least an ZIP parport drive, which
>>allows me to do some basic checks.
> 
> 
> Ehh, you are testing all those IDE changes with a ZIP drive connected to
> the parallel port? Don't you have any real IDE devices?? I'm sure we can
> all chip in and buy you a drive if you need one.

For Gods sake not! The ZIP drive is a SCSI device. And the change to the
SCSI subsystems involves only trivial code movearound. For this
purpose it should be sufficient to trigger it with the above device.


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-23 20:24           ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 10:30             ` Marcin Dalecki
  2002-07-24 10:54               ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 10:30 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, Morten Helgesen, linux-kernel

Bartlomiej Zolnierkiewicz wrote:
>  Tue, 23 Jul 2002, Marcin Dalecki wrote:
> 
> 
>>Bartlomiej Zolnierkiewicz wrote:
>>
>>
>>>Martin why aren't you telling people all facts?
>>>It was the default behaviour before your change in IDE 99.
>>>This patch in practice reverts IDE 99 change.
>>>
>>>You have INTRODUCED a bug and now you try to
>>>pretend that it wasn't your fault and it was somehow broken before.
>>
>>Never said that. Sure it was my fault I looked in the wrong direction
>>I looked at the ide-tcq code, becouse I still dont like the
>>idea that we pass a pointer for a struct on the local stack down.
>>(It's preventing the futile hope to make this thingee somehow
>>asynchronous form ever taking place.)
>>
>>I should have looked at SCSI in first place instead indeed.
>>
>>
>>>Before 2.5.27 code had the same functionality as scsi version.
>>
>>That's actually not true... At least the setting of the
>>request rq->flags is significantly different here and there.
> 
> 
> You are right here...
> Actually IDE request should have REQ_BARRIER bit also set for safety
> and coherency.
> Without barrier requests added after special command can be merged
> with requests added before special command.
> 
> 
>>However I think but I'm not sure that the fact aht we have rq->special
>>!= NULL here has the hidded side effect that we indeed accomplish the
>>same semantics.
> 
> 
> No.

There are some nasty checks for it != NULL in the generic BIO code.
And REQ_BARRIER got introduced just recently, so we can see the
error will have been propagated.

>>>And yes it will be useful to move it to block layer.
>>
>>Done. Just needs testing. I have at least an ZIP parport drive, which
>>allows me to do some basic checks.
> 
> 
> Test everything on your production machine + main hdd.
> Will make you care more about code correctness ;-).

Nah... that's just for the SCSI code "move around". The rest
I usually run continuously on two systems.

>>BTW.> Having a fill up request queue trashing data transfers
>>is indicating that there may be are bugs in the generic block layer too.
>>If it gets pushed to boundary conditions it's apparently not very
> 
> 
> No it wasn't "pushed to boundary conditions", you screwed it, sorry.
> 
> 
>>robust... BTW.> I never ever will understand why
>>request_fn returns void instead of an status value.
> 
> 
> So look at ide.c for example.

So look at drivers which call blk_start_queue() from within 
q->request_fn context, which is, well, causing deliberate *recursion*.


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 10:30             ` Marcin Dalecki
@ 2002-07-24 10:54               ` Bartlomiej Zolnierkiewicz
  2002-07-24 11:35                 ` Marcin Dalecki
  0 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 10:54 UTC (permalink / raw)
  To: martin; +Cc: Morten Helgesen, linux-kernel


On Wed, 24 Jul 2002, Marcin Dalecki wrote:

> Bartlomiej Zolnierkiewicz wrote:
> >  Tue, 23 Jul 2002, Marcin Dalecki wrote:
> >
> >>Bartlomiej Zolnierkiewicz wrote:
> >>
> >>>Martin why aren't you telling people all facts?
> >>>It was the default behaviour before your change in IDE 99.
> >>>This patch in practice reverts IDE 99 change.
> >>>
> >>>You have INTRODUCED a bug and now you try to
> >>>pretend that it wasn't your fault and it was somehow broken before.
> >>
> >>Never said that. Sure it was my fault I looked in the wrong direction
> >>I looked at the ide-tcq code, becouse I still dont like the
> >>idea that we pass a pointer for a struct on the local stack down.
> >>(It's preventing the futile hope to make this thingee somehow
> >>asynchronous form ever taking place.)
> >>
> >>I should have looked at SCSI in first place instead indeed.
> >>
> >>
> >>>Before 2.5.27 code had the same functionality as scsi version.
> >>
> >>That's actually not true... At least the setting of the
> >>request rq->flags is significantly different here and there.
> >
> >
> > You are right here...
> > Actually IDE request should have REQ_BARRIER bit also set for safety
> > and coherency.
> > Without barrier requests added after special command can be merged
> > with requests added before special command.
> >
> >
> >>However I think but I'm not sure that the fact aht we have rq->special
> >>!= NULL here has the hidded side effect that we indeed accomplish the
> >>same semantics.
> >
> >
> > No.
>
> There are some nasty checks for it != NULL in the generic BIO code.

No, there are no checks there.

> And REQ_BARRIER got introduced just recently, so we can see the
> error will have been propagated.
>
> >>>And yes it will be useful to move it to block layer.
> >>
> >>Done. Just needs testing. I have at least an ZIP parport drive, which
> >>allows me to do some basic checks.
> >
> >
> > Test everything on your production machine + main hdd.
> > Will make you care more about code correctness ;-).
>
> Nah... that's just for the SCSI code "move around". The rest
> I usually run continuously on two systems.
>
> >>BTW.> Having a fill up request queue trashing data transfers
> >>is indicating that there may be are bugs in the generic block layer too.
> >>If it gets pushed to boundary conditions it's apparently not very
> >
> >
> > No it wasn't "pushed to boundary conditions", you screwed it, sorry.
> >
> >
> >>robust... BTW.> I never ever will understand why
> >>request_fn returns void instead of an status value.
> >
> >
> > So look at ide.c for example.
>
> So look at drivers which call blk_start_queue() from within
> q->request_fn context, which is, well, causing deliberate *recursion*.
>

Are you sure? If so they should first check whether queue is
started/stopped, if they don't it is a bug.

Look once agin at ide.c, it is called, starts request (if not busy) and
returns, no waiting for finishing request == no return value.

Regards
--
Bartlomiej


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 10:54               ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 11:35                 ` Marcin Dalecki
  2002-07-24 11:53                   ` Jens Axboe
                                     ` (2 more replies)
  0 siblings, 3 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 11:35 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: linux-kernel

Bartlomiej Zolnierkiewicz wrote:

>>There are some nasty checks for it != NULL in the generic BIO code.
> 
> 
> No, there are no checks there.

Hello?:

[root@localhost block]# grep \>special *.c
elevator.c:         !rq->waiting && !rq->special)
^^^^^^ This one is supposed to have the required barrier effect.
ll_rw_blk.c:    if (req->special || next->special)
ll_rw_blk.c:            rq->special = NULL;
ll_rw_blk.c:    rq->special = data;
^^^^^^^ This one is me :-).
ll_rw_blk.c:        || next->waiting || next->special)
[root@localhost block]#


>>>So look at ide.c for example.
>>
>>So look at drivers which call blk_start_queue() from within
>>q->request_fn context, which is, well, causing deliberate *recursion*.
>>
> 
> 
> Are you sure? If so they should first check whether queue is
> started/stopped, if they don't it is a bug.

void blk_start_queue(request_queue_t *q)
{
         if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
                 unsigned long flags;

================== possigle race here for qeue_flags BTW.

                 spin_lock_irqsave(q->queue_lock, flags);
                 clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);

                 if (!elv_queue_empty(q))
                         q->request_fn(q);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If we call it from within request_fn then if this isn't recursion on the
kernel stack then I don't know...

                 spin_unlock_irqrestore(q->queue_lock, flags);
         }
}


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 11:35                 ` Marcin Dalecki
@ 2002-07-24 11:53                   ` Jens Axboe
  2002-07-24 12:08                     ` Marcin Dalecki
  2002-07-24 12:39                   ` Bartlomiej Zolnierkiewicz
  2002-07-24 12:43                   ` Bartlomiej Zolnierkiewicz
  2 siblings, 1 reply; 35+ messages in thread
From: Jens Axboe @ 2002-07-24 11:53 UTC (permalink / raw)
  To: martin; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel

On Wed, Jul 24 2002, Marcin Dalecki wrote:
> >>So look at drivers which call blk_start_queue() from within
> >>q->request_fn context, which is, well, causing deliberate *recursion*.
> >>
> >
> >
> >Are you sure? If so they should first check whether queue is
> >started/stopped, if they don't it is a bug.
> 
> void blk_start_queue(request_queue_t *q)
> {
>         if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
>                 unsigned long flags;
> 
> ================== possigle race here for qeue_flags BTW.
> 
>                 spin_lock_irqsave(q->queue_lock, flags);
>                 clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
> 
>                 if (!elv_queue_empty(q))
>                         q->request_fn(q);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> If we call it from within request_fn then if this isn't recursion on the
> kernel stack then I don't know...
> 
>                 spin_unlock_irqrestore(q->queue_lock, flags);
>         }
> }

Care to enlighten us on exactly which block drivers call
blk_start_queue() from request_fn?

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 11:53                   ` Jens Axboe
@ 2002-07-24 12:08                     ` Marcin Dalecki
  0 siblings, 0 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 12:08 UTC (permalink / raw)
  To: Jens Axboe; +Cc: martin, Bartlomiej Zolnierkiewicz, linux-kernel

Jens Axboe wrote:

> 
> Care to enlighten us on exactly which block drivers call
> blk_start_queue() from request_fn?

Well, admittedly, my direct suspect (cpqarry.c) turned out after a 
closer look to be "not guilty" :-). Still a bit of docu found be nice 
there. And you can of course guess what the bounty is I'm hunting for:
removal of IDE_BUSY ... so I did the mistake myself in first place 8-).




^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 11:35                 ` Marcin Dalecki
  2002-07-24 11:53                   ` Jens Axboe
@ 2002-07-24 12:39                   ` Bartlomiej Zolnierkiewicz
  2002-07-24 12:41                     ` Jens Axboe
  2002-07-24 12:43                   ` Bartlomiej Zolnierkiewicz
  2 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 12:39 UTC (permalink / raw)
  To: martin; +Cc: axboe, linux-kernel


On Wed, 24 Jul 2002, Marcin Dalecki wrote:

> Bartlomiej Zolnierkiewicz wrote:
>
> >>There are some nasty checks for it != NULL in the generic BIO code.
                                               ^^^^^^^^^^^^^^^^^^^^^^^
> >
> >
> > No, there are no checks there.
>
> Hello?:

Yes, hello Martin, read you own sentence ;-)

Generic BIO code is bio.c and bio.h.

> [root@localhost block]# grep \>special *.c
> elevator.c:         !rq->waiting && !rq->special)
> ^^^^^^ This one is supposed to have the required barrier effect.
> ll_rw_blk.c:    if (req->special || next->special)
> ll_rw_blk.c:            rq->special = NULL;
> ll_rw_blk.c:    rq->special = data;
> ^^^^^^^ This one is me :-).
> ll_rw_blk.c:        || next->waiting || next->special)
> [root@localhost block]#

You seem to confuse block layer with BIO layer.

> >>>So look at ide.c for example.
> >>
> >>So look at drivers which call blk_start_queue() from within
> >>q->request_fn context, which is, well, causing deliberate *recursion*.
> >>
> >
> > Are you sure? If so they should first check whether queue is
> > started/stopped, if they don't it is a bug.
>
> void blk_start_queue(request_queue_t *q)
> {
>          if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
>                  unsigned long flags;
>
> ================== possigle race here for qeue_flags BTW.
>
>                  spin_lock_irqsave(q->queue_lock, flags);
>                  clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
>
>                  if (!elv_queue_empty(q))
>                          q->request_fn(q);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> If we call it from within request_fn then if this isn't recursion on the
> kernel stack then I don't know...

You really don't know.

And funny thing is I have diffirent blk_start_queue() function in my tree
(2.5.27) ? Without described above race and without possibilty of
recursion...

2.5.27:drivers/block/ll_rw_blk.c
void blk_start_queue(request_queue_t *q)
{
        if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
                unsigned long flags;

                spin_lock_irqsave(q->queue_lock, flags);
                if (!elv_queue_empty(q))
                        q->request_fn(q);
                spin_unlock_irqrestore(q->queue_lock, flags);
        }
}

Regards
--
Bartlomiej

>                  spin_unlock_irqrestore(q->queue_lock, flags);
>          }
> }





^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 12:39                   ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 12:41                     ` Jens Axboe
  2002-07-24 12:49                       ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Jens Axboe @ 2002-07-24 12:41 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, linux-kernel

On Wed, Jul 24 2002, Bartlomiej Zolnierkiewicz wrote:
> > void blk_start_queue(request_queue_t *q)
> > {
> >          if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> >                  unsigned long flags;
> >
> > ================== possigle race here for qeue_flags BTW.
> >
> >                  spin_lock_irqsave(q->queue_lock, flags);
> >                  clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
> >
> >                  if (!elv_queue_empty(q))
> >                          q->request_fn(q);
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > If we call it from within request_fn then if this isn't recursion on the
> > kernel stack then I don't know...
> 
> You really don't know.
> 
> And funny thing is I have diffirent blk_start_queue() function in my tree
> (2.5.27) ? Without described above race and without possibilty of
> recursion...
> 
> 2.5.27:drivers/block/ll_rw_blk.c
> void blk_start_queue(request_queue_t *q)
> {
>         if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
>                 unsigned long flags;
> 
>                 spin_lock_irqsave(q->queue_lock, flags);
>                 if (!elv_queue_empty(q))
>                         q->request_fn(q);
>                 spin_unlock_irqrestore(q->queue_lock, flags);
>         }
> }

Yep, the version Martin posted must be really old.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 11:35                 ` Marcin Dalecki
  2002-07-24 11:53                   ` Jens Axboe
  2002-07-24 12:39                   ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 12:43                   ` Bartlomiej Zolnierkiewicz
  2002-07-24 13:10                     ` Marcin Dalecki
  2 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 12:43 UTC (permalink / raw)
  To: martin; +Cc: axboe, linux-kernel


On Wed, 24 Jul 2002, Marcin Dalecki wrote:

> [root@localhost block]# grep \>special *.c
> elevator.c:         !rq->waiting && !rq->special)
> ^^^^^^ This one is supposed to have the required barrier effect.

Go reread, no barrier effect, requests can slip in before your
REQ_SPECIAL. They cannon only be merged with REQ_SPECIAL.

Regards
--
Bartlomiej


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 12:41                     ` Jens Axboe
@ 2002-07-24 12:49                       ` Bartlomiej Zolnierkiewicz
  2002-07-24 12:50                         ` Jens Axboe
  0 siblings, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 12:49 UTC (permalink / raw)
  To: Jens Axboe; +Cc: martin, linux-kernel


On Wed, 24 Jul 2002, Jens Axboe wrote:

> On Wed, Jul 24 2002, Bartlomiej Zolnierkiewicz wrote:
> > > void blk_start_queue(request_queue_t *q)
> > > {
> > >          if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> > >                  unsigned long flags;
> > >
> > > ================== possigle race here for qeue_flags BTW.
> > >
> > >                  spin_lock_irqsave(q->queue_lock, flags);
> > >                  clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
> > >
> > >                  if (!elv_queue_empty(q))
> > >                          q->request_fn(q);
> > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > > If we call it from within request_fn then if this isn't recursion on the
> > > kernel stack then I don't know...
> >
> > You really don't know.
> >
> > And funny thing is I have diffirent blk_start_queue() function in my tree
> > (2.5.27) ? Without described above race and without possibilty of
> > recursion...
> >
> > 2.5.27:drivers/block/ll_rw_blk.c
> > void blk_start_queue(request_queue_t *q)
> > {
> >         if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> >                 unsigned long flags;
> >
> >                 spin_lock_irqsave(q->queue_lock, flags);
> >                 if (!elv_queue_empty(q))
> >                         q->request_fn(q);
> >                 spin_unlock_irqrestore(q->queue_lock, flags);
> >         }
> > }
>
> Yep, the version Martin posted must be really old.

It's worst. Martin's version exists only in his tree (mind?).
I checked back revision and blk_start_queue() was inroduced in 2.5.19
and it was the correct one.

> --
> Jens Axboe



^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 12:49                       ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 12:50                         ` Jens Axboe
  2002-07-24 13:08                           ` Marcin Dalecki
  0 siblings, 1 reply; 35+ messages in thread
From: Jens Axboe @ 2002-07-24 12:50 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, linux-kernel

On Wed, Jul 24 2002, Bartlomiej Zolnierkiewicz wrote:
> 
> On Wed, 24 Jul 2002, Jens Axboe wrote:
> 
> > On Wed, Jul 24 2002, Bartlomiej Zolnierkiewicz wrote:
> > > > void blk_start_queue(request_queue_t *q)
> > > > {
> > > >          if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> > > >                  unsigned long flags;
> > > >
> > > > ================== possigle race here for qeue_flags BTW.
> > > >
> > > >                  spin_lock_irqsave(q->queue_lock, flags);
> > > >                  clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
> > > >
> > > >                  if (!elv_queue_empty(q))
> > > >                          q->request_fn(q);
> > > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > > > If we call it from within request_fn then if this isn't recursion on the
> > > > kernel stack then I don't know...
> > >
> > > You really don't know.
> > >
> > > And funny thing is I have diffirent blk_start_queue() function in my tree
> > > (2.5.27) ? Without described above race and without possibilty of
> > > recursion...
> > >
> > > 2.5.27:drivers/block/ll_rw_blk.c
> > > void blk_start_queue(request_queue_t *q)
> > > {
> > >         if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> > >                 unsigned long flags;
> > >
> > >                 spin_lock_irqsave(q->queue_lock, flags);
> > >                 if (!elv_queue_empty(q))
> > >                         q->request_fn(q);
> > >                 spin_unlock_irqrestore(q->queue_lock, flags);
> > >         }
> > > }
> >
> > Yep, the version Martin posted must be really old.
> 
> It's worst. Martin's version exists only in his tree (mind?).

:-)

> I checked back revision and blk_start_queue() was inroduced in 2.5.19
> and it was the correct one.

There were buggy versions at one point, however they may not have made it
into a full release. In that case it was just bk version of 2.5.19-pre
effectively. I forget the details :-)

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 12:50                         ` Jens Axboe
@ 2002-07-24 13:08                           ` Marcin Dalecki
  2002-07-24 13:25                             ` Jens Axboe
  0 siblings, 1 reply; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 13:08 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Bartlomiej Zolnierkiewicz, martin, linux-kernel

Jens Axboe wrote:

>>>>2.5.27:drivers/block/ll_rw_blk.c
>>>>void blk_start_queue(request_queue_t *q)
>>>>{
>>>>        if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
>>>>                unsigned long flags;
>>>>
>>>>                spin_lock_irqsave(q->queue_lock, flags);
>>>>                if (!elv_queue_empty(q))
>>>>                        q->request_fn(q);
>>>>                spin_unlock_irqrestore(q->queue_lock, flags);
>>>>        }
>>>>}

> There were buggy versions at one point, however they may not have made it
> into a full release. In that case it was just bk version of 2.5.19-pre
> effectively. I forget the details :-)

Naj - it's far more trivial I just looked at wrong tree at hand...
But anyway. What happens if somone does set QUEUE_FLAG_STOPPED
between the test_and_claer_bit and taking the spin_lock? Setting
the QUEUE_FLAG_STOPPED isn't maintaining the spin_lock protection!

My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
*inside* the q->request_fn call.

This here is where it's supposed to be set:

void blk_stop_queue(request_queue_t *q)
{
         unsigned long flags;

         spin_lock_irqsave(q->queue_lock, flags);
         blk_remove_plug(q);
         spin_unlock_irqrestore(q->queue_lock, flags);

         set_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
}

And I don't see anything preventing the above problem.

It sould perhaps be?

void blk_stop_queue(request_queue_t *q)
{
         unsigned long flags;

         spin_lock_irqsave(q->queue_lock, flags);
         blk_remove_plug(q);
         set_bit(QUEUE_FLAG_STOPPED, &q->queue_flags); /* Notice 
spinlock still held! */
         spin_unlock_irqrestore(q->queue_lock, flags);
}

void blk_start_queue(request_queue_t *q)
{
         if (test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
                 unsigned long flags;

                 spin_lock_irqsave(q->queue_lock, flags);
		if (!test_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
			spin_unlock_irqsave(q->queue_lock, flags);
			return;
		}
                 clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags);
                 if (!elv_queue_empty(q))
                         q->request_fn(q);
                 spin_unlock_irqrestore(q->queue_lock, flags);
         }
}

At least I couldn't see any harm in doing it like above.
And again. I think it would assert that the flag is well defined inside
q->request_fn().


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 12:43                   ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 13:10                     ` Marcin Dalecki
  2002-07-24 13:21                       ` Bartlomiej Zolnierkiewicz
  0 siblings, 1 reply; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 13:10 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, axboe, linux-kernel

Bartlomiej Zolnierkiewicz wrote:
> On Wed, 24 Jul 2002, Marcin Dalecki wrote:
> 
> 
>>[root@localhost block]# grep \>special *.c
>>elevator.c:         !rq->waiting && !rq->special)
>>^^^^^^ This one is supposed to have the required barrier effect.
> 
> 
> Go reread, no barrier effect, requests can slip in before your
> REQ_SPECIAL. They cannon only be merged with REQ_SPECIAL.

Erm. Please note that I don't see any problem here. It's just
a matter of completeness.



^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:10                     ` Marcin Dalecki
@ 2002-07-24 13:21                       ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 13:21 UTC (permalink / raw)
  To: martin; +Cc: axboe, linux-kernel


On Wed, 24 Jul 2002, Marcin Dalecki wrote:

> Bartlomiej Zolnierkiewicz wrote:
> > On Wed, 24 Jul 2002, Marcin Dalecki wrote:
> >
> >
> >>[root@localhost block]# grep \>special *.c
> >>elevator.c:         !rq->waiting && !rq->special)
> >>^^^^^^ This one is supposed to have the required barrier effect.
> >
> >
> > Go reread, no barrier effect, requests can slip in before your
> > REQ_SPECIAL. They cannon only be merged with REQ_SPECIAL.
>
> Erm. Please note that I don't see any problem here. It's just
> a matter of completeness.

For now yes.


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:08                           ` Marcin Dalecki
@ 2002-07-24 13:25                             ` Jens Axboe
  2002-07-24 13:35                               ` Bartlomiej Zolnierkiewicz
  2002-07-24 13:35                               ` Marcin Dalecki
  0 siblings, 2 replies; 35+ messages in thread
From: Jens Axboe @ 2002-07-24 13:25 UTC (permalink / raw)
  To: Marcin Dalecki; +Cc: Bartlomiej Zolnierkiewicz, martin, linux-kernel

On Wed, Jul 24 2002, Marcin Dalecki wrote:
> Jens Axboe wrote:
> 
> >>>>2.5.27:drivers/block/ll_rw_blk.c
> >>>>void blk_start_queue(request_queue_t *q)
> >>>>{
> >>>>       if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> >>>>               unsigned long flags;
> >>>>
> >>>>               spin_lock_irqsave(q->queue_lock, flags);
> >>>>               if (!elv_queue_empty(q))
> >>>>                       q->request_fn(q);
> >>>>               spin_unlock_irqrestore(q->queue_lock, flags);
> >>>>       }
> >>>>}
> 
> >There were buggy versions at one point, however they may not have made it
> >into a full release. In that case it was just bk version of 2.5.19-pre
> >effectively. I forget the details :-)
> 
> Naj - it's far more trivial I just looked at wrong tree at hand...
> But anyway. What happens if somone does set QUEUE_FLAG_STOPPED
> between the test_and_claer_bit and taking the spin_lock? Setting
> the QUEUE_FLAG_STOPPED isn't maintaining the spin_lock protection!

It doesn't matter. If QUEUE_FLAG_STOPPED was set when entering
blk_start_queue(), it will call into the request_fn. If blk_stop_queue()
is called between clearing QUEUE_FLAG_STOPPED in blk_start_queue() and
grabbing the spin_lock, the worst that can happen is a spurios extra
request_fn call.

> My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
> *inside* the q->request_fn call.

So you want the queue_lock to protect the flags as well... I don't
really see the point of this.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:25                             ` Jens Axboe
@ 2002-07-24 13:35                               ` Bartlomiej Zolnierkiewicz
  2002-07-24 13:36                                 ` Jens Axboe
  2002-07-24 13:35                               ` Marcin Dalecki
  1 sibling, 1 reply; 35+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2002-07-24 13:35 UTC (permalink / raw)
  To: Jens Axboe; +Cc: martin, linux-kernel


On Wed, 24 Jul 2002, Jens Axboe wrote:

> On Wed, Jul 24 2002, Marcin Dalecki wrote:
> > Jens Axboe wrote:
> >
> > >>>>2.5.27:drivers/block/ll_rw_blk.c
> > >>>>void blk_start_queue(request_queue_t *q)
> > >>>>{
> > >>>>       if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> > >>>>               unsigned long flags;
> > >>>>
> > >>>>               spin_lock_irqsave(q->queue_lock, flags);
> > >>>>               if (!elv_queue_empty(q))
> > >>>>                       q->request_fn(q);
> > >>>>               spin_unlock_irqrestore(q->queue_lock, flags);
> > >>>>       }
> > >>>>}
> >
> > >There were buggy versions at one point, however they may not have made it
> > >into a full release. In that case it was just bk version of 2.5.19-pre
> > >effectively. I forget the details :-)
> >
> > Naj - it's far more trivial I just looked at wrong tree at hand...
> > But anyway. What happens if somone does set QUEUE_FLAG_STOPPED
> > between the test_and_claer_bit and taking the spin_lock? Setting
> > the QUEUE_FLAG_STOPPED isn't maintaining the spin_lock protection!
>
> It doesn't matter. If QUEUE_FLAG_STOPPED was set when entering
> blk_start_queue(), it will call into the request_fn. If blk_stop_queue()
> is called between clearing QUEUE_FLAG_STOPPED in blk_start_queue() and
> grabbing the spin_lock, the worst that can happen is a spurios extra
> request_fn call.
>
> > My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
> > *inside* the q->request_fn call.
>
> So you want the queue_lock to protect the flags as well... I don't
> really see the point of this.

If driver corectly uses blk_start/stop_queue() it is not needed.
Whole point of introducing this flag was not to take lock to check
status of queue.

--
Bartlomiej

> --
> Jens Axboe




^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:25                             ` Jens Axboe
  2002-07-24 13:35                               ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 13:35                               ` Marcin Dalecki
  1 sibling, 0 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 13:35 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Bartlomiej Zolnierkiewicz, martin, linux-kernel

>>Naj - it's far more trivial I just looked at wrong tree at hand...
>>But anyway. What happens if somone does set QUEUE_FLAG_STOPPED
>>between the test_and_claer_bit and taking the spin_lock? Setting
>>the QUEUE_FLAG_STOPPED isn't maintaining the spin_lock protection!
> 
> 
> It doesn't matter. If QUEUE_FLAG_STOPPED was set when entering
> blk_start_queue(), it will call into the request_fn. If blk_stop_queue()
> is called between clearing QUEUE_FLAG_STOPPED in blk_start_queue() and
> grabbing the spin_lock, the worst that can happen is a spurios extra
> request_fn call.
> 
> 
>>My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
>>*inside* the q->request_fn call.
> 
> 
> So you want the queue_lock to protect the flags as well... I don't
> really see the point of this.

Well - OK it's maybe not obvious. So let me please explain: What I have 
in mind is...

1. It doesn't harm and it's a matter of completeness ...
(brain -pedantic)

2. QUEUE_FLAG_STOPPED would suddenly do the same trick as IDE_BUSY does
now and I could just do blk_start_queue() in timout and IRQ handlers in 
IDE. This would bring the "driver in question" in line with all the 
other drivers out there, which indeed do just that instead of explicite
recurrsion in to the request handler...

3. The while(test_and_set_bit(IDE_BUSY, ... ) on do_ide_request entry
could simply go away... and we would have just do_request() left.

4. I worry a bit how this interacts with tcq.c

5. I observed the BUG() during transfers running from one queue to
another comented as by you:

  /* There's a small window between where the queue could be
   * replugged while we are in here when using tcq (in which case
   * the queue is probably empty anyways...), so check and leave
   * if appropriate. When not using tcq, this is still a severe
   * BUG!
   */

in do_request() on a system with enabled preemption and without TCQ
enabled. And I think that the above would plug the possibility of it to 
happen. (Tought here I have to think harder.)


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:35                               ` Bartlomiej Zolnierkiewicz
@ 2002-07-24 13:36                                 ` Jens Axboe
  2002-07-24 13:38                                   ` Marcin Dalecki
  0 siblings, 1 reply; 35+ messages in thread
From: Jens Axboe @ 2002-07-24 13:36 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: martin, linux-kernel

On Wed, Jul 24 2002, Bartlomiej Zolnierkiewicz wrote:
> 
> On Wed, 24 Jul 2002, Jens Axboe wrote:
> 
> > On Wed, Jul 24 2002, Marcin Dalecki wrote:
> > > Jens Axboe wrote:
> > >
> > > >>>>2.5.27:drivers/block/ll_rw_blk.c
> > > >>>>void blk_start_queue(request_queue_t *q)
> > > >>>>{
> > > >>>>       if (test_and_clear_bit(QUEUE_FLAG_STOPPED, &q->queue_flags)) {
> > > >>>>               unsigned long flags;
> > > >>>>
> > > >>>>               spin_lock_irqsave(q->queue_lock, flags);
> > > >>>>               if (!elv_queue_empty(q))
> > > >>>>                       q->request_fn(q);
> > > >>>>               spin_unlock_irqrestore(q->queue_lock, flags);
> > > >>>>       }
> > > >>>>}
> > >
> > > >There were buggy versions at one point, however they may not have made it
> > > >into a full release. In that case it was just bk version of 2.5.19-pre
> > > >effectively. I forget the details :-)
> > >
> > > Naj - it's far more trivial I just looked at wrong tree at hand...
> > > But anyway. What happens if somone does set QUEUE_FLAG_STOPPED
> > > between the test_and_claer_bit and taking the spin_lock? Setting
> > > the QUEUE_FLAG_STOPPED isn't maintaining the spin_lock protection!
> >
> > It doesn't matter. If QUEUE_FLAG_STOPPED was set when entering
> > blk_start_queue(), it will call into the request_fn. If blk_stop_queue()
> > is called between clearing QUEUE_FLAG_STOPPED in blk_start_queue() and
> > grabbing the spin_lock, the worst that can happen is a spurios extra
> > request_fn call.
> >
> > > My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
> > > *inside* the q->request_fn call.
> >
> > So you want the queue_lock to protect the flags as well... I don't
> > really see the point of this.
> 
> If driver corectly uses blk_start/stop_queue() it is not needed.
> Whole point of introducing this flag was not to take lock to check
> status of queue.

Right. The way it was meant to be used it how cpqarray and cciss does
it -- stopping queue in request_fn, restarting it from isr.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 35+ messages in thread

* Re: please DON'T run 2.5.27 with IDE!
  2002-07-24 13:36                                 ` Jens Axboe
@ 2002-07-24 13:38                                   ` Marcin Dalecki
  0 siblings, 0 replies; 35+ messages in thread
From: Marcin Dalecki @ 2002-07-24 13:38 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Bartlomiej Zolnierkiewicz, martin, linux-kernel

Jens Axboe wrote:

>>>>My goal is to make sure that the QUEUE_FLAG_STOPPED has a valid value
>>>>*inside* the q->request_fn call.
>>>
>>>So you want the queue_lock to protect the flags as well... I don't
>>>really see the point of this.
>>
>>If driver corectly uses blk_start/stop_queue() it is not needed.
>>Whole point of introducing this flag was not to take lock to check
>>status of queue.
> 
> 
> Right. The way it was meant to be used it how cpqarray and cciss does
> it -- stopping queue in request_fn, restarting it from isr.

Yes got it. Of course. But please note that:

1. My suggestion doesn't change the checking case.

2. What you describe is precisely what I would like to be able to
do in my own "playground".




^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2002-07-24 13:40 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-07-22 19:37 please DON'T run 2.5.27 with IDE! Bartlomiej Zolnierkiewicz
2002-07-22 20:39 ` Andries Brouwer
2002-07-22 23:25   ` Thunder from the hill
2002-07-23  0:39 ` A Guy Called Tyketto
2002-07-23  0:58   ` Thunder from the hill
2002-07-23  1:10     ` Bartlomiej Zolnierkiewicz
2002-07-23  8:03 ` Morten Helgesen
2002-07-23 12:47   ` Bartlomiej Zolnierkiewicz
2002-07-23 13:00     ` Marcin Dalecki
2002-07-23 13:42       ` Bartlomiej Zolnierkiewicz
2002-07-23 13:58         ` Marcin Dalecki
2002-07-23 19:52           ` Jan Harkes
2002-07-23 20:08             ` Andre Hedrick
2002-07-24 10:24             ` Marcin Dalecki
2002-07-23 20:24           ` Bartlomiej Zolnierkiewicz
2002-07-24 10:30             ` Marcin Dalecki
2002-07-24 10:54               ` Bartlomiej Zolnierkiewicz
2002-07-24 11:35                 ` Marcin Dalecki
2002-07-24 11:53                   ` Jens Axboe
2002-07-24 12:08                     ` Marcin Dalecki
2002-07-24 12:39                   ` Bartlomiej Zolnierkiewicz
2002-07-24 12:41                     ` Jens Axboe
2002-07-24 12:49                       ` Bartlomiej Zolnierkiewicz
2002-07-24 12:50                         ` Jens Axboe
2002-07-24 13:08                           ` Marcin Dalecki
2002-07-24 13:25                             ` Jens Axboe
2002-07-24 13:35                               ` Bartlomiej Zolnierkiewicz
2002-07-24 13:36                                 ` Jens Axboe
2002-07-24 13:38                                   ` Marcin Dalecki
2002-07-24 13:35                               ` Marcin Dalecki
2002-07-24 12:43                   ` Bartlomiej Zolnierkiewicz
2002-07-24 13:10                     ` Marcin Dalecki
2002-07-24 13:21                       ` Bartlomiej Zolnierkiewicz
  -- strict thread matches above, loose matches on Subject: below --
2002-07-22 19:43 Petr Vandrovec
2002-07-22 19:46 ` Bartlomiej Zolnierkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox