Re: http://bugzilla.kernel.org/show_bug.cgi?id=11742

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Oct 25, 2008 at 02:58:45PM +0200, Bartlomiej Zolnierkiewicz wrote:
> On Friday 24 October 2008, Borislav Petkov wrote:
> > Hi,
> > 
> > > Is the culprit REQ_TYPE_BLOCK_PC request or REQ_TYPE_ATA_PC one?
> > 
> > Well, from what I see from the latest traces Valerio sent me, it is always a
> > REQ_TYPE_BLOCK_PC with sizes for rq->data_len which fail in the alignment test:
> > 
> > rq->data_len: 0xc,
> > rq->data_len: 0xf810,
> 
> [...]
> 
> > Those are, according to Valerio, taken during burning which looks like something
> > aroung 64K requests which fail the rq->data_len & alignment test where alignment
> > is 0x1f. The would've passed the old test rq->data_len & 0xf.
> 
> OK, I see it now after your mail & looking at the original commit:
> 
> @@ -1205,7 +1210,8 @@ static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
>  		 * NOTE! The "len" and "addr" checks should possibly have
>  		 * separate masks.
>  		 */
> -		if ((rq->data_len & 15) || (addr & mask))
> +		alignment = queue_dma_alignment(q) | q->dma_pad_mask;
> +		if (addr & alignment || rq->data_len & alignment)
>  			info->dma = 0;
>  
>  		if (!((addr & stack_mask) ^
> 
> Please note the comment about separate masks...  This chunk of commit
> needs to be reverted as it clearly wasn't an intended change.

Valerio, care to try the patch against 2.6.27 below? Additionally, I've
attached it to this mail in case you're having trouble with kmail.

@Bart: This reverts the rq->data_len part and I'll port it to current
pata tree in case it does the job.

---
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index f16bb46..834b79d 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1181,7 +1181,7 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
 		 * separate masks.
 		 */
 		alignment = queue_dma_alignment(q) | q->dma_pad_mask;
-		if (addr & alignment || rq->data_len & alignment)
+		if (addr & alignment || rq->data_len & q->dma_pad_mask)
 			info->dma = 0;
 
 		if (!((addr & stack_mask) ^

-- 
Regards/Gruss,
    Boris.
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index f16bb46..834b79d 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1181,7 +1181,7 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
 		 * separate masks.
 		 */
 		alignment = queue_dma_alignment(q) | q->dma_pad_mask;
-		if (addr & alignment || rq->data_len & alignment)
+		if (addr & alignment || rq->data_len & q->dma_pad_mask)
 			info->dma = 0;
 
 		if (!((addr & stack_mask) ^

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux