• Brian King's avatar
    block: Range check cpu in blk_cpu_to_group · be14eb61
    Brian King authored
    While testing CPU DLPAR, the following problem was discovered.
    We were DLPAR removing the first CPU, which in this case was
    logical CPUs 0-3. CPUs 0-2 were already marked offline and
    we were in the process of offlining CPU 3. After marking
    the CPU inactive and offline in cpu_disable, but before the
    cpu was completely idle (cpu_die), we ended up in __make_request
    on CPU 3. There we looked at the topology map to see which CPU
    to complete the I/O on and found no CPUs in the cpu_sibling_map.
    This resulted in the block layer setting the completion cpu
    to be NR_CPUS, which then caused an oops when we tried to
    complete the I/O.
    
    Fix this by sanity checking the value we return from blk_cpu_to_group
    to be a valid cpu value.
    Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    be14eb61
blk.h 4.63 KB