Thread (19 messages) 19 messages, 4 authors, 2022-03-03

Re: [PATCH v2] virtio-blk: Remove BUG_ON() in virtio_queue_rq()

From: Yongji Xie <hidden>
Date: 2022-03-02 10:46:18

On Tue, Mar 1, 2022 at 11:43 PM Michael S. Tsirkin [off-list ref] wrote:
On Mon, Feb 28, 2022 at 02:57:20PM +0800, Xie Yongji wrote:
quoted
Currently we have a BUG_ON() to make sure the number of sg
list does not exceed queue_max_segments() in virtio_queue_rq().
However, the block layer uses queue_max_discard_segments()
instead of queue_max_segments() to limit the sg list for
discard requests. So the BUG_ON() might be triggered if
virtio-blk device reports a larger value for max discard
segment than queue_max_segments().
Hmm the spec does not say what should happen if max_discard_seg
exceeds seg_max. Is this the config you have in mind? how do you
create it?
One example: the device doesn't specify the value of max_discard_seg
in the config space, then the virtio-blk driver will use
MAX_DISCARD_SEGMENTS (256) by default. Then we're able to trigger the
BUG_ON() if the seg_max is less than 256.

While the spec didn't say what should happen if max_discard_seg
exceeds seg_max, it also doesn't explicitly prohibit this
configuration. So I think we should at least not panic the kernel in
this case.

Thanks,
Yongji
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help