X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fusb%2Fclass%2Fusblp.c;h=cc03f6875ed084f93d0a112550b7301e7a205e2b;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=48dee4b8d8e50a8b6064fb5b2e98b29fc2293e91;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 48dee4b8d..cc03f6875 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c @@ -55,7 +55,6 @@ #include #include #include -#include #undef DEBUG #include @@ -224,7 +223,7 @@ static int usblp_cache_device_id_string(struct usblp *usblp); /* forward reference to make our lives easier */ static struct usb_driver usblp_driver; -static DEFINE_MUTEX(usblp_mutex); /* locks the existence of usblp's */ +static DECLARE_MUTEX(usblp_sem); /* locks the existence of usblp's */ /* * Functions for usblp control messages. @@ -352,7 +351,7 @@ static int usblp_open(struct inode *inode, struct file *file) if (minor < 0) return -ENODEV; - mutex_lock (&usblp_mutex); + down (&usblp_sem); retval = -ENODEV; intf = usb_find_interface(&usblp_driver, minor); @@ -400,7 +399,7 @@ static int usblp_open(struct inode *inode, struct file *file) } } out: - mutex_unlock (&usblp_mutex); + up (&usblp_sem); return retval; } @@ -426,13 +425,13 @@ static int usblp_release(struct inode *inode, struct file *file) { struct usblp *usblp = file->private_data; - mutex_lock (&usblp_mutex); + down (&usblp_sem); usblp->used = 0; if (usblp->present) { usblp_unlink_urbs(usblp); } else /* finish cleanup from disconnect */ usblp_cleanup (usblp); - mutex_unlock (&usblp_mutex); + up (&usblp_sem); return 0; } @@ -701,6 +700,7 @@ static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t usblp->wcomplete = 0; err = usb_submit_urb(usblp->writeurb, GFP_KERNEL); if (err) { + usblp->wcomplete = 1; if (err != -ENOMEM) count = -EIO; else @@ -1153,7 +1153,7 @@ static void usblp_disconnect(struct usb_interface *intf) device_remove_file(&intf->dev, &dev_attr_ieee1284_id); - mutex_lock (&usblp_mutex); + down (&usblp_sem); down (&usblp->sem); usblp->present = 0; usb_set_intfdata (intf, NULL); @@ -1167,7 +1167,7 @@ static void usblp_disconnect(struct usb_interface *intf) if (!usblp->used) usblp_cleanup (usblp); - mutex_unlock (&usblp_mutex); + up (&usblp_sem); } static struct usb_device_id usblp_ids [] = {