On 04/28/2017 08:49 AM, Christoph Hellwig wrote:
>> @@ -1088,6 +1088,13 @@ static int mtip_quiesce_io(struct mtip_port *port,
>> unsigned long timeout)
>> return -EFAULT;
>> }
>>
>> +struct mtip_int_cmd {
>> + int fis_len;
>> + dma_addr_t buffer;
>> + int buf_len;
>> + u32 opts;
>> +};
>
> I know passing the dma_addr is probably the easier conversion for now,
> but using blk_rq_map_kern would be the cleaner way going forward.
>
>> + /* insert request and run queue */
>> + blk_execute_rq_nowait(rq->q, NULL, rq, true, NULL);
>> +
>> + wait_for_completion(&wait);
>
> Why not blk_execute_rq?
The internal requests don't go through the normal end_request part.
We can do that too of course, but I think we should keep it simple
to start to iron the issues out. Goes for using blk_rq_map_kern()
as well.
>> @@ -3770,6 +3803,9 @@ static int mtip_queue_rq(struct blk_mq_hw_ctx *hctx,
>>
>> mtip_init_cmd_header(rq);
>>
>> + if (rq->rq_flags & RQF_RESERVED)
>
> And in fact I don't think we'd even need the helper I suggested before,
> we can just check for REQ_OP_DRV_IN here.
True, we can just use blk_rq_is_passthrough here, I'll do that.
> But while we're at it - one oddity in mtip32xx is that it converts
> discards to an internal command from ->queue_rq, so we end up using
> two requests for it. Just handling discards here would be a nice
> improvement. It would also easily allow the driver to support ranged
> trims..
>
> But I guess I'm simply to picky and we should just fix up the worst issues
> first..
All of these are good suggestions, but yes, I think we should do the
worst issues first, so we can kill the NO_SCHED flag.
--
Jens Axboe