diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-17 15:52:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-17 15:52:02 -0400 |
| commit | 96d8683483b7eb194609edd1afe9143a0467b7d3 (patch) | |
| tree | 290e5caff3db097e57fb321dcdb5fe7d14463088 | |
| parent | 15bbc1b28ff65767922f78c266821cc138b90a47 (diff) | |
| parent | 46faeed4a61e220b99591e9773057160eb437cc8 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
Pull Ceph fix from Sage Weil:
"It's a simple fix for a hard to hit race, but low-risk and clearly
correct"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
rbd: do a safe list traversal in rbd_img_request_submit()
| -rw-r--r-- | drivers/block/rbd.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index f556f8a8b3f9..b7b7a88d9f68 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
| @@ -1742,9 +1742,10 @@ static int rbd_img_request_submit(struct rbd_img_request *img_request) | |||
| 1742 | struct rbd_device *rbd_dev = img_request->rbd_dev; | 1742 | struct rbd_device *rbd_dev = img_request->rbd_dev; |
| 1743 | struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; | 1743 | struct ceph_osd_client *osdc = &rbd_dev->rbd_client->client->osdc; |
| 1744 | struct rbd_obj_request *obj_request; | 1744 | struct rbd_obj_request *obj_request; |
| 1745 | struct rbd_obj_request *next_obj_request; | ||
| 1745 | 1746 | ||
| 1746 | dout("%s: img %p\n", __func__, img_request); | 1747 | dout("%s: img %p\n", __func__, img_request); |
| 1747 | for_each_obj_request(img_request, obj_request) { | 1748 | for_each_obj_request_safe(img_request, obj_request, next_obj_request) { |
| 1748 | int ret; | 1749 | int ret; |
| 1749 | 1750 | ||
| 1750 | obj_request->callback = rbd_img_obj_callback; | 1751 | obj_request->callback = rbd_img_obj_callback; |
