staging: vc04_services: Fix wrong early return in next_service_by_instance()
If kref_get_unless_zero() fails, we should keep looking for the next service, since the callers of this function expect that a NULL return value means there are no more. Signed-off-by: Marcelo Diop-Gonzalez <marcgonzalez@google.com> Link: https://lore.kernel.org/r/20200213194001.130110-1-marcgonzalez@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
8ef0c4f064
Коммит
e232767873
|
@ -252,11 +252,15 @@ next_service_by_instance(struct vchiq_state *state,
|
|||
struct vchiq_service *service;
|
||||
|
||||
rcu_read_lock();
|
||||
while (1) {
|
||||
service = __next_service_by_instance(state, instance, pidx);
|
||||
if (service && kref_get_unless_zero(&service->ref_count))
|
||||
if (!service)
|
||||
break;
|
||||
if (kref_get_unless_zero(&service->ref_count)) {
|
||||
service = rcu_pointer_handoff(service);
|
||||
else
|
||||
service = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return service;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче