• Roger Pau Monne's avatar
    xen-blkfront: handle bvecs with partial data · d62f6918
    Roger Pau Monne authored
    Currently blkfront fails to handle cases in blkif_completion like the
    following:
    
    1st loop in rq_for_each_segment
     * bv_offset: 3584
     * bv_len: 512
     * offset += bv_len
     * i: 0
    
    2nd loop:
     * bv_offset: 0
     * bv_len: 512
     * i: 0
    
    In the second loop i should be 1, since we assume we only wanted to
    read a part of the previous page. This patches fixes this cases where
    only a part of the shared page is read, and blkif_completion assumes
    that if the bv_offset of a bvec is less than the previous bv_offset
    plus the bv_size we have to switch to the next shared page.
    Reported-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
    Cc: linux-kernel@vger.kernel.org
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    d62f6918
xen-blkfront.c 42.5 KB