Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 151113
b: refs/heads/master
c: b241f7b
h: refs/heads/master
i:
  151111: 9f8300d
v: v3
  • Loading branch information
Frank Munzert authored and Martin Schwidefsky committed Jun 16, 2009
1 parent c79203f commit 4601ab0
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 524dbcdad7a84a054b4458aa94e152ffb2bfabbd
refs/heads/master: b241f7bcc603babd3de903fa855d418ee7c4751d
26 changes: 25 additions & 1 deletion trunk/drivers/s390/char/vmur.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Linux driver for System z and s390 unit record devices
* (z/VM virtual punch, reader, printer)
*
* Copyright IBM Corp. 2001, 2007
* Copyright IBM Corp. 2001, 2009
* Authors: Malcolm Beattie <beattiem@uk.ibm.com>
* Michael Holzheu <holzheu@de.ibm.com>
* Frank Munzert <munzert@de.ibm.com>
Expand Down Expand Up @@ -60,6 +60,7 @@ static int ur_probe(struct ccw_device *cdev);
static void ur_remove(struct ccw_device *cdev);
static int ur_set_online(struct ccw_device *cdev);
static int ur_set_offline(struct ccw_device *cdev);
static int ur_pm_suspend(struct ccw_device *cdev);

static struct ccw_driver ur_driver = {
.name = "vmur",
Expand All @@ -69,6 +70,7 @@ static struct ccw_driver ur_driver = {
.remove = ur_remove,
.set_online = ur_set_online,
.set_offline = ur_set_offline,
.freeze = ur_pm_suspend,
};

static DEFINE_MUTEX(vmur_mutex);
Expand Down Expand Up @@ -157,6 +159,28 @@ static void urdev_put(struct urdev *urd)
urdev_free(urd);
}

/*
* State and contents of ur devices can be changed by class D users issuing
* CP commands such as PURGE or TRANSFER, while the Linux guest is suspended.
* Also the Linux guest might be logged off, which causes all active spool
* files to be closed.
* So we cannot guarantee that spool files are still the same when the Linux
* guest is resumed. In order to avoid unpredictable results at resume time
* we simply refuse to suspend if a ur device node is open.
*/
static int ur_pm_suspend(struct ccw_device *cdev)
{
struct urdev *urd = cdev->dev.driver_data;

TRACE("ur_pm_suspend: cdev=%p\n", cdev);
if (urd->open_flag) {
pr_err("Unit record device %s is busy, %s refusing to "
"suspend.\n", dev_name(&cdev->dev), ur_banner);
return -EBUSY;
}
return 0;
}

/*
* Low-level functions to do I/O to a ur device.
* alloc_chan_prog
Expand Down

0 comments on commit 4601ab0

Please sign in to comment.