• Yehuda Sadeh's avatar
    rbd: fix split bio handling · 1fec7093
    Yehuda Sadeh authored
    The rbd driver currently splits bios when they span an object boundary.
    However, the blk_end_request expects the completions to roll up the results
    in block device order, and the split rbd/ceph ops can complete in any
    order.  This patch adds a struct rbd_req_coll to track completion of split
    requests and ensures that the results are passed back up to the block layer
    in order.
    
    This fixes errors where the file system gets completion of a read operation
    that spans an object boundary before the data has actually arrived.  The
    bug is easily reproduced with iozone with a working set larger than
    available RAM.
    Reported-by: default avatarFyodor Ustinov <ufm@ufm.su>
    Signed-off-by: default avatarYehuda Sadeh <yehuda@hq.newdream.net>
    Signed-off-by: default avatarSage Weil <sage@newdream.net>
    1fec7093
rbd.c 54.1 KB