Re: [PATCH] nbd: fix partial sending
On 10/17/24 9:13 AM, Bart Van Assche wrote:
> On 10/17/24 4:36 AM, Ming Lei wrote:
>> +static blk_status_t nbd_send_pending_cmd(struct nbd_device *nbd,
>> + struct nbd_cmd *cmd)
>> +{
>> + struct request *req = blk_mq_rq_from_pdu(cmd);
>> + unsigned long deadline = READ_ONCE(req->deadline);
>> + unsigned int wait_ms = 2;
>> + blk_status_t res;
>> +
>> + WARN_ON_ONCE(test_bit(NBD_CMD_REQUEUED, &cmd->flags));
>> +
>> + while (true) {
>> + res = nbd_send_cmd(nbd, cmd, cmd->index);
>> + if (res != BLK_STS_RESOURCE)
>> + return res;
>> + if (READ_ONCE(jiffies) + msecs_to_jiffies(wait_ms) >= deadline)
>> + break;
>> + msleep(wait_ms);
>> + wait_ms *= 2;
>> + }
>
> I think that there are better solutions to wait until more data
> can be sent, e.g. by using the kernel equivalent of the C library
> function select().
It's vfs_poll() - but I don't think that'd be worth it here, the nbd
driver sets BLK_MQ_F_BLOCKING anyway. Using a poll trigger for this
would be a lot more complicated, and need quite a bit of support code.
--
Jens Axboe
Reply to: