diff options
author | H Hartley Sweeten | 2012-12-19 23:40:08 +0100 |
---|---|---|
committer | Greg Kroah-Hartman | 2013-01-07 23:25:47 +0100 |
commit | 5c87fef53cb338a919a18349facaf172c1f0cf75 (patch) | |
tree | d837da94e391f0e5ea8cb166226b63a03438fa77 /drivers/staging/comedi/comedi_fops.c | |
parent | staging: comedi: comedi_fops: cleanup comedi_poll() (diff) | |
download | kernel-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.c | 34 |
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; } |