DragonFly bugs List (threaded) for 2007-07
DragonFly BSD
DragonFly bugs List (threaded) for 2007-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: Live CD problems.


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 22 Jul 2007 12:36:29 -0700 (PDT)

:Hi,
:
:During boot of the live cd this shows up:
:
:Mounting root from cd9660:cd0c
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed

    That is definitely not correct.  If you don't mind burning another dead
    CD could you please try this patch?  It will force the system to panic
    when it tries to do a 0-length I/O.  Then get a backtrace from the DDB
    prompt so we can see the call chain that leads up to the problem.

					-Matt

Index: ata-dma.c
===================================================================
RCS file: /cvs/src/sys/dev/disk/nata/ata-dma.c,v
retrieving revision 1.4
diff -u -p -r1.4 ata-dma.c
--- ata-dma.c	5 Jun 2007 18:30:40 -0000	1.4
+++ ata-dma.c	22 Jul 2007 19:32:04 -0000
@@ -227,6 +227,7 @@ 	return EIO;
     }
     if (!count) {
 	device_printf(dev, "FAILURE - zero length DMA transfer attempted\n");
+	panic("zero length DMA transfer");
 	return EIO;
     }
     if (((uintptr_t)data & (ch->dma->alignment - 1)) ||
Index: atapi-cd.c
===================================================================
RCS file: /cvs/src/sys/dev/disk/nata/atapi-cd.c,v
retrieving revision 1.7
diff -u -p -r1.7 atapi-cd.c
--- atapi-cd.c	3 Jun 2007 04:48:29 -0000	1.7
+++ atapi-cd.c	22 Jul 2007 19:35:03 -0000
@@ -785,6 +785,8 @@ 	biodone(bp);
 	return 0;
     }
 
+    KASSERT(bbp->b_bcount != 0, ("acd_strategy: 0-length I/O"));
+
     bp->bio_driver_info = cdev;
     bbp->b_resid = bbp->b_bcount;
 
@@ -842,6 +844,8 @@ 	lba = (bp->bio_offset & 0x00FFFFFFFFFFF
     }
 
     count = bbp->b_bcount / blocksize;
+    KASSERT(count != 0, ("acd_strategy: 0-length I/O %d bytes vs %d blksize",
+		bbp->b_bcount, blocksize));
 
     if (bbp->b_cmd == BUF_CMD_READ) {
 	/* if transfer goes beyond range adjust it to be within limits */



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