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