summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/comedi_fops.c
diff options
context:
space:
mode:
authorH Hartley Sweeten2012-12-19 23:40:08 +0100
committerGreg Kroah-Hartman2013-01-07 23:25:47 +0100
commit5c87fef53cb338a919a18349facaf172c1f0cf75 (patch)
treed837da94e391f0e5ea8cb166226b63a03438fa77 /drivers/staging/comedi/comedi_fops.c
parentstaging: comedi: comedi_fops: cleanup comedi_poll() (diff)
downloadkernel-qcow2-linux-5c87fef53cb338a919a18349facaf172c1f0cf75.tar.gz
kernel-qcow2-linux-5c87fef53cb338a919a18349facaf172c1f0cf75.tar.xz
kernel-qcow2-linux-5c87fef53cb338a919a18349facaf172c1f0cf75.zip
staging: comedi: comedi_fops: remove the goto's in comedi_read()
Use comedi_dev_from_minor() to simplify the return -ENODEV tests. Cleanup the sanity checking a bit and remove the need for the goto's when returning an initial error condition. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/comedi_fops.c')
-rw-r--r--drivers/staging/comedi/comedi_fops.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
index 093f403554ce..cf1410dfc52c 100644
--- a/drivers/staging/comedi/comedi_fops.c
+++ b/drivers/staging/comedi/comedi_fops.c
@@ -1980,38 +1980,25 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes,
DECLARE_WAITQUEUE(wait, current);
const unsigned minor = iminor(file->f_dentry->d_inode);
struct comedi_file_info *info = comedi_file_info_from_minor(minor);
- struct comedi_device *dev;
+ struct comedi_device *dev = comedi_dev_from_minor(minor);
- if (info == NULL)
- return -ENODEV;
- dev = info->device;
- if (dev == NULL)
+ if (!dev)
return -ENODEV;
if (!dev->attached) {
DPRINTK("no driver configured on comedi%i\n", dev->minor);
- retval = -ENODEV;
- goto done;
+ return -ENODEV;
}
s = comedi_read_subdevice(info);
- if (s == NULL) {
- retval = -EIO;
- goto done;
- }
+ if (!s)
+ return -EIO;
+
async = s->async;
- if (!nbytes) {
- retval = 0;
- goto done;
- }
- if (!s->busy) {
- retval = 0;
- goto done;
- }
- if (s->busy != file) {
- retval = -EACCES;
- goto done;
- }
+ if (!s->busy || !nbytes)
+ return 0;
+ if (s->busy != file)
+ return -EACCES;
add_wait_queue(&async->wait_head, &wait);
while (nbytes > 0 && !retval) {
@@ -2080,7 +2067,6 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes,
set_current_state(TASK_RUNNING);
remove_wait_queue(&async->wait_head, &wait);
-done:
return count ? count : retval;
}