Staging: sep: flow ioctl cleanup
authorAlan Cox <alan@linux.intel.com>
Fri, 14 Aug 2009 14:42:41 +0000 (15:42 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Sep 2009 19:02:15 +0000 (12:02 -0700)
Simple ioctl taking a single numeric argument so ditch the structs and
weirdness. While we are it lock it properly and fix the error returns.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/sep/sep_driver.c

index 73f20c4..23514f9 100644 (file)
@@ -2167,39 +2167,32 @@ static int sep_end_transaction_handler(struct sep_device *sep, unsigned long arg
 }
 
 
-/*
-  This function handler the set flow id command
-*/
-static int sep_set_flow_id_handler(struct sep_device *sep, unsigned long arg)
+/**
+ *     sep_set_flow_id_handler -       handle flow setting
+ *     @sep: the SEP we are configuring
+ *     @flow_id: the flow we are setting
+ *
+ * This function handler the set flow id command
+ */
+static int sep_set_flow_id_handler(struct sep_device *sep,
+                                               unsigned long flow_id)
 {
-       int error;
-       unsigned long flow_id;
+       int error = 0;
        struct sep_flow_context_t *flow_data_ptr;
 
-       dbg("------------>SEP Driver: sep_set_flow_id_handler start\n");
-
-       error = get_user(flow_id, &(((struct sep_driver_set_flow_id_t *) arg)->flow_id));
-       if (error)
-               goto end_function;
-
        /* find the flow data structure that was just used for creating new flow
           - its id should be default */
-       flow_data_ptr = sep_find_flow_context(sep, SEP_TEMP_FLOW_ID);
-       if (flow_data_ptr == NULL)
-               goto end_function;
-
-       /* set flow id */
-       flow_data_ptr->flow_id = flow_id;
 
-end_function:
-       dbg("SEP Driver:<-------- sep_set_flow_id_handler end\n");
+       mutex_lock(&sep_mutex);
+       flow_data_ptr = sep_find_flow_context(sep, SEP_TEMP_FLOW_ID);
+       if (flow_data_ptr)
+               flow_data_ptr->flow_id = flow_id;       /* set flow id */
+       else
+               error = -EINVAL;
+       mutex_unlock(&sep_mutex);
        return error;
 }
 
-
-
-
-
 static int sep_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
 {
        int error = 0;
@@ -2245,7 +2238,7 @@ static int sep_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, u
                break;
        case SEP_IOCSETFLOWID:
                /* set flow id */
-               error = sep_set_flow_id_handler(sep, arg);
+               error = sep_set_flow_id_handler(sep, (unsigned long)arg);
                break;
        case SEP_IOCADDFLOWTABLE:
                /* add tables to the dynamic flow */