Re: [PATCH v2 5/6] block: add QUEUE_FLAG_POLL_CAP flag

JeffleXu
2021-01-28T02:10:27Z

On 1/28/21 1:13 AM, Mike Snitzer wrote:
> On Mon, Jan 25 2021 at 7:13am -0500,
> Jeffle Xu <jefflexu@linux.alibaba.com> wrote:
>
>> Introduce QUEUE_FLAG_POLL_CAP flag representing if the request queue
>> capable of polling or not.
>>
>> Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
>
> Why are you adding QUEUE_FLAG_POLL_CAP? Doesn't seem as though DM or
> anything else actually needs it.

Users can switch on/off polling on device via
'/sys/block/<dev>/queue/io_poll' at runtime. The requisite for turning
on polling is that the device is **capable** of polling. For mq devices,
the requisite is that there's polling hw queue for the device, i.e.,

```
q->tag_set->nr_maps > HCTX_TYPE_POLL &&
q->tag_set->map[HCTX_TYPE_POLL].nr_queues
```

But for dm devices, we need to check if all the underlying devices
support polling or not. Without this newly added queue flag, we need to
check again every time users want to turn on polling via 'io_poll', and
thus the dm layer need to export one interface to block layer, checking
if all the underlying target devices support polling or not, maybe just
like the iopoll() method we did in patch 3. Something like,

```
struct block_device_operations {
+ bool (*support_iopoll)(struct request_queue *q);
```

The newly added queue flag 'QUEUE_FLAG_POLL_CAP' is just used as a cache
representing if the device **capable** of polling, while the original
queue flag 'QUEUE_FLAG_POLL' representing if polling is turned on for
this device **currently**.

But indeed we are short of queue flag resource. Adding a new queue flag
may not be the best resolution.

Any inspiration?

--
Thanks,
Jeffle