diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-04-13 09:50:21 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-04-13 09:50:21 +0200 |
commit | 659c36fcda403013a01b85da07cf2d9711e6d6c7 (patch) | |
tree | ece2e7d0e2c19ea5a3d0ec172ad0b81a8a19021d /drivers/scsi/st.c | |
parent | 9521d830b6341d1887dcfc2aebde23fbfa5f1473 (diff) | |
parent | 5a7ed29c7572d00a75e8c4529e30c5ac2ef82271 (diff) |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Fixes and improvements for perf/core:
. Overhaul the tools/ makefiles, gluing them to the top level Makefile, from
Borislav Petkov.
. Move the UI files from tools/perf/util/ui/ to tools/perf/ui/. Also move
the GTK+ browser to tools/perf/ui/gtk/, from Namhyung Kim.
. Only fallback to sw cycles counter on ENOENT for the hw cycles, from
Robert Richter
. Trivial fixes from Robert Richter
. Handle the autogenerated bison/flex files better, from Namhyung and Jiri Olsa.
. Navigate jump instructions in the annotate browser, just press enter or ->,
still needs support for a jump navigation history, i.e. to go back.
. Search string in the annotate browser: same keys as vim:
/ forward
n next backward/forward
? backward
. Clarify number of events/samples in the report header, from Ashay Rane
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/scsi/st.c')
-rw-r--r-- | drivers/scsi/st.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 9b28f39bac2..9262cdfa4b2 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -1177,6 +1177,7 @@ static int check_tape(struct scsi_tape *STp, struct file *filp) static int st_open(struct inode *inode, struct file *filp) { int i, retval = (-EIO); + int resumed = 0; struct scsi_tape *STp; struct st_partstat *STps; int dev = TAPE_NR(inode); @@ -1211,6 +1212,11 @@ static int st_open(struct inode *inode, struct file *filp) write_unlock(&st_dev_arr_lock); STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0; + if (scsi_autopm_get_device(STp->device) < 0) { + retval = -EIO; + goto err_out; + } + resumed = 1; if (!scsi_block_when_processing_errors(STp->device)) { retval = (-ENXIO); goto err_out; @@ -1258,6 +1264,8 @@ static int st_open(struct inode *inode, struct file *filp) normalize_buffer(STp->buffer); STp->in_use = 0; scsi_tape_put(STp); + if (resumed) + scsi_autopm_put_device(STp->device); mutex_unlock(&st_mutex); return retval; @@ -1391,6 +1399,7 @@ static int st_release(struct inode *inode, struct file *filp) write_lock(&st_dev_arr_lock); STp->in_use = 0; write_unlock(&st_dev_arr_lock); + scsi_autopm_put_device(STp->device); scsi_tape_put(STp); return result; @@ -4154,6 +4163,7 @@ static int st_probe(struct device *dev) if (error) goto out_free_tape; } + scsi_autopm_put_device(SDp); sdev_printk(KERN_NOTICE, SDp, "Attached scsi tape %s\n", tape_name(tpnt)); @@ -4201,6 +4211,7 @@ static int st_remove(struct device *dev) struct scsi_tape *tpnt; int i, j, mode; + scsi_autopm_get_device(SDp); write_lock(&st_dev_arr_lock); for (i = 0; i < st_dev_max; i++) { tpnt = scsi_tapes[i]; |