]> git.baikalelectronics.ru Git - kernel.git/commit
rbd: fix split bio handling
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 13 May 2011 20:52:56 +0000 (13:52 -0700)
committerSage Weil <sage@newdream.net>
Fri, 13 May 2011 20:52:57 +0000 (13:52 -0700)
commitaf0c007a4806e9aab450c1f7d4efc75b37755d53
tree921f08b555d2b71e7356034aae65bed4ed37e2df
parenta4d5de4c8c7cbceb9174dfc10223d8217eff1838
rbd: fix split bio handling

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: Fyodor Ustinov <ufm@ufm.su>
Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Sage Weil <sage@newdream.net>
drivers/block/rbd.c