From: Milan Broz <[email-masked]>

Prepare code for implementing buffer wipe flag.
No functional change in this patch.

Signed-off-by: Milan Broz <[email-masked]>
Acked-by: Mike Snitzer <[email-masked]>
Signed-off-by: Alasdair G Kergon <[email-masked]>

---
drivers/md/dm-ioctl.c |   21 ++++++++-------------
 drivers/md/dm-ioctl.c |   25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

Index: linux-2.6.38-rc4/drivers/md/dm-ioctl.c
===================================================================
--- linux-2.6.38-rc4.orig/drivers/md/dm-ioctl.c
+++ linux-2.6.38-rc4/drivers/md/dm-ioctl.c
@@ -1501,11 +1501,6 @@ static int check_version(unsigned int cm
 	return r;
 }
 
-static void free_params(struct dm_ioctl *param)
-{
-	vfree(param);
-}
-
 static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param)
 {
 	struct dm_ioctl tmp, *dmi;
@@ -1520,13 +1515,15 @@ static int copy_params(struct dm_ioctl _
 	if (!dmi)
 		return -ENOMEM;
 
-	if (copy_from_user(dmi, user, tmp.data_size)) {
-		vfree(dmi);
-		return -EFAULT;
-	}
+	if (copy_from_user(dmi, user, tmp.data_size))
+		goto bad;
 
 	*param = dmi;
 	return 0;
+
+bad:
+	vfree(dmi);
+	return -EFAULT;
 }
 
 static int validate_params(uint cmd, struct dm_ioctl *param)
@@ -1564,7 +1561,7 @@ static int ctl_ioctl(uint command, struc
 	unsigned int cmd;
 	struct dm_ioctl *uninitialized_var(param);
 	ioctl_fn fn = NULL;
-	size_t param_size;
+	size_t input_param_size;
 
 	/* only root can play with this */
 	if (!capable(CAP_SYS_ADMIN))
@@ -1605,6 +1602,7 @@ static int ctl_ioctl(uint command, struc
 	 * Copy the parameters into kernel space.
 	 */
 	r = copy_params(user, &param);
+	input_param_size = param->data_size;
 
 	current->flags &= ~PF_MEMALLOC;
 
@@ -1615,9 +1613,8 @@ static int ctl_ioctl(uint command, struc
 	if (r)
 		goto out;
 
-	param_size = param->data_size;
 	param->data_size = sizeof(*param);
-	r = fn(param, param_size);
+	r = fn(param, input_param_size);
 
 	/*
 	 * Copy the results back to userland.
@@ -1625,8 +1622,8 @@ static int ctl_ioctl(uint command, struc
 	if (!r && copy_to_user(user, param, param->data_size))
 		r = -EFAULT;
 
- out:
-	free_params(param);
+out:
+	vfree(param);
 	return r;
 }