lkml.org 
[lkml]   [2008]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [Regression in 2.6.25-rcX] CD/DVD writer no longer works
    From
    Date

    On Sun, 2008-02-24 at 12:57 -0800, zkopex wrote:
    > Hello,

    Greetings,

    > I am using Debian Sid on a Toshiba A100 laptop. My CD/DVD
    > writer functions very well on 2.6.23.16 and 2.6.24.2.
    >
    > I tried 2.6.25-rc2-git7, and I was very sad to notice that
    > when I tried to write a CD, wodim started to output the
    > following: "Warning: controller returns zero sized CD
    > capabilities page."

    Yeah, I saw that using k3b.

    > Since I was able to use this CD/DVD writer successfully with
    > previous versions of Linux, I believe that this is a regression
    > in 2.6.25-rcX series.
    >
    > I am willing to try patches and to do pretty much anything
    > to debug/fix this problem.

    Sounds like you're having the same problem I am. In my case, reverting
    all but one line of commit 6b00769fe1502b4ad97bb327ef7ac971b208bfb5
    cures it, though I don't see why.

    Revert patch below is against freshly hatched rc3 if you want to try it.

    diff --git a/block/blk-core.c b/block/blk-core.c
    index 775c851..c013ca2 100644
    --- a/block/blk-core.c
    +++ b/block/blk-core.c
    @@ -127,7 +127,6 @@ void rq_init(struct request_queue *q, struct request *rq)
    rq->nr_hw_segments = 0;
    rq->ioprio = 0;
    rq->special = NULL;
    - rq->raw_data_len = 0;
    rq->buffer = NULL;
    rq->tag = -1;
    rq->errors = 0;
    @@ -2016,7 +2015,6 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
    rq->hard_cur_sectors = rq->current_nr_sectors;
    rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio);
    rq->buffer = bio_data(bio);
    - rq->raw_data_len = bio->bi_size;
    rq->data_len = bio->bi_size;

    rq->bio = rq->biotail = bio;
    diff --git a/block/blk-map.c b/block/blk-map.c
    index 09f7fd0..ae4a0fc 100644
    --- a/block/blk-map.c
    +++ b/block/blk-map.c
    @@ -19,7 +19,6 @@ int blk_rq_append_bio(struct request_queue *q, struct request *rq,
    rq->biotail->bi_next = bio;
    rq->biotail = bio;

    - rq->raw_data_len += bio->bi_size;
    rq->data_len += bio->bi_size;
    }
    return 0;
    diff --git a/block/blk-merge.c b/block/blk-merge.c
    index 7506c4f..a15d0ee 100644
    --- a/block/blk-merge.c
    +++ b/block/blk-merge.c
    @@ -231,7 +231,6 @@ new_segment:
    ((unsigned long)q->dma_drain_buffer) &
    (PAGE_SIZE - 1));
    nsegs++;
    - rq->data_len += q->dma_drain_size;
    }

    if (sg)
    diff --git a/block/bsg.c b/block/bsg.c
    index 7f3c095..8917c51 100644
    --- a/block/bsg.c
    +++ b/block/bsg.c
    @@ -437,14 +437,14 @@ static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr,
    }

    if (rq->next_rq) {
    - hdr->dout_resid = rq->raw_data_len;
    - hdr->din_resid = rq->next_rq->raw_data_len;
    + hdr->dout_resid = rq->data_len;
    + hdr->din_resid = rq->next_rq->data_len;
    blk_rq_unmap_user(bidi_bio);
    blk_put_request(rq->next_rq);
    } else if (rq_data_dir(rq) == READ)
    - hdr->din_resid = rq->raw_data_len;
    + hdr->din_resid = rq->data_len;
    else
    - hdr->dout_resid = rq->raw_data_len;
    + hdr->dout_resid = rq->data_len;

    /*
    * If the request generated a negative error number, return it
    diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
    index e993cac..9675b34 100644
    --- a/block/scsi_ioctl.c
    +++ b/block/scsi_ioctl.c
    @@ -266,7 +266,7 @@ static int blk_complete_sghdr_rq(struct request *rq, struct sg_io_hdr *hdr,
    hdr->info = 0;
    if (hdr->masked_status || hdr->host_status || hdr->driver_status)
    hdr->info |= SG_INFO_CHECK;
    - hdr->resid = rq->raw_data_len;
    + hdr->resid = rq->data_len;
    hdr->sb_len_wr = 0;

    if (rq->sense_len && hdr->sbp) {
    @@ -528,7 +528,6 @@ static int __blk_send_generic(struct request_queue *q, struct gendisk *bd_disk,
    rq = blk_get_request(q, WRITE, __GFP_WAIT);
    rq->cmd_type = REQ_TYPE_BLOCK_PC;
    rq->data = NULL;
    - rq->raw_data_len = 0;
    rq->data_len = 0;
    rq->timeout = BLK_DEFAULT_SG_TIMEOUT;
    memset(rq->cmd, 0, sizeof(rq->cmd));
    diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
    index 0562b0a..85daaaa 100644
    --- a/drivers/ata/libata-scsi.c
    +++ b/drivers/ata/libata-scsi.c
    @@ -2539,7 +2539,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
    * want to set it properly, and for DMA where it is
    * effectively meaningless.
    */
    - nbytes = min(scmd->request->raw_data_len, (unsigned int)63 * 1024);
    + nbytes = min(qc->nbytes, (unsigned int)63 * 1024);

    /* Most ATAPI devices which honor transfer chunk size don't
    * behave according to the spec when odd chunk size which
    diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
    index 6fe67d1..094eba2 100644
    --- a/include/linux/blkdev.h
    +++ b/include/linux/blkdev.h
    @@ -216,7 +216,6 @@ struct request {
    unsigned int cmd_len;
    unsigned char cmd[BLK_MAX_CDB];

    - unsigned int raw_data_len;
    unsigned int data_len;
    unsigned int sense_len;
    void *data;



    \
     
     \ /
      Last update: 2008-02-25 04:39    [W:0.027 / U:90.388 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site