Commit 60bd3b5e authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman

[PATCH] - cleanup for new module primitives

parent 24dd2623
......@@ -860,7 +860,7 @@ static int proc_submiturb(struct dev_state *ps, void *arg)
if (uurb.buffer_length > 16384)
return -EINVAL;
if (!access_ok((uurb.endpoint & USB_DIR_IN) ? VERIFY_WRITE : VERIFY_READ, uurb.buffer, uurb.buffer_length))
return -EFAULT;
return -EFAULT;
break;
default:
......@@ -955,10 +955,10 @@ static int processcompl(struct async *as)
if (!(usb_pipeisoc(urb->pipe)))
return 0;
for (i = 0; i < urb->number_of_packets; i++) {
if (put_user(urb->iso_frame_desc[i].actual_length,
if (put_user(urb->iso_frame_desc[i].actual_length,
&((struct usbdevfs_urb *)as->userurb)->iso_frame_desc[i].actual_length))
return -EFAULT;
if (put_user(urb->iso_frame_desc[i].status,
if (put_user(urb->iso_frame_desc[i].status,
&((struct usbdevfs_urb *)as->userurb)->iso_frame_desc[i].status))
return -EFAULT;
}
......@@ -1122,18 +1122,16 @@ static int proc_ioctl (struct dev_state *ps, void *arg)
unlock_kernel();
retval = -ENOSYS;
} else {
if (driver->owner
&& !try_inc_mod_count (driver->owner)) {
if (!try_module_get (driver->owner)) {
unlock_kernel();
retval = -ENOSYS;
break;
}
unlock_kernel ();
retval = driver->ioctl (ifp, ctrl.ioctl_code, buf);
if (driver->owner)
__MOD_DEC_USE_COUNT (driver->owner);
put_module (driver->owner);
}
if (retval == -ENOIOCTLCMD)
retval = -ENOTTY;
}
......@@ -1188,7 +1186,7 @@ static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
case USBDEVFS_RESET:
ret = proc_resetdevice(ps);
break;
case USBDEVFS_CLEAR_HALT:
ret = proc_clearhalt(ps, (void *)arg);
if (ret >= 0)
......
......@@ -69,7 +69,8 @@ static struct device_driver usb_generic_driver = {
.probe = generic_probe,
.remove = generic_remove,
};
/* needs to be called with BKL held */
int usb_device_probe(struct device *dev)
{
struct usb_interface * intf = to_usb_interface(dev);
......@@ -83,11 +84,8 @@ int usb_device_probe(struct device *dev)
if (!driver->probe)
return error;
if (driver->owner) {
m = try_inc_mod_count(driver->owner);
if (m == 0)
return error;
}
if (!try_module_get(driver->owner))
return error;
id = usb_match_id (intf, driver->id_table);
if (id) {
......@@ -99,8 +97,7 @@ int usb_device_probe(struct device *dev)
if (!error)
intf->driver = driver;
if (driver->owner)
__MOD_DEC_USE_COUNT(driver->owner);
put_module(driver->owner);
return error;
}
......@@ -120,14 +117,12 @@ int usb_device_remove(struct device *dev)
return -ENODEV;
}
if (driver->owner) {
m = try_inc_mod_count(driver->owner);
if (m == 0) {
// FIXME this happens even when we just rmmod
// drivers that aren't in active use...
err("Dieing driver still bound to device.\n");
return -EIO;
}
m = try_module_get(driver->owner);
if (m == 0) {
// FIXME this happens even when we just rmmod
// drivers that aren't in active use...
err("Dieing driver still bound to device.\n");
return -EIO;
}
/* if we sleep here on an umanaged driver
......@@ -143,8 +138,7 @@ int usb_device_remove(struct device *dev)
usb_driver_release_interface(driver, intf);
up(&driver->serialize);
if (driver->owner)
__MOD_DEC_USE_COUNT(driver->owner);
module_put(driver->owner)
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment