diff options
author | Christoph Hellwig <hch@lst.de> | 2010-05-25 08:17:54 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2010-06-03 09:09:18 -0400 |
commit | a5b365a652206ca300256974ed9301a7d241a6ed (patch) | |
tree | 1898846dcce5b1815f8e13d7b0b610c83be1da7f /drivers/block | |
parent | aef4b9aaae1decc775778903922bd0075cce7a88 (diff) |
virtio-blk: fix minimum number of S/G elements
We need at least one S/G element to operate properly, as does the block
layer which increments it to one anyway. We hit this due to a qemu
bug which advertises a sg_elements of 0 under some circumstances.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (tweaked logic)
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/virtio_blk.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 83fa09a836ca..258bc2ae2885 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
@@ -298,7 +298,9 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) | |||
298 | err = virtio_config_val(vdev, VIRTIO_BLK_F_SEG_MAX, | 298 | err = virtio_config_val(vdev, VIRTIO_BLK_F_SEG_MAX, |
299 | offsetof(struct virtio_blk_config, seg_max), | 299 | offsetof(struct virtio_blk_config, seg_max), |
300 | &sg_elems); | 300 | &sg_elems); |
301 | if (err) | 301 | |
302 | /* We need at least one SG element, whatever they say. */ | ||
303 | if (err || !sg_elems) | ||
302 | sg_elems = 1; | 304 | sg_elems = 1; |
303 | 305 | ||
304 | /* We need an extra sg elements at head and tail. */ | 306 | /* We need an extra sg elements at head and tail. */ |