Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d1900f1 authored by Dennis Dalessandro's avatar Dennis Dalessandro Committed by Greg Kroah-Hartman
Browse files

staging/rdma/hfi1: Return immediately on error



Now that the spinlock is not taken throughout hfi1_ioctl it is safe to return
early rather than setting a variable and falling through the switch.

Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 33ab3490
Loading
Loading
Loading
Loading
+24 −38
Original line number Diff line number Diff line
@@ -1019,20 +1019,16 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
		if (copy_from_user(&link_info,
				   (struct hfi1_link_info __user *)arg,
				   sizeof(link_info)))
			ret = -EFAULT;
			return -EFAULT;

		value = link_info.port_state;
		index = link_info.port_number;
		if (index > dd->num_pports - 1) {
			ret = -EINVAL;
			break;
		}
		if (index > dd->num_pports - 1)
			return -EINVAL;

		ppd = &dd->pport[index];
		if (!ppd) {
			ret = -EINVAL;
			break;
		}
		if (!ppd)
			return -EINVAL;

		/* What we want to transition to */
		phys_state = (value >> 4) & 0xF;
@@ -1056,8 +1052,7 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
				dev_state = HLS_DN_DISABLE;
				break;
			default:
				ret = -EINVAL;
				goto done;
				return -EINVAL;
			}
			ret = set_link_state(ppd, dev_state);
			break;
@@ -1072,8 +1067,7 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
				send_idle_sma(dd, SMA_IDLE_ACTIVE);
			break;
		default:
			ret = -EINVAL;
			break;
			return -EINVAL;
		}

		if (ret)
@@ -1086,7 +1080,7 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
			if (copy_from_user(&link_info,
					   (struct hfi1_link_info __user *)arg,
					   sizeof(link_info)))
				ret = -EFAULT;
				return -EFAULT;
			index = link_info.port_number;
		} else {
			ret = __get_user(index, (int __user *)arg);
@@ -1094,16 +1088,13 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
				break;
		}

		if (index > dd->num_pports - 1) {
			ret = -EINVAL;
			break;
		}
		if (index > dd->num_pports - 1)
			return -EINVAL;

		ppd = &dd->pport[index];
		if (!ppd) {
			ret = -EINVAL;
			break;
		}
		if (!ppd)
			return -EINVAL;

		value = hfi1_ibphys_portstate(ppd);
		value <<= 4;
		value |= driver_lstate(ppd);
@@ -1120,7 +1111,7 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
						ppd->link_width_active;
			if (copy_to_user((struct hfi1_link_info __user *)arg,
					 &link_info, sizeof(link_info)))
				ret = -EFAULT;
				return -EFAULT;
		} else {
			ret = __put_user(value, (int __user *)arg);
		}
@@ -1151,14 +1142,12 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
		/* just copy command structure */
		argp = (unsigned long *)arg;
		if (copy_from_user(&filter_cmd, (void __user *)argp,
				   sizeof(filter_cmd))) {
			ret = -EFAULT;
			break;
		}
				   sizeof(filter_cmd)))
			return -EFAULT;

		if (filter_cmd.opcode >= HFI1_MAX_FILTERS) {
			pr_alert("Invalid opcode in request\n");
			ret = -EINVAL;
			break;
			return -EINVAL;
		}

		snoop_dbg("Opcode %d Len %d Ptr %p",
@@ -1167,17 +1156,15 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)

		filter_value = kcalloc(filter_cmd.length, sizeof(u8),
				       GFP_KERNEL);
		if (!filter_value) {
			ret = -ENOMEM;
			break;
		}
		if (!filter_value)
			return -ENOMEM;

		/* copy remaining data from userspace */
		if (copy_from_user((u8 *)filter_value,
				   (void __user *)filter_cmd.value_ptr,
				   filter_cmd.length)) {
			kfree(filter_value);
			ret = -EFAULT;
			break;
			return -EFAULT;
		}
		/* Drain packets first */
		spin_lock_irqsave(&dd->hfi1_snoop.snoop_lock, flags);
@@ -1207,10 +1194,9 @@ static long hfi1_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
			snoop_flags |= SNOOP_USE_METADATA;
		break;
	default:
		ret = -ENOTTY;
		break;
		return -ENOTTY;
	}
done:

	return ret;
}