Re: [PATCH 1/6 v3] staging: unisys: move installer to sysfs and split fields

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 24, 2014 at 02:08:42PM -0400, Benjamin Romer wrote:
> +static ssize_t error_store(struct device *dev, struct device_attribute *attr,
> +		const char *buf, size_t count)
> +{
> +	u32 error;
> +
> +	if (sscanf(buf, "%i\n", &error) == 1) {
> +		if (visorchannel_write(ControlVm_channel,
> +			offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL,
> +				InstallationError),
> +			&error, sizeof(u32)) == 1) {

visorchannel_write() returns either 0 or -EFAULT so this condition is
never true.  This bug occurs in several places.

> +				return count;
> +		}
> +	}
> +	return -EIO;
> +}

It's almost always better to have error handling instead of success
handling.  It should be a string of commands in a row and so we don't
have nested if statements.

	ret = foo();
	if (ret)
		return ret;

	ret = bar();
	if (ret)
		return ret;

	ret = baz();
	if (ret)
		return ret;

	ret = fizzbuzz();
	if (ret)
		return ret;

Look, Ma, no indenting!  Also -EIO is wrong-ish.  visorchannel_write()
should probably return -EIO instead of -EFAULT.  Do it like this:

static ssize_t error_store(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	u32 error;
	int ret;

	if (sscanf(buf, "%u\n", &error) != 1)
		return -EINVAL;

	ret = visorchannel_write(ControlVm_channel,
				 offsetof(ULTRA_CONTROLVM_CHANNEL_PROTOCOL,
			         	  InstallationError),
				 &error, sizeof(error));
	if (ret)
		return ret;

	return count;
}

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux