From: Christoph Hellwig This looks preyyu much like a breakage because we're now always sending S/G list down the scsi layer. The patch below brings over code to handle that case from the megaraid_mbox driver. It's still wrong for the case someone sends a MODE_SENSE from highmem userspace, but it should at least boot with the patch applied. (akpm: still waiting for Jack to test this) Cc: Jack Byer Cc: James Bottomley Signed-off-by: Andrew Morton --- drivers/scsi/megaraid.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) diff -puN drivers/scsi/megaraid.c~megaraid-mode_sense-fix drivers/scsi/megaraid.c --- devel/drivers/scsi/megaraid.c~megaraid-mode_sense-fix 2005-09-14 02:23:24.000000000 -0700 +++ devel-akpm/drivers/scsi/megaraid.c 2005-09-14 02:23:24.000000000 -0700 @@ -621,8 +621,6 @@ mega_build_cmd(adapter_t *adapter, Scsi_ if(islogical) { switch (cmd->cmnd[0]) { case TEST_UNIT_READY: - memset(cmd->request_buffer, 0, cmd->request_bufflen); - #if MEGA_HAVE_CLUSTERING /* * Do we support clustering and is the support enabled @@ -653,7 +651,19 @@ mega_build_cmd(adapter_t *adapter, Scsi_ #endif case MODE_SENSE: - memset(cmd->request_buffer, 0, cmd->cmnd[4]); + if (cmd->use_sg) { + struct scatterlist *sgl; + caddr_t vaddr; + + sgl = (struct scatterlist *)cmd->request_buffer; + vaddr = (caddr_t) + (page_address((&sgl[0])->page) + + (&sgl[0])->offset); + + memset(vaddr, 0, cmd->cmnd[4]); + } else { + memset(cmd->request_buffer, 0, cmd->cmnd[4]); + } cmd->result = (DID_OK << 16); cmd->scsi_done(cmd); return NULL; _