Problem spotted by: Suzuki K P <suzuki@in.ibm.com>
A zero return on success isn't correct for filesystem write functions.
They should either return negative error or the length of bytes
consumed. Add code to convert our zero on success error return to
return the length of bytes passed in.
This fixes the following:
$ echo "scsi remove-single-device 0 0 3 0" > /proc/scsi/scsi
bash: echo: write error: No such device or address"
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
lun = simple_strtoul(p + 1, &p, 0);
err = scsi_add_single_device(host, channel, id, lun);
- if (err >= 0)
- err = length;
/*
* Usage: echo "scsi remove-single-device 0 1 2 3" >/proc/scsi/scsi
err = scsi_remove_single_device(host, channel, id, lun);
}
+ /*
+ * convert success returns so that we return the
+ * number of bytes consumed.
+ */
+ if (!err)
+ err = length;
+
out:
free_page((unsigned long)buffer);
return err;