dev->callback = xseg_callback;
xseg = (void *)dev->segment;
+ goto out;
+
put_out:
xsegdev_put(dev);
out:
//xsegdev->callarg = NULL;
xsegdev->callback = NULL;
xsegdev_put(xsegdev);
+
+ xsegdev_put(xsegdev);
}
static struct xseg_type xseg_xsegdev = {
int xsegbd_xseg_quit(void)
{
+ struct xsegdev *xsegdev;
+
/* make sure to unmap the segment first */
+ xsegdev = xsegdev_get(0);
+ clear_bit(XSEGDEV_RESERVED, &xsegdev->flags);
xsegbd.xseg->type.ops.unmap(xsegbd.xseg, xsegbd.xseg->segment_size);
+ xsegdev_put(xsegdev);
xseg_unregister_peer(xseg_peer_xsegdev.name);
xseg_unregister_peer(xseg_peer_posix.name);
goto out_unlock;
clear_bit(XSEGDEV_READY, &dev->flags);
- ret = wait_event_interruptible(dev->wq, atomic_read(&dev->usercount) <= 1);
+ ret = wait_event_interruptible(dev->wq, atomic_read(&dev->usercount) < 1);
if (ret)
goto out_unlock;