staging: vchiq_arm: rework close/remove_service IOCTLS
authorNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Tue, 20 Nov 2018 14:53:37 +0000 (15:53 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Nov 2018 09:10:09 +0000 (10:10 +0100)
The implementation of both IOCTLS was the same except for one function
call. This joins both implementations and updates the code to avoid
unneeded indentations.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index 6d503392341ef1a16ad5ef4ff43da2f47062cd3c..d88dd7415e1ebeaa0807802db2a2f3e24d918dc5 100644 (file)
@@ -1019,55 +1019,37 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                }
        } break;
 
-       case VCHIQ_IOC_CLOSE_SERVICE: {
+       case VCHIQ_IOC_CLOSE_SERVICE:
+       case VCHIQ_IOC_REMOVE_SERVICE: {
                VCHIQ_SERVICE_HANDLE_T handle = (VCHIQ_SERVICE_HANDLE_T)arg;
+               USER_SERVICE_T *user_service;
 
                service = find_service_for_instance(instance, handle);
-               if (service != NULL) {
-                       USER_SERVICE_T *user_service =
-                               (USER_SERVICE_T *)service->base.userdata;
-                       /* close_pending is false on first entry, and when the
-                          wait in vchiq_close_service has been interrupted. */
-                       if (!user_service->close_pending) {
-                               status = vchiq_close_service(service->handle);
-                               if (status != VCHIQ_SUCCESS)
-                                       break;
-                       }
-
-                       /* close_pending is true once the underlying service
-                          has been closed until the client library calls the
-                          CLOSE_DELIVERED ioctl, signalling close_event. */
-                       if (user_service->close_pending &&
-                               down_interruptible(&user_service->close_event))
-                               status = VCHIQ_RETRY;
-               } else
+               if (!service) {
                        ret = -EINVAL;
-       } break;
+                       break;
+               }
 
-       case VCHIQ_IOC_REMOVE_SERVICE: {
-               VCHIQ_SERVICE_HANDLE_T handle = (VCHIQ_SERVICE_HANDLE_T)arg;
+               user_service = service->base.userdata;
 
-               service = find_service_for_instance(instance, handle);
-               if (service != NULL) {
-                       USER_SERVICE_T *user_service =
-                               (USER_SERVICE_T *)service->base.userdata;
-                       /* close_pending is false on first entry, and when the
-                          wait in vchiq_close_service has been interrupted. */
-                       if (!user_service->close_pending) {
-                               status = vchiq_remove_service(service->handle);
-                               if (status != VCHIQ_SUCCESS)
-                                       break;
-                       }
+               /* close_pending is false on first entry, and when the
+                  wait in vchiq_close_service has been interrupted. */
+               if (!user_service->close_pending) {
+                       status = (cmd == VCHIQ_IOC_CLOSE_SERVICE) ?
+                                vchiq_close_service(service->handle) :
+                                vchiq_remove_service(service->handle);
+                       if (status != VCHIQ_SUCCESS)
+                               break;
+               }
 
-                       /* close_pending is true once the underlying service
-                          has been closed until the client library calls the
-                          CLOSE_DELIVERED ioctl, signalling close_event. */
-                       if (user_service->close_pending &&
-                               down_interruptible(&user_service->close_event))
-                               status = VCHIQ_RETRY;
-               } else
-                       ret = -EINVAL;
-       } break;
+               /* close_pending is true once the underlying service
+                  has been closed until the client library calls the
+                  CLOSE_DELIVERED ioctl, signalling close_event. */
+               if (user_service->close_pending &&
+                       down_interruptible(&user_service->close_event))
+                       status = VCHIQ_RETRY;
+               break;
+       }
 
        case VCHIQ_IOC_USE_SERVICE:
        case VCHIQ_IOC_RELEASE_SERVICE: {