[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3 of 7] blktap: Remove broken sysfs pause/resume API
blktap: Remove broken sysfs pause/resume API. Safe to remove. This never worked on kernels > 2.6.18 anyway, because the original pause/resume attribute flipping would deadlock. Newer toolstacks should use tap-ctl calls instead. Signed-off-by: Jake Wires <jake.wires@xxxxxxxxxx> Signed-off-by: Daniel Stodden <daniel.stodden@xxxxxxxxxx> diff -r 68eb38b6b16b -r 69301010e4cf drivers/xen/blktap/blktap.h --- a/drivers/xen/blktap/blktap.h Wed Jun 02 19:45:25 2010 -0700 +++ b/drivers/xen/blktap/blktap.h Wed Jun 02 19:45:25 2010 -0700 @@ -31,8 +31,6 @@ #define BLKTAP_RING_FD 2 #define BLKTAP_RING_VMA 3 #define BLKTAP_DEVICE 4 -#define BLKTAP_PAUSE_REQUESTED 6 -#define BLKTAP_PAUSED 7 #define BLKTAP_SHUTDOWN_REQUESTED 8 #define BLKTAP_PASSTHROUGH 9 @@ -41,15 +39,9 @@ #define BLKTAP2_IOCTL_ALLOC_TAP 200 #define BLKTAP2_IOCTL_FREE_TAP 201 #define BLKTAP2_IOCTL_CREATE_DEVICE 202 -#define BLKTAP2_IOCTL_SET_PARAMS 203 -#define BLKTAP2_IOCTL_PAUSE 204 -#define BLKTAP2_IOCTL_REOPEN 205 -#define BLKTAP2_IOCTL_RESUME 206 #define BLKTAP2_MAX_MESSAGE_LEN 256 -#define BLKTAP2_RING_MESSAGE_PAUSE 1 -#define BLKTAP2_RING_MESSAGE_RESUME 2 #define BLKTAP2_RING_MESSAGE_CLOSE 3 #define BLKTAP_REQUEST_FREE 0 @@ -120,8 +112,6 @@ unsigned long ring_vstart; unsigned long user_vstart; - int response; - wait_queue_head_t poll_wait; dev_t devno; @@ -203,8 +193,6 @@ int blktap_ring_free(void); int blktap_ring_create(struct blktap *); int blktap_ring_destroy(struct blktap *); -int blktap_ring_pause(struct blktap *); -int blktap_ring_resume(struct blktap *); void blktap_ring_kick_user(struct blktap *); int blktap_sysfs_init(void); @@ -216,8 +204,6 @@ void blktap_device_free(void); int blktap_device_create(struct blktap *); int blktap_device_destroy(struct blktap *); -int blktap_device_pause(struct blktap *); -int blktap_device_resume(struct blktap *); int blktap_device_run_queue(struct blktap *); void blktap_device_restart(struct blktap *); void blktap_device_finish_request(struct blktap *, diff -r 68eb38b6b16b -r 69301010e4cf drivers/xen/blktap/device.c --- a/drivers/xen/blktap/device.c Wed Jun 02 19:45:25 2010 -0700 +++ b/drivers/xen/blktap/device.c Wed Jun 02 19:45:25 2010 -0700 @@ -923,52 +923,6 @@ } int -blktap_device_resume(struct blktap *tap) -{ - int err; - - if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse) || !blktap_active(tap)) - return -ENODEV; - - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return 0; - - err = blktap_ring_resume(tap); - if (err) - return err; - - /* device size may have changed */ - blktap_device_configure(tap); - - BTDBG("restarting device\n"); - blktap_device_restart(tap); - - return 0; -} - -int -blktap_device_pause(struct blktap *tap) -{ - unsigned long flags; - struct blktap_device *dev = &tap->device; - - if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse) || !blktap_active(tap)) - return -ENODEV; - - if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return 0; - - spin_lock_irqsave(&dev->lock, flags); - - blk_stop_queue(dev->gd->queue); - set_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse); - - spin_unlock_irqrestore(&dev->lock, flags); - - return blktap_ring_pause(tap); -} - -int blktap_device_destroy(struct blktap *tap) { struct blktap_device *dev = &tap->device; diff -r 68eb38b6b16b -r 69301010e4cf drivers/xen/blktap/request.c --- a/drivers/xen/blktap/request.c Wed Jun 02 19:45:25 2010 -0700 +++ b/drivers/xen/blktap/request.c Wed Jun 02 19:45:25 2010 -0700 @@ -238,12 +238,10 @@ list_add(&request->free_list, &pool.free_list); atomic_dec(&handle->bucket->reqs_in_use); free = atomic_dec_and_test(&pool.reqs_in_use); + tap->pending_cnt--; spin_unlock_irqrestore(&pool.lock, flags); - if (--tap->pending_cnt == 0) - wake_up_interruptible(&tap->wq); - if (free) wake_up(&pool.wait_queue); } diff -r 68eb38b6b16b -r 69301010e4cf drivers/xen/blktap/ring.c --- a/drivers/xen/blktap/ring.c Wed Jun 02 19:45:25 2010 -0700 +++ b/drivers/xen/blktap/ring.c Wed Jun 02 19:45:25 2010 -0700 @@ -178,9 +178,6 @@ ring->vma = NULL; clear_bit(BLKTAP_RING_VMA, &tap->dev_inuse); - clear_bit(BLKTAP_PAUSED, &tap->dev_inuse); - clear_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse); - wake_up(&tap->wq); } @@ -381,70 +378,6 @@ tap->params = params; return blktap_device_create(tap); - - case BLKTAP2_IOCTL_SET_PARAMS: - if (!arg) - return -EINVAL; - - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EINVAL; - - if (copy_from_user(¶ms, (struct blktap_params __user *)arg, - sizeof(params))) { - BTERR("failed to get params\n"); - return -EFAULT; - } - - if (blktap_validate_params(tap, ¶ms)) { - BTERR("invalid params\n"); - return -EINVAL; - } - - tap->params = params; - return 0; - - case BLKTAP2_IOCTL_PAUSE: - if (!test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) - return -EINVAL; - - set_bit(BLKTAP_PAUSED, &tap->dev_inuse); - clear_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse); - - blktap_ring_set_message(tap, 0); - wake_up_interruptible(&tap->wq); - - return 0; - - - case BLKTAP2_IOCTL_REOPEN: - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EINVAL; - - if (!arg) - return -EINVAL; - - if (copy_to_user((char __user *)arg, - tap->params.name, - strlen(tap->params.name) + 1)) - return -EFAULT; - - blktap_ring_set_message(tap, 0); - wake_up_interruptible(&tap->wq); - - return 0; - - case BLKTAP2_IOCTL_RESUME: - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EINVAL; - - tap->ring.response = (int)arg; - if (!tap->ring.response) - clear_bit(BLKTAP_PAUSED, &tap->dev_inuse); - - blktap_ring_set_message(tap, 0); - wake_up_interruptible(&tap->wq); - - return 0; } return -ENOIOCTLCMD; @@ -494,66 +427,6 @@ } int -blktap_ring_resume(struct blktap *tap) -{ - int err; - struct blktap_ring *ring = &tap->ring; - - if (!blktap_active(tap)) - return -ENODEV; - - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EINVAL; - - /* set shared flag for resume */ - ring->response = 0; - - blktap_ring_set_message(tap, BLKTAP2_RING_MESSAGE_RESUME); - blktap_ring_kick_user(tap); - - wait_event_interruptible(tap->wq, ring->response || - !test_bit(BLKTAP_PAUSED, &tap->dev_inuse)); - - err = ring->response; - ring->response = 0; - - BTDBG("err: %d\n", err); - - if (err) - return err; - - if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EAGAIN; - - return 0; -} - -int -blktap_ring_pause(struct blktap *tap) -{ - if (!blktap_active(tap)) - return -ENODEV; - - if (!test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) - return -EINVAL; - - BTDBG("draining queue\n"); - wait_event_interruptible(tap->wq, !tap->pending_cnt); - if (tap->pending_cnt) - return -EAGAIN; - - blktap_ring_set_message(tap, BLKTAP2_RING_MESSAGE_PAUSE); - blktap_ring_kick_user(tap); - - BTDBG("waiting for tapdisk response\n"); - wait_event_interruptible(tap->wq, test_bit(BLKTAP_PAUSED, &tap->dev_inuse)); - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) - return -EAGAIN; - - return 0; -} - -int blktap_ring_destroy(struct blktap *tap) { if (!test_bit(BLKTAP_RING_FD, &tap->dev_inuse) && diff -r 68eb38b6b16b -r 69301010e4cf drivers/xen/blktap/sysfs.c --- a/drivers/xen/blktap/sysfs.c Wed Jun 02 19:45:25 2010 -0700 +++ b/drivers/xen/blktap/sysfs.c Wed Jun 02 19:45:25 2010 -0700 @@ -38,12 +38,6 @@ } #define CLASS_DEVICE_ATTR(a,b,c,d) DEVICE_ATTR(a,b,c,d) - -static ssize_t blktap_sysfs_pause_device(struct device *, struct device_attribute *, const char *, size_t); -CLASS_DEVICE_ATTR(pause, S_IWUSR, NULL, blktap_sysfs_pause_device); -static ssize_t blktap_sysfs_resume_device(struct device *, struct device_attribute *, const char *, size_t); -CLASS_DEVICE_ATTR(resume, S_IWUSR, NULL, blktap_sysfs_resume_device); - static ssize_t blktap_sysfs_set_name(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { @@ -57,12 +51,6 @@ err = -ENODEV; goto out; } - - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) { - err = -EPERM; - goto out; - } - if (size > BLKTAP2_MAX_MESSAGE_LEN) { err = -ENAMETOOLONG; goto out; @@ -123,81 +111,6 @@ } CLASS_DEVICE_ATTR(remove, S_IWUSR, NULL, blktap_sysfs_remove_device); -static ssize_t -blktap_sysfs_pause_device(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t size) -{ - int err; - struct blktap *tap = (struct blktap *)dev_get_drvdata(dev); - - blktap_sysfs_enter(tap); - - BTDBG("pausing %u:%u: dev_inuse: %lu\n", - MAJOR(tap->ring.devno), MINOR(tap->ring.devno), tap->dev_inuse); - - if (!tap->ring.dev || - test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) { - err = -ENODEV; - goto out; - } - - if (test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) { - err = -EBUSY; - goto out; - } - - if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) { - err = 0; - goto out; - } - - err = blktap_device_pause(tap); - if (!err) { - device_remove_file(dev, &dev_attr_pause); - err = device_create_file(dev, &dev_attr_resume); - } - -out: - blktap_sysfs_exit(tap); - - return (err ? err : size); -} - -static ssize_t -blktap_sysfs_resume_device(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t size) -{ - int err; - struct blktap *tap = (struct blktap *)dev_get_drvdata(dev); - - blktap_sysfs_enter(tap); - - if (!tap->ring.dev || - test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) { - err = -ENODEV; - goto out; - } - - if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) { - err = -EINVAL; - goto out; - } - - err = blktap_device_resume(tap); - if (!err) { - device_remove_file(dev, &dev_attr_resume); - err = device_create_file(dev, &dev_attr_pause); - } - -out: - blktap_sysfs_exit(tap); - - BTDBG("returning %zd\n", (err ? err : size)); - return (err ? err : size); -} - #ifdef ENABLE_PASSTHROUGH static ssize_t blktap_sysfs_enable_passthrough(struct device *dev, @@ -316,26 +229,18 @@ printk(KERN_CRIT "%s: adding attributes for dev %p\n", __func__, dev); err = device_create_file(dev, &dev_attr_name); if (err) - goto out; + goto fail; err = device_create_file(dev, &dev_attr_remove); if (err) - goto out_unregister_name; - err = device_create_file(dev, &dev_attr_pause); - if (err) - goto out_unregister_remove; + goto fail; err = device_create_file(dev, &dev_attr_debug); if (err) - goto out_unregister_pause; + goto fail; return 0; -out_unregister_pause: - device_remove_file(dev, &dev_attr_pause); -out_unregister_remove: - device_remove_file(dev, &dev_attr_remove); -out_unregister_name: - device_remove_file(dev, &dev_attr_name); -out: +fail: + device_unregister(dev); return err; } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |