On Mon, Aug 20, 2018 at 9:29 AM jianchao.wang <jianchao.w.wang@xxxxxxxxxx> wrote: > > Hi Ming > > On 08/17/2018 05:33 PM, Ming Lei wrote: > >> + /* > >> + * elevator_release will put it. > >> + */ > >> + __module_get(q->elv_type->elevator_owner); > > I understand what elevator_release() frees is the 'ref-counter' got in > > elevator_get(), but who will be the counter-pair of the above __module_get()? > > > Sorry for my bad description. > > The code path is: > > elevator_release > -> elevator_put(e->type) > -> module_put(e->elevator_owner) > > In normal elevator switch path, elevator_get will hold a reference counter of the > elevator_owner. > In this patch set, the elevator_type is saved directly. To prevent the io scheduler module > is removed, we need to hold a reference of the module. Yeah, I agree that the module reference need to be held, but it need to be released too. My concern is that this introduced getting module reference in your patch isn't released. The module reference is a counter too, so the get and put operation should be matched. thanks, Ming Lei