static int adu_release(struct inode *inode, struct file *file) { struct adu_device *dev = NULL; int retval = 0; dbg(2," %s : enter", __FUNCTION__); if (file == NULL) { dbg(1," %s : file is NULL", __FUNCTION__); retval = -ENODEV; goto exit; } dev = file->private_data; if (dev == NULL) { dbg(1," %s : object is NULL", __FUNCTION__); retval = -ENODEV; goto exit; } /* lock our device */ mutex_lock(&dev->mtx); /* not interruptible */ if (dev->open_count <= 0) { dbg(1," %s : device not opened", __FUNCTION__); retval = -ENODEV; goto exit; } if (dev->udev == NULL) { /* the device was unplugged before the file was released */ mutex_unlock(&dev->mtx); adu_delete(dev); dev = NULL; } else { /* do the work */ retval = adu_release_internal(dev); } exit: if (dev) mutex_unlock(&dev->mtx); dbg(2," %s : leave, return value %d", __FUNCTION__, retval); return retval; }
static int adu_release(struct inode *inode, struct file *file) { struct adu_device *dev; int retval = 0; dbg(2," %s : enter", __func__); if (file == NULL) { dbg(1," %s : file is NULL", __func__); retval = -ENODEV; goto exit; } dev = file->private_data; if (dev == NULL) { dbg(1," %s : object is NULL", __func__); retval = -ENODEV; goto exit; } mutex_lock(&adutux_mutex); /* not interruptible */ if (dev->open_count <= 0) { dbg(1," %s : device not opened", __func__); retval = -ENODEV; goto unlock; } adu_release_internal(dev); if (dev->udev == NULL) { /* the device was unplugged before the file was released */ if (!dev->open_count) /* ... and we're the last user */ adu_delete(dev); } unlock: mutex_unlock(&adutux_mutex); exit: dbg(2," %s : leave, return value %d", __func__, retval); return retval; }
static int adu_release(struct inode *inode, struct file *file) { struct adu_device *dev; int retval = 0; dbg(2," %s : enter", __func__); if (file == NULL) { dbg(1," %s : file is NULL", __func__); retval = -ENODEV; goto exit; } dev = file->private_data; if (dev == NULL) { dbg(1," %s : object is NULL", __func__); retval = -ENODEV; goto exit; } mutex_lock(&adutux_mutex); if (dev->open_count <= 0) { dbg(1," %s : device not opened", __func__); retval = -ENODEV; goto unlock; } adu_release_internal(dev); if (dev->udev == NULL) { if (!dev->open_count) adu_delete(dev); } unlock: mutex_unlock(&adutux_mutex); exit: dbg(2," %s : leave, return value %d", __func__, retval); return retval; }
static int adu_release(struct inode *inode, struct file *file) { struct adu_device *dev = NULL; int retval = 0; dbg(2," %s : enter", __FUNCTION__); if (file == NULL) { dbg(1," %s : file is NULL", __FUNCTION__); retval = -ENODEV; goto exit; } dev = file->private_data; if (dev == NULL) { dbg(1," %s : object is NULL", __FUNCTION__); retval = -ENODEV; goto exit; } /* lock our device */ down(&dev->sem); /* not interruptible */ if (dev->open_count <= 0) { dbg(1," %s : device not opened", __FUNCTION__); retval = -ENODEV; goto exit; } /* do the work */ retval = adu_release_internal(dev); exit: if (dev) up(&dev->sem); dbg(2," %s : leave, return value %d", __FUNCTION__, retval); return retval; }