--- zzzz-none-000/linux-2.6.32.61/drivers/staging/comedi/comedi_fops.c 2013-06-10 09:43:48.000000000 +0000 +++ virian-300e-630/linux-2.6.32.61/drivers/staging/comedi/comedi_fops.c 2013-02-12 11:05:26.000000000 +0000 @@ -809,7 +809,7 @@ ret = -EAGAIN; break; } - ret = s->async->inttrig(dev, s, data[0]); + ret = s->async->inttrig(dev, s, insn->data[0]); if (ret >= 0) ret = 1; break; @@ -1035,6 +1035,7 @@ goto cleanup; } + kfree(async->cmd.chanlist); async->cmd = user_cmd; async->cmd.data = NULL; /* load channel/gain list */ @@ -1498,7 +1499,7 @@ mask = 0; read_subdev = comedi_get_read_subdevice(dev_file_info); - if (read_subdev && read_subdev->async) { + if (read_subdev) { poll_wait(file, &read_subdev->async->wait_head, wait); if (!read_subdev->busy || comedi_buf_read_n_available(read_subdev->async) > 0 @@ -1508,7 +1509,7 @@ } } write_subdev = comedi_get_write_subdevice(dev_file_info); - if (write_subdev && write_subdev->async) { + if (write_subdev) { poll_wait(file, &write_subdev->async->wait_head, wait); comedi_buf_write_alloc(write_subdev->async, write_subdev->async->prealloc_bufsz); @@ -1550,7 +1551,7 @@ } s = comedi_get_write_subdevice(dev_file_info); - if (s == NULL || s->async == NULL) { + if (s == NULL) { retval = -EIO; goto done; } @@ -1658,7 +1659,7 @@ } s = comedi_get_read_subdevice(dev_file_info); - if (s == NULL || s->async == NULL) { + if (s == NULL) { retval = -EIO; goto done; } @@ -1758,8 +1759,6 @@ if (async) { comedi_reset_async_buf(async); async->inttrig = NULL; - kfree(async->cmd.chanlist); - async->cmd.chanlist = NULL; } else { printk(KERN_ERR "BUG: (?) do_become_nonbusy called with async=0\n");