On 10/19/20 10:42 AM, Hui Su wrote:
> @@ -633,23 +633,21 @@ static struct elevator_type 
> *elevator_get_default(struct request_queue *q)
>   */
>  static struct elevator_type *elevator_get_by_features(struct request_queue 
> *q)
>  {
> -     struct elevator_type *e, *found = NULL;
> +     struct elevator_type *e = NULL;
>  
>       spin_lock(&elv_list_lock);
> -
>       list_for_each_entry(e, &elv_list, list) {
>               if (elv_support_features(e->elevator_features,
>                                        q->required_elevator_features)) {
> -                     found = e;
>                       break;
>               }
>       }
> +     spin_unlock(&elv_list_lock);
>  
> -     if (found && !try_module_get(found->elevator_owner))
> -             found = NULL;
> +     if (e && !try_module_get(e->elevator_owner))
> +             e = NULL;
>  
> -     spin_unlock(&elv_list_lock);
> -     return found;
> +     return e;
>  }

This looks wrong as well. If we don't match the elevator, then we just
return the last one. Or maybe even a totally invalid entry, depending on
how the list iteration works.


-- 
Jens Axboe

Reply via email to