[PATCH 456/641] Staging: sep: flow ioctl cleanup

Greg Kroah-Hartman gregkh at suse.de
Tue Sep 15 19:11:27 UTC 2009


From: Alan Cox <alan at linux.intel.com>

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 at linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
---
 drivers/staging/sep/sep_driver.c |   43 +++++++++++++++----------------------
 1 files changed, 18 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c
index 73f20c4..23514f9 100644
--- a/drivers/staging/sep/sep_driver.c
+++ b/drivers/staging/sep/sep_driver.c
@@ -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 */
-- 
1.6.4.2




More information about the devel mailing list