On Wed, Sep 04, 2019 at 11:32:04AM +0300, Max Gurtovoy wrote: > > On 9/4/2019 8:49 AM, Christoph Hellwig wrote: >> On Tue, Sep 03, 2019 at 01:21:59PM -0600, Jens Axboe wrote: >>> On 9/3/19 1:11 PM, Sagi Grimberg wrote: >>>>> + if (blk_integrity_rq(req) && req_op(req) == REQ_OP_READ && >>>>> + error == BLK_STS_OK) >>>>> + t10_pi_complete(req, >>>>> + nr_bytes / queue_logical_block_size(req->q)); >>>>> + >>>> div in this path? better to use >> ilog2(block_size). >>>> >>>> Also, would be better to have a wrapper in place like: >>>> >>>> static inline unsigned short blk_integrity_interval(struct request *rq) >>>> { >>>> return queue_logical_block_size(rq->q); >>>> } >>> If it's a hot path thing that matters, I'd strongly suggest to add >>> a queue block size shift instead. >> Make that a protection_interval_shift, please. While that currently >> is the same as the logical block size the concepts are a little >> different, and that makes it clear. Except for that this patch looks >> very nice to me, it is great to avoid having drivers to deal with the >> PI remapping. > > Christoph, > > I was thinking about the following addition to the code (combination of all > the suggestions): I'll defer to Martin, but I think we still need the integrity_interval naming in some form. static inline unsigned short queue_logical_block_shift(struct request_queue *q) > +{ > + unsigned short retval = 9; > + > + if (q && q->limits.logical_block_shift) > + retval = q->limits.logical_block_shift; > + > + return retval; I don't think a NULL queue makes any sense here. And I'd rather ensure the field is always set rather than adding a conditional here. And btw, centrelize in the Subject should be centralize.