• Michael Kelley's avatar
    scsi: storvsc: Fix handling of srb_status and capacity change events · b8a5376c
    Michael Kelley authored
    Current handling of the srb_status is incorrect. Commit 52e1b3b3
    ("scsi: storvsc: Correctly handle multiple flags in srb_status")
    is based on srb_status being a set of flags, when in fact only the
    2 high order bits are flags and the remaining 6 bits are an integer
    status. Because the integer values of interest mostly look like flags,
    the code actually works when treated that way.
    
    But in the interest of correctness going forward, fix this by treating
    the low 6 bits of srb_status as an integer status code. Add handling
    for SRB_STATUS_INVALID_REQUEST, which was the original intent of commit
    52e1b3b3. Furthermore, treat the ERROR, ABORTED, and INVALID_REQUEST
    srb status codes as essentially equivalent for the cases we care about.
    There's no harm in doing so, and it isn't always clear which status code
    current or older versions of Hyper-V report for particular conditions.
    
    Treating the srb status codes as equivalent has the additional benefit
    of ensuring that capacity change events result in an immediate rescan
    so that the new size is known to Linux. Existing code checks SCSI
    sense data for capacity change events when the srb status is ABORTED.
    But capacity change events are also being observed when Hyper-V reports
    the srb status as ERROR. Without the immediate rescan, the new size
    isn't known until something else causes a rescan (such as running
    fdisk to expand a partition), and in the meantime, tools such as "lsblk"
    continue to report the old size.
    
    Fixes: 52e1b3b3 ("scsi: storvsc: Correctly handle multiple flags in srb_status")
    Reported-by: default avatarJuan Tian <juantian@microsoft.com>
    Signed-off-by: default avatarMichael Kelley <mikelley@microsoft.com>
    Link: https://lore.kernel.org/r/1668019722-1983-1-git-send-email-mikelley@microsoft.comSigned-off-by: default avatarWei Liu <wei.liu@kernel.org>
    b8a5376c
storvsc_drv.c 58 KB