On Wed, May 17, 2023 at 09:22:18AM +0200, Christoph Hellwig wrote: > On Tue, May 16, 2023 at 04:39:05PM +0800, Ming Lei wrote: > > I can understand the point, but it may not be done by single flag, > > Can you explain why? Note that we also already have RQF_ELVPRIV for > any request that has elevator private data. I don't really think we > need a third flag. RQF_ELVPRIV isn't same with RQF_ELV, and follows the two's relationship: RQF_ELVPRIV == (RQF_ELV && non_flush_pt_req && !e->type->ops.prepare_request) RQF_ELVPRIV can be replaced with the above expression to save one flag. RQF_ELV isn't same with RQF_SCHED_TAGS too, RQF_ELV should be used for checking if elevator callback is needed, and RQF_SCHED_TAGS is for allocating req/tag and dealing with tags busy things. In case of q->elevator, RQF_SCHED_TAGS is always set, but - for pt/flush request, RQF_ELV is cleared. - for other request, RQF_ELV are set Then we can avoid any elevator callback for pt/flush request. thanks, Ming