On Mon, 27 Feb 2017 15:30:30 -0800
Stephen Hemminger <step...@networkplumber.org> wrote:

> Something in SCSI in 4.11 broke booting on Hyper-V Generation 2 VM with 8 
> VCPU and 4G of memory.
> Both Linus's current tree (4.11 pre-rc1) and linux-next fail in a similar 
> manner. It looks like some error
> in SCSI device detection because there is only a single device.
> 
> The offending commit causing the regression is:
> 
> $ git bisect bad
> e9c787e65c0c36529745be47d490d998b4b6e589 is the first bad commit
> commit e9c787e65c0c36529745be47d490d998b4b6e589
> Author: Christoph Hellwig <h...@lst.de>
> Date:   Mon Jan 2 21:55:26 2017 +0300
> 
>     scsi: allocate scsi_cmnd structures as part of struct request
>     
>     Rely on the new block layer functionality to allocate additional driver
>     specific data behind struct request instead of implementing it in SCSI
>     itѕelf.
>     
>     Signed-off-by: Christoph Hellwig <h...@lst.de>
>     Acked-by: Martin K. Petersen <martin.peter...@oracle.com>
>     Reviewed-by: Hannes Reinecke <h...@suse.com>
>     Signed-off-by: Jens Axboe <ax...@fb.com>
> 
> :040000 040000 6ff016fcdae227efeb19c1c301b17ccd7ea35da6 
> 70d79f99d9b79ecf4dccbe067fc697219f5c78da M    drivers
> :040000 040000 a672ff52df8b2c211b3f98cae4a88d8a96ccde0b 
> 1aaaed7de0994f597c7f8290c722a0b4a7789429 M    include
> 
> I checked and tree is current and up to date and includes 
> commit ee5242360424b9b967454e9183767323d10cf985
> Author: Christoph Hellwig <h...@lst.de>
> Date:   Tue Feb 21 10:04:55 2017 +0100
> 
>     scsi: zero per-cmd driver data before each I/O
> 
> Kernel config is attached. It started with Ubuntu config, but then did 
> localmodconfig and pruned
> out unnecessary stuff.
> 

This problem I am seeing looks like the one addressed by:

Fixes: ee5242360424 ("scsi: zero per-cmd driver data before each I/O")

but that is already in linux-next.

Noticed another place where memset(of the data was being done not the extra 
bits.
Tried this, but didn't fix it either...


diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index ba2286652ff6..7e0463e78ff4 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1850,7 +1850,7 @@ static int scsi_mq_prep_fn(struct request *req)
 
        /* zero out the cmd, except for the embedded scsi_request */
        memset((char *)cmd + sizeof(cmd->req), 0,
-               sizeof(*cmd) - sizeof(cmd->req));
+               sizeof(*cmd) - sizeof(cmd->req) + sdev->host->hostt->cmd_size);
 
        req->special = cmd;
 

Reply via email to