From 3917ac5846dd0f9ad1238166f90caab9912052e6 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Tue, 30 Jun 1998 00:21:34 +0000 Subject: o Merge with Linux 2.1.100. o Cleanup the machine dependencies of floppy and rtc. The driver for the Dallas thingy in the Indy is still missing. o Handle allocation of zero'd pages correct for R4000SC / R4400SC. o Page colouring shit to match the virtual and physical colour of all mapped pages. This tends to produce extreme fragmentation problems, so it's deactivated for now. Users of R4000SC / R4400SC may re-enable the code in arch/mips/mm/init.c by removing the definition of CONF_GIVE_A_SHIT_ABOUT_COLOURS. Should get them somewhat further - but don't shake to hard ... o Fixed ptrace(2)-ing of syscalls, strace is now working again. o Fix the interrupt forwarding from the keyboard driver to the psaux driver, PS/2 mice are now working on the Indy. The fix is somewhat broken as it prevents generic kernels for Indy and machines which handle things different. o Things I can't remember. --- drivers/scsi/ide-scsi.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'drivers/scsi/ide-scsi.c') diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index d81cb5187..05c0ecab9 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c @@ -260,7 +260,7 @@ static void idescsi_end_request (byte uptodate, ide_hwgroup_t *hwgroup) struct request *rq = hwgroup->rq; idescsi_pc_t *pc = (idescsi_pc_t *) rq->buffer; int log = test_bit(IDESCSI_LOG_CMD, &scsi->log); - u8 *scsi_buf = pc->scsi_cmd->request_buffer; + u8 *scsi_buf; if (rq->cmd != IDESCSI_PC_RQ) { ide_end_request (uptodate, hwgroup); @@ -282,6 +282,7 @@ static void idescsi_end_request (byte uptodate, ide_hwgroup_t *hwgroup) printk ("ide-scsi: %s: suc %lu", drive->name, pc->scsi_cmd->serial_number); if (!test_bit(PC_WRITING, &pc->flags) && pc->actually_transferred && pc->actually_transferred <= 1024 && pc->buffer) { printk(", rst = "); + scsi_buf = pc->scsi_cmd->request_buffer; hexdump(scsi_buf, IDE_MIN(16, pc->scsi_cmd->request_bufflen)); } else printk("\n"); } @@ -326,7 +327,7 @@ static void idescsi_pc_intr (ide_drive_t *drive) if ((status & DRQ_STAT) == 0) { /* No more interrupts */ if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) printk (KERN_INFO "Packet command completed, %d bytes transferred\n", pc->actually_transferred); - ide_sti(); + ide__sti(); if (status & ERR_STAT) rq->errors++; idescsi_end_request (1, HWGROUP(drive)); @@ -345,7 +346,18 @@ static void idescsi_pc_intr (ide_drive_t *drive) if ( temp > pc->request_transfer) { if (temp > pc->buffer_size) { printk (KERN_ERR "ide-scsi: The scsi wants to send us more data than expected - discarding data\n"); - idescsi_discard_data (drive,bcount); + temp = pc->buffer_size - pc->actually_transferred; + if (temp) { + clear_bit(PC_WRITING, &pc->flags); + if (pc->sg) + idescsi_input_buffers(drive, pc, temp); + else + atapi_input_bytes(drive, pc->current_position, temp); + printk(KERN_ERR "ide-scsi: transferred %d of %d bytes\n", temp, bcount); + } + pc->actually_transferred += temp; + pc->current_position += temp; + idescsi_discard_data (drive,bcount - temp); ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc)); return; } -- cgit v1.2.3